@@ -24,6 +24,18 @@ template <typename T, size_t CAPACITY> class FixedVector {
2424public:
2525 constexpr FixedVector () = default;
2626
27+ template <typename It> FixedVector (It begin, It end) {
28+ for (; begin != end; ++begin) {
29+ push_back (*begin);
30+ }
31+ }
32+
33+ FixedVector (size_t count, const T &value) {
34+ for (size_t i = 0 ; i < count; ++i) {
35+ push_back (value);
36+ }
37+ }
38+
2739 bool push_back (const T &obj) {
2840 if (item_count == CAPACITY)
2941 return false ;
@@ -36,6 +48,9 @@ template <typename T, size_t CAPACITY> class FixedVector {
3648
3749 T &back () { return store[item_count - 1 ]; }
3850
51+ T &operator [](size_t idx) { return store[idx]; }
52+ const T &operator [](size_t idx) const { return store[idx]; }
53+
3954 bool pop_back () {
4055 if (item_count == 0 )
4156 return false ;
@@ -44,6 +59,7 @@ template <typename T, size_t CAPACITY> class FixedVector {
4459 }
4560
4661 bool empty () const { return item_count == 0 ; }
62+ size_t size () const { return item_count; }
4763
4864 // Empties the store for all practical purposes.
4965 void reset () { item_count = 0 ; }
@@ -63,6 +79,10 @@ template <typename T, size_t CAPACITY> class FixedVector {
6379 return reverse_iterator{&store[item_count]};
6480 }
6581 LIBC_INLINE constexpr reverse_iterator rend () { return store.rend (); }
82+
83+ using iterator = typename cpp::array<T, CAPACITY>::iterator;
84+ LIBC_INLINE constexpr iterator begin () { return store.begin (); }
85+ LIBC_INLINE constexpr iterator end () { return iterator{&store[item_count]}; }
6686};
6787
6888} // namespace LIBC_NAMESPACE
0 commit comments