Fix the Array initializer list constructor (repeat last value)
This commit is contained in:
@ -7,10 +7,10 @@
|
|||||||
namespace Container {
|
namespace Container {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements a stack allocated array with bounds checking
|
* This class implements a stack allocated array with runtime bounds checking
|
||||||
* and iterator support.
|
* and iterator support.
|
||||||
*
|
*
|
||||||
* @tparam T The type of the objects
|
* @tparam T The type of the held objects
|
||||||
* @tparam N The number of elements the array can store
|
* @tparam N The number of elements the array can store
|
||||||
*/
|
*/
|
||||||
template<typename T, const std::size_t N>
|
template<typename T, const std::size_t N>
|
||||||
@ -24,16 +24,28 @@ private:
|
|||||||
public:
|
public:
|
||||||
Array() = default; // If i write default something like Container::Array<int, 10> arr; is not initialized...
|
Array() = default; // If i write default something like Container::Array<int, 10> arr; is not initialized...
|
||||||
|
|
||||||
// TODO: This doesn't account for initializer lists of the wrong length, last value should be repeated
|
// Construct like this: bse::array<int, 5> arr = {1, 2, 3, 4, 5};
|
||||||
// Only increment iterator when it < list.end() - 1?
|
/**
|
||||||
// Construct like this: bse::array<int, 5> {1, 2, 3, 4, 5};
|
* Initialize the Array with initial values provided by an initializer list.
|
||||||
|
* If the initializer list has a smaller size than the Array the last value
|
||||||
|
* will be repeated.
|
||||||
|
*
|
||||||
|
* @param list The initial values
|
||||||
|
*/
|
||||||
Array(std::initializer_list<T> list) {
|
Array(std::initializer_list<T> list) {
|
||||||
|
// TODO: Exception on wrong size? Can't static_assert on list.size()
|
||||||
typename std::initializer_list<T>::iterator it = list.begin();
|
typename std::initializer_list<T>::iterator it = list.begin();
|
||||||
|
typename std::initializer_list<T>::iterator end = list.end();
|
||||||
|
|
||||||
for (unsigned int i = 0; i < N; ++i) {
|
for (unsigned int i = 0; i < N; ++i) {
|
||||||
buf[i] = *it;
|
buf[i] = *it;
|
||||||
|
if (it < end - 1) {
|
||||||
|
// Repeat the last initializer_list element
|
||||||
|
// if the array has more slots than initial values are provided
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Rest of constructors
|
// TODO: Rest of constructors
|
||||||
|
|
||||||
@ -49,6 +61,11 @@ public:
|
|||||||
|
|
||||||
constexpr const T &operator[](std::size_t i) const { return buf[i]; }
|
constexpr const T &operator[](std::size_t i) const { return buf[i]; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a pointer to the stack allocated memory.
|
||||||
|
*
|
||||||
|
* @return The pointer to the stack allocated memory
|
||||||
|
*/
|
||||||
T *data() { return &buf[0]; }
|
T *data() { return &buf[0]; }
|
||||||
|
|
||||||
const T *data() const { return &buf[0]; }
|
const T *data() const { return &buf[0]; }
|
||||||
|
|||||||
Reference in New Issue
Block a user