2016-06-15 23:48:41 +02:00
|
|
|
#ifndef FIXEDARRAYLIST_H_
|
|
|
|
#define FIXEDARRAYLIST_H_
|
|
|
|
|
2020-09-30 12:50:52 +02:00
|
|
|
#include <cmath>
|
2022-02-02 10:29:30 +01:00
|
|
|
|
|
|
|
#include "ArrayList.h"
|
2019-08-28 14:50:24 +02:00
|
|
|
/**
|
|
|
|
* \ingroup container
|
|
|
|
*/
|
2022-02-02 10:29:30 +01:00
|
|
|
template <typename T, size_t MAX_SIZE, typename count_t = uint8_t>
|
|
|
|
class FixedArrayList : public ArrayList<T, count_t> {
|
2022-05-01 17:48:49 +02:00
|
|
|
#if !defined(_MSC_VER) && !defined(__clang__)
|
2022-02-02 10:29:30 +01:00
|
|
|
static_assert(MAX_SIZE <= (std::pow(2, sizeof(count_t) * 8) - 1),
|
|
|
|
"count_t is not large enough to hold MAX_SIZE");
|
2021-03-07 01:35:55 +01:00
|
|
|
#endif
|
2022-02-02 10:29:30 +01:00
|
|
|
private:
|
|
|
|
T data[MAX_SIZE];
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
public:
|
|
|
|
FixedArrayList() : ArrayList<T, count_t>(data, MAX_SIZE) {}
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
FixedArrayList(const FixedArrayList& other) : ArrayList<T, count_t>(data, MAX_SIZE) {
|
|
|
|
memcpy(this->data, other.data, sizeof(this->data));
|
|
|
|
this->entries = data;
|
|
|
|
this->size = other.size;
|
|
|
|
}
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
FixedArrayList& operator=(FixedArrayList other) {
|
|
|
|
memcpy(this->data, other.data, sizeof(this->data));
|
|
|
|
this->entries = data;
|
|
|
|
this->size = other.size;
|
|
|
|
return *this;
|
|
|
|
}
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
virtual ~FixedArrayList() {}
|
2016-06-15 23:48:41 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* FIXEDARRAYLIST_H_ */
|