Flex  0.17.9
mmap_vector.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_UTILS_MMAP_VECTOR_H_
17 #define GRAPHSCOPE_UTILS_MMAP_VECTOR_H_
18 #include "flex/utils/mmap_array.h"
19 
20 namespace gs {
21 template <typename T>
22 class mmap_vector {
23  public:
24  mmap_vector() : size_(0) {}
25 
26  void open(const std::string& filename, bool sync_to_file = true) {
27  array_.open(filename, sync_to_file);
28  }
29 
30  void reserve(size_t size) { array_.resize(size); }
31 
32  void unlink() { array_.unlink(); }
33 
35 
37  array_.swap(other.array_);
38  size_ = other.size_;
39  }
40 
41  void push_back(const T& val) {
42  size_t cap = array_.size();
43  if (size_ == cap) {
44  array_.resize(std::max(cap * 2, 1ul));
45  }
46  array_.set(size_, val);
47  ++size_;
48  }
49 
50  void emplace_back(T&& val) {
51  size_t cap = array_.size();
52  if (size_ == cap) {
53  array_.resize(std::max(cap * 2, 1ul));
54  }
55  array_.set(size_, val);
56  ++size_;
57  }
58 
59  void resize(size_t size) {
60  size_t cap = std::max(array_.size(), 1ul);
61  while (size > cap) {
62  cap *= 2;
63  }
64  array_.resize(cap);
65  size_ = size;
66  }
67 
68  size_t size() const { return size_; }
69 
70  const T& operator[](size_t index) const { return array_[index]; }
71  T& operator[](size_t index) { return array_[index]; }
72  const T* begin() const { return array_.data(); }
73  const T* end() const { return array_.data() + size_; }
74 
75  void clear() { size_ = 0; }
76 
77  private:
79  size_t size_;
80 };
81 }; // namespace gs
82 #endif // GRAPHSCOPE_UTILS_MMAP_VECTOR_H_
gs::mmap_vector
Definition: mmap_vector.h:22
gs::mmap_vector::emplace_back
void emplace_back(T &&val)
Definition: mmap_vector.h:50
gs::mmap_vector::size
size_t size() const
Definition: mmap_vector.h:68
gs::mmap_vector::size_
size_t size_
Definition: mmap_vector.h:79
gs::mmap_vector::operator[]
const T & operator[](size_t index) const
Definition: mmap_vector.h:70
gs::mmap_vector::~mmap_vector
~mmap_vector()
Definition: mmap_vector.h:34
gs::mmap_vector::clear
void clear()
Definition: mmap_vector.h:75
gs::mmap_vector::push_back
void push_back(const T &val)
Definition: mmap_vector.h:41
gs
Definition: adj_list.h:23
gs::mmap_vector::begin
const T * begin() const
Definition: mmap_vector.h:72
gs::mmap_vector::open
void open(const std::string &filename, bool sync_to_file=true)
Definition: mmap_vector.h:26
gs::mmap_vector::resize
void resize(size_t size)
Definition: mmap_vector.h:59
gs::mmap_vector::mmap_vector
mmap_vector(mmap_vector &&other)
Definition: mmap_vector.h:36
gs::mmap_vector::reserve
void reserve(size_t size)
Definition: mmap_vector.h:30
gs::mmap_vector::mmap_vector
mmap_vector()
Definition: mmap_vector.h:24
mmap_array.h
gs::mmap_array
Definition: mmap_array.h:65
gs::mmap_vector::operator[]
T & operator[](size_t index)
Definition: mmap_vector.h:71
gs::mmap_vector::end
const T * end() const
Definition: mmap_vector.h:73
gs::mmap_vector::unlink
void unlink()
Definition: mmap_vector.h:32
gs::mmap_vector::array_
mmap_array< T > array_
Definition: mmap_vector.h:78