@@ -24,6 +24,18 @@ template <typename T, size_t CAPACITY> class FixedVector {
24
24
public:
25
25
constexpr FixedVector () = default;
26
26
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
+
27
39
bool push_back (const T &obj) {
28
40
if (item_count == CAPACITY)
29
41
return false ;
@@ -36,6 +48,9 @@ template <typename T, size_t CAPACITY> class FixedVector {
36
48
37
49
T &back () { return store[item_count - 1 ]; }
38
50
51
+ T &operator [](size_t idx) { return store[idx]; }
52
+ const T &operator [](size_t idx) const { return store[idx]; }
53
+
39
54
bool pop_back () {
40
55
if (item_count == 0 )
41
56
return false ;
@@ -44,6 +59,7 @@ template <typename T, size_t CAPACITY> class FixedVector {
44
59
}
45
60
46
61
bool empty () const { return item_count == 0 ; }
62
+ size_t size () const { return item_count; }
47
63
48
64
// Empties the store for all practical purposes.
49
65
void reset () { item_count = 0 ; }
@@ -63,6 +79,10 @@ template <typename T, size_t CAPACITY> class FixedVector {
63
79
return reverse_iterator{&store[item_count]};
64
80
}
65
81
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]}; }
66
86
};
67
87
68
88
} // namespace LIBC_NAMESPACE
0 commit comments