7 #ifndef Fw_ExternalArray_HPP 8 #define Fw_ExternalArray_HPP 12 #include <type_traits> 26 static_assert(std::is_assignable<T&, T>::value,
"T must be assignable to T&");
41 : m_elements(elements), m_size(size) {}
68 FW_ASSERT(i < this->m_size, static_cast<FwAssertArgType>(i));
69 return this->m_elements[i];
77 FW_ASSERT(i < this->m_size, static_cast<FwAssertArgType>(i));
78 return this->m_elements[i];
85 this->m_elements = a.m_elements;
86 this->m_size = a.m_size;
115 this->releaseStorage();
116 this->m_elements = elements;
118 this->m_destroyElementsOnRelease =
false;
129 FW_ASSERT(reinterpret_cast<uintptr_t>(data.
bytes) %
alignof(T) == 0);
133 this->releaseStorage();
135 this->m_elements =
reinterpret_cast<T*
>(data.
bytes);
142 (void)
new (&this->m_elements[i]) T();
147 this->m_destroyElementsOnRelease =
true;
164 return size *
sizeof(T);
173 void releaseStorage() {
174 if ((this->m_elements !=
nullptr) && this->m_destroyElementsOnRelease) {
175 for (
FwSizeType i = 0; i < this->m_size; i++) {
176 this->m_elements[i].~T();
178 this->m_destroyElementsOnRelease =
false;
188 T* m_elements =
nullptr;
194 bool m_destroyElementsOnRelease =
false;
PlatformSizeType FwSizeType
~ExternalArray()
Destructor.
void setStorage(T *elements, FwSizeType size)
Set the backing storage (typed data)
ExternalArray()
Zero-argument constructor.
T & operator[](const FwSizeType i)
#define FW_MIN(a, b)
MIN macro.
ExternalArray(const ExternalArray< T > &a)
Copy constructor.
ExternalArray(ByteArray data, FwSizeType size)
const T * getElements() const
A variable-length byte array.
void setStorage(ByteArray data, FwSizeType size)
ExternalArray(T *elements, FwSizeType size)
FwSizeType getSize() const
uint8_t U8
8-bit unsigned integer
void copyDataFrom(const ExternalArray< T > &a)
Copy the data from a.
U8 *const bytes
The bytes.
ExternalArray< T > & operator=(const ExternalArray< T > &a)
static constexpr U8 getByteArrayAlignment()
static constexpr FwSizeType getByteArraySize(FwSizeType size)
const T & operator[](const FwSizeType i) const
const FwSizeType size
The size.