Skip to content

Commit 0b15b11

Browse files
committed
Add support for custom allocator to vtr::vector.
Signed-off-by: Keith Rothman <[email protected]>
1 parent 3b14cd9 commit 0b15b11

File tree

1 file changed

+55
-53
lines changed

1 file changed

+55
-53
lines changed

libs/libvtrutil/src/vtr_vector.h

Lines changed: 55 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ namespace vtr {
1515
//
1616
//If you need more std::map-like (instead of std::vector-like) behaviour see
1717
//vtr::vector_map.
18-
template<typename K, typename V>
19-
class vector : private std::vector<V> {
18+
template<typename K, typename V, typename Allocator = std::allocator<V>>
19+
class vector : private std::vector<V, Allocator> {
20+
using storage = std::vector<V, Allocator>;
21+
2022
public:
2123
typedef K key_type;
2224

@@ -25,71 +27,71 @@ class vector : private std::vector<V> {
2527

2628
public:
2729
//Pass through std::vector's types
28-
using typename std::vector<V>::value_type;
29-
using typename std::vector<V>::allocator_type;
30-
using typename std::vector<V>::reference;
31-
using typename std::vector<V>::const_reference;
32-
using typename std::vector<V>::pointer;
33-
using typename std::vector<V>::const_pointer;
34-
using typename std::vector<V>::iterator;
35-
using typename std::vector<V>::const_iterator;
36-
using typename std::vector<V>::reverse_iterator;
37-
using typename std::vector<V>::const_reverse_iterator;
38-
using typename std::vector<V>::difference_type;
39-
using typename std::vector<V>::size_type;
40-
41-
//Pass through std::vector's methods
42-
using std::vector<V>::vector;
43-
44-
using std::vector<V>::begin;
45-
using std::vector<V>::end;
46-
using std::vector<V>::rbegin;
47-
using std::vector<V>::rend;
48-
using std::vector<V>::cbegin;
49-
using std::vector<V>::cend;
50-
using std::vector<V>::crbegin;
51-
using std::vector<V>::crend;
52-
53-
using std::vector<V>::size;
54-
using std::vector<V>::max_size;
55-
using std::vector<V>::resize;
56-
using std::vector<V>::capacity;
57-
using std::vector<V>::empty;
58-
using std::vector<V>::reserve;
59-
using std::vector<V>::shrink_to_fit;
60-
61-
using std::vector<V>::front;
62-
using std::vector<V>::back;
63-
using std::vector<V>::data;
64-
65-
using std::vector<V>::assign;
66-
using std::vector<V>::push_back;
67-
using std::vector<V>::pop_back;
68-
using std::vector<V>::insert;
69-
using std::vector<V>::erase;
70-
using std::vector<V>::swap;
71-
using std::vector<V>::clear;
72-
using std::vector<V>::emplace;
73-
using std::vector<V>::emplace_back;
74-
using std::vector<V>::get_allocator;
30+
using typename storage::allocator_type;
31+
using typename storage::const_iterator;
32+
using typename storage::const_pointer;
33+
using typename storage::const_reference;
34+
using typename storage::const_reverse_iterator;
35+
using typename storage::difference_type;
36+
using typename storage::iterator;
37+
using typename storage::pointer;
38+
using typename storage::reference;
39+
using typename storage::reverse_iterator;
40+
using typename storage::size_type;
41+
using typename storage::value_type;
42+
43+
//Pass through storagemethods
44+
using std::vector<V, Allocator>::vector;
45+
46+
using storage::begin;
47+
using storage::cbegin;
48+
using storage::cend;
49+
using storage::crbegin;
50+
using storage::crend;
51+
using storage::end;
52+
using storage::rbegin;
53+
using storage::rend;
54+
55+
using storage::capacity;
56+
using storage::empty;
57+
using storage::max_size;
58+
using storage::reserve;
59+
using storage::resize;
60+
using storage::shrink_to_fit;
61+
using storage::size;
62+
63+
using storage::back;
64+
using storage::data;
65+
using storage::front;
66+
67+
using storage::assign;
68+
using storage::clear;
69+
using storage::emplace;
70+
using storage::emplace_back;
71+
using storage::erase;
72+
using storage::get_allocator;
73+
using storage::insert;
74+
using storage::pop_back;
75+
using storage::push_back;
76+
using storage::swap;
7577

7678
//Don't include operator[] and at() from std::vector,
7779
//since we redine them to take key_type instead of size_t
7880
reference operator[](const key_type id) {
7981
auto i = size_t(id);
80-
return std::vector<V>::operator[](i);
82+
return storage::operator[](i);
8183
}
8284
const_reference operator[](const key_type id) const {
8385
auto i = size_t(id);
84-
return std::vector<V>::operator[](i);
86+
return storage::operator[](i);
8587
}
8688
reference at(const key_type id) {
8789
auto i = size_t(id);
88-
return std::vector<V>::at(i);
90+
return storage::at(i);
8991
}
9092
const_reference at(const key_type id) const {
9193
auto i = size_t(id);
92-
return std::vector<V>::at(i);
94+
return storage::at(i);
9395
}
9496

9597
//Returns a range containing the keys

0 commit comments

Comments
 (0)