fix(array): fix various bugs with array clearing

This commit is contained in:
fallenoak 2023-02-21 22:10:14 -06:00
parent 181ef114e4
commit 7e89d65d7a
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
3 changed files with 73 additions and 10 deletions

View file

@ -8,17 +8,20 @@
template <class T>
class TSBaseArray {
public:
uint32_t m_alloc = 0;
uint32_t m_count = 0;
T* m_data = nullptr;
// Member variables
uint32_t m_alloc;
uint32_t m_count;
T* m_data;
// Virtual member functions
virtual const char* MemFileName() const;
virtual int32_t MemLineNo() const;
// Member functions
T& operator[](uint32_t index);
void CheckArrayBounds(uint32_t index) const;
void Constructor();
uint32_t Count() const;
void Clear();
T* Ptr();
const T* Ptr() const;
T* Top();
@ -48,14 +51,15 @@ void TSBaseArray<T>::CheckArrayBounds(uint32_t index) const {
}
template <class T>
uint32_t TSBaseArray<T>::Count() const {
return this->m_count;
void TSBaseArray<T>::Constructor() {
this->m_alloc = 0;
this->m_count = 0;
this->m_data = nullptr;
}
template <class T>
void TSBaseArray<T>::Clear() {
delete[] this->m_data;
TSBaseArray<T>();
uint32_t TSBaseArray<T>::Count() const {
return this->m_count;
}
template <class T>

View file

@ -8,14 +8,21 @@
template <class T>
class TSFixedArray : public TSBaseArray<T> {
public:
TSFixedArray();
~TSFixedArray();
TSFixedArray<T>& operator=(const TSFixedArray<T>& source);
void Clear();
void ReallocAndClearData(uint32_t count);
void ReallocData(uint32_t count);
void Set(uint32_t count, const T* data);
void SetCount(uint32_t count);
};
template <class T>
TSFixedArray<T>::TSFixedArray() {
this->Constructor();
}
template <class T>
TSFixedArray<T>::~TSFixedArray() {
for (uint32_t i = 0; i < this->Count(); i++) {
@ -37,6 +44,12 @@ TSFixedArray<T>& TSFixedArray<T>::operator=(const TSFixedArray<T>& source) {
return *this;
}
template <class T>
void TSFixedArray<T>::Clear() {
this->~TSFixedArray<T>();
this->Constructor();
}
template <class T>
void TSFixedArray<T>::ReallocAndClearData(uint32_t count) {
this->m_alloc = count;