You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.1 KiB
101 lines
3.1 KiB
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Digital Voice Modem - Common Library
|
|
* GPLv2 Open Source. Use is subject to license terms.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright (C) 2025 Bryan Biedenkapp, N2PLL
|
|
*
|
|
*/
|
|
/**
|
|
* @file VariableLengthArray.h
|
|
* @ingroup common
|
|
*/
|
|
#pragma once
|
|
#if !defined(__VARIABLE_LENGTH_ARRAY_H__)
|
|
#define __VARIABLE_LENGTH_ARRAY_H__
|
|
|
|
#if !defined(__COMMON_DEFINES_H__)
|
|
#warning "VariableLengthArray.h included before Defines.h, please check include order"
|
|
#include "common/Defines.h"
|
|
#endif
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Types
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/**
|
|
* @addtogroup common
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Unique uint8_t array.
|
|
* @ingroup common
|
|
*/
|
|
typedef std::unique_ptr<uint8_t[]> UInt8Array;
|
|
|
|
/**
|
|
* @brief Unique char array.
|
|
* @ingroup common
|
|
*/
|
|
typedef std::unique_ptr<char[]> CharArray;
|
|
|
|
/**
|
|
* @brief Unique char array.
|
|
* @ingroup common
|
|
*/
|
|
typedef std::unique_ptr<short[]> ShortArray;
|
|
|
|
/** @} */
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Macros
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/**
|
|
* @addtogroup common
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Declares a unique uint8_t array/buffer.
|
|
* This macro creates a unique pointer to a uint8_t array of the specified length and initializes it to zero.
|
|
* The resulting pointer is named after the parameter name passed to the macro.
|
|
* @param name Name of array/buffer.
|
|
* @param len Length of array/buffer.
|
|
*/
|
|
#define DECLARE_UINT8_ARRAY(name, len) \
|
|
UInt8Array __##name##__UInt8Array = std::make_unique<uint8_t[]>(len); \
|
|
uint8_t* name = __##name##__UInt8Array.get(); \
|
|
::memset(name, 0x00U, len);
|
|
|
|
/**
|
|
* @brief Declares a unique char array/buffer.
|
|
* This macro creates a unique pointer to a char array of the specified length and initializes it to zero.
|
|
* The resulting pointer is named after the parameter name passed to the macro.
|
|
* @ingroup common
|
|
* @param name Name of array/buffer.
|
|
* @param len Length of array/buffer.
|
|
*/
|
|
#define DECLARE_CHAR_ARRAY(name, len) \
|
|
CharArray __##name##__CharArray = std::make_unique<char[]>(len); \
|
|
char* name = __##name##__CharArray.get(); \
|
|
::memset(name, 0, len);
|
|
|
|
/**
|
|
* @brief Declares a unique short array/buffer.
|
|
* This macro creates a unique pointer to a short array of the specified length and initializes it to zero.
|
|
* The resulting pointer is named after the parameter name passed to the macro.
|
|
* @ingroup common
|
|
* @param name Name of array/buffer.
|
|
* @param len Length of array/buffer.
|
|
*/
|
|
#define DECLARE_SHORT_ARRAY(name, len) \
|
|
ShortArray __##name##__ShortArray = std::make_unique<short[]>(len); \
|
|
short* name = __##name##__ShortArray.get(); \
|
|
::memset(name, 0, len);
|
|
|
|
/** @} */
|
|
|
|
#endif // __VARIABLE_LENGTH_ARRAY_H__
|