6#ifndef DSP_FW_FW_ARRAY_H_
7#define DSP_FW_FW_ARRAY_H_
19typedef struct byte_array {
28 return (uint8_t *)ba->
data;
51 ba->
data += required_size;
52 ba->
size -= required_size;
64 return (uint8_t *)ba.
data;
110Array(T * ptr,
size_t size)
123void Init(T *ptr,
size_t size)
136void InitWithRange(T *ptr, T *ptr_end)
140 size_ = ptr_end - ptr;
147void Detach(
void) { data_ = NULL; size_ = 0; }
154size_t size(
void)
const {
return size_; }
158size_t alloc_size(
void)
const {
return size()*
sizeof(T); }
162void Resize(
size_t new_size) { size_ = new_size; }
168const T *
data(
void)
const {
return (
const T *)data_; }
175T *
data(
void) {
return (T *)data_; }
180const T *data_end(
void)
const {
return data() + size_; }
185T *data_end(
void) {
return data() + size_; }
192const T & operator[](
size_t idx)
const {
203T & operator[](
size_t idx) {
216void copyFrom(
const T *src,
size_t srcSize,
size_t dst_offset = 0)
219 assert(size() > dst_offset);
220 assert((size() - dst_offset) >= srcSize);
221 memcpy_s(
data() + dst_offset, alloc_size() - dst_offset *
sizeof(T),
222 src, srcSize *
sizeof(T));
232void copyFrom(
const Array < T > &src,
size_t dst_offset = 0)
235 assert(size() > dst_offset);
236 assert((size() - dst_offset) >= src.size());
237 memcpy_s(
data() + dst_offset, alloc_size() - dst_offset *
sizeof(T),
238 src.data(), src.alloc_size());
246void copyTo(T *dst,
size_t dstSize)
const {
248 assert(size() <= dstSize);
249 memcpy_s(dst, dstSize *
sizeof(T),
data(), alloc_size());
256void copyTo(Array < T > &dst)
const {
258 assert(size() <= dst.size());
259 memcpy_s(dst.data(), dst.alloc_size(),
data(), alloc_size());
268void copyFragmentTo(Array < T > &dst,
size_t copy_size,
size_t src_offset = 0)
const {
270 assert((src_offset + copy_size) <= size());
271 assert(copy_size <= dst.size());
272 memcpy_s(dst.data(), dst.alloc_size(),
data() + src_offset, copy_size *
sizeof(T));
284 if (alloc_size() <
sizeof(TC)) {
288 return reinterpret_cast < TC *
> (
data());
292TC *dataAsArray(
size_t size)
294 if (alloc_size() <
sizeof(TC)*size) {
298 return reinterpret_cast < TC *
> (
data());
307const TC *dataAs(
void)
const {
308 if (alloc_size() <
sizeof(TC)) {
312 return reinterpret_cast < const TC *
> (
data());
320void setDataAs(
const TC & d)
322 TC *t = dataAs < TC > ();
337 memset(
data(), 0x00, alloc_size());
340void Swap(Array < T > *array)
342 Array < T > temp(*array);
343 array->data_ = data_;
344 array->size_ = size_;
345 this->data_ = temp.data_;
346 this->size_ = temp.size_;
349void Swap(Array < T > &array)
351 Array < T > temp(array);
354 this->data_ = temp.data_;
355 this->size_ = temp.size_;
365typedef Array < uint8_t > ByteArray;
370typedef Array < uint32_t > DwordArray;
static uint8_t * array_get_data(const byte_array_t *ba)
Definition array.h:26
static size_t array_get_size(const byte_array_t *ba)
Definition array.h:37
static uint8_t * array_alloc_from(byte_array_t *ba, size_t required_size)
Definition array.h:42
static uint8_t * array_get_data_end(const byte_array_t *ba)
Definition array.h:31
uint32_t data[]
Definition debug_stream_slot.h:2
Definition module_initial_settings_concrete.h:46
#define assert(x)
Definition panic.h:19
static int memcpy_s(void *dest, size_t dest_size, const void *src, size_t count)
Definition string.h:38
size_t size
Definition array.h:23
uint8_t * data
Definition array.h:21