22 #ifndef DBA_MEMDB_CORE_H
23 #define DBA_MEMDB_CORE_H
31 template<
typename T>
struct Match;
37 std::vector<T*> values;
38 std::vector<size_t> empty_slots;
43 struct index_iterator :
public std::iterator<std::forward_iterator_tag, size_t>
45 const std::vector<T*>* values;
48 index_iterator(
const std::vector<T*>& values,
size_t pos) : values(&values), pos(pos) { skip_gaps(); }
50 index_iterator(
const std::vector<T*>& values) : values(&values), pos(values.size()) {}
58 while (pos != values->size() && !(*values)[pos])
61 size_t operator*()
const {
return pos; }
65 return values == i.values && pos == i.pos;
70 return values != i.values || pos != i.pos;
85 size_t element_count()
const {
return values.size() - empty_slots.size(); }
87 T* get_checked(
size_t idx) {
if (idx >= values.size())
return 0;
return values[idx]; }
88 const T* get_checked(
size_t idx)
const {
if (idx >= values.size())
return 0;
return values[idx]; }
90 typename std::vector<T*>::reference operator[](
size_t idx) {
return values[idx]; }
91 typename std::vector<T*>::const_reference operator[](
size_t idx)
const {
return values[idx]; }
93 index_iterator index_begin()
const {
return index_iterator(values, 0); }
94 index_iterator index_end()
const {
return index_iterator(values); }
97 template<
typename OUTITER>
101 template<
typename OUTITER>
113 ValueStorage(
const ValueStorage<T>&);
114 ValueStorage& operator=(
const ValueStorage<T>&);
Definition: valuestorage.h:43
Definition: mem/cursor.h:35
size_t element_count() const
Number of valid elements.
Definition: valuestorage.h:85
void value_remove(size_t pos)
Remove a value given its position.
void copy_indices_to(OUTITER res) const
Send all T pointers to the given output iterator.
size_t value_add(T *value)
Add the value to the storage and return its index take ownership of the pointer memory management...
void copy_valptrs_to(OUTITER res) const
Send all T pointers to the given output iterator.