// ---------------------------------------------------------------------------- // Vector.h // // // Authors: // Peter Polidoro peter@polidoro.io // ---------------------------------------------------------------------------- #ifndef VECTOR_H #define VECTOR_H #ifdef ARDUINO #include #else #include #endif #include "Vector/VectorIterator.h" template class Vector { public: Vector(); template Vector(T (&values)[MAX_SIZE], size_t size=0); template void setStorage(T (&values)[MAX_SIZE], size_t size=0); void setStorage(T * values, size_t max_size, size_t size); const T & operator[](size_t index) const; T & operator[](size_t index); const T & at(size_t index) const; T & at(size_t index); T & front(); T & back(); void clear(); template void fill(const U & value); template void fill(const U (&values)[N]); template void fill(const Vector & values); template void assign(size_t n, const U & value); template void assign(size_t n, const U (&values)[N]); template void assign(size_t n, const Vector & values); void push_back(const T & value); void pop_back(); void remove(size_t index); size_t size() const; size_t max_size() const; bool empty() const; bool full() const; const T * data() const; T * data(); typedef VectorIterator iterator; iterator begin(); iterator end(); typedef VectorIterator const_iterator; const_iterator begin() const; const_iterator end() const; private: T * values_; size_t max_size_; size_t size_; }; #ifdef ARDUINO /* `Print` is declared in the Arduino library and gives a compilation error elsewhere. */ template inline Print & operator <<(Print & stream, const Vector & vector) { stream.print("["); for (size_t i=0; i