Flex  0.17.9
string_view_vector.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_UTILS_STRING_VIEW_VECTOR_H_
17 #define GRAPHSCOPE_UTILS_STRING_VIEW_VECTOR_H_
18 
19 #include <stdlib.h>
20 #include <string.h>
21 
22 #include <string_view>
23 #include <vector>
24 
25 namespace gs {
26 
28  public:
29  StringViewVector() { offsets_.push_back(0); }
31 
32  void push_back(const std::string_view& val) {
33  size_t old_size = buffer_.size();
34  buffer_.resize(old_size + val.size());
35  memcpy(&buffer_[old_size], val.data(), val.size());
36  offsets_.push_back(buffer_.size());
37  }
38 
39  void emplace_back(const std::string_view& val) {
40  size_t old_size = buffer_.size();
41  buffer_.resize(old_size + val.size());
42  memcpy(&buffer_[old_size], val.data(), val.size());
43  offsets_.push_back(buffer_.size());
44  }
45 
46  size_t size() const {
47  assert(offsets_.size() > 0);
48  return offsets_.size() - 1;
49  }
50 
51  std::string_view operator[](size_t index) const {
52  size_t from = offsets_[index];
53  size_t len = offsets_[index + 1] - from;
54  return std::string_view(&buffer_[from], len);
55  }
56 
57  std::vector<char>& content_buffer() { return buffer_; }
58 
59  const std::vector<char>& content_buffer() const { return buffer_; }
60 
61  std::vector<size_t>& offset_buffer() { return offsets_; }
62 
63  const std::vector<size_t>& offset_buffer() const { return offsets_; }
64 
65  void clear() {
66  buffer_.clear();
67  offsets_.clear();
68  offsets_.push_back(0);
69  }
70 
71  void swap(StringViewVector& rhs) {
72  buffer_.swap(rhs.buffer_);
73  offsets_.swap(rhs.offsets_);
74  }
75 
76  private:
77  std::vector<char> buffer_;
78  std::vector<size_t> offsets_;
79 };
80 
81 } // namespace gs
82 
83 #endif // GRAPHSCOPE_UTILS_STRING_VIEW_VECTOR_H_
gs::StringViewVector::emplace_back
void emplace_back(const std::string_view &val)
Definition: string_view_vector.h:39
gs::StringViewVector::size
size_t size() const
Definition: string_view_vector.h:46
gs::StringViewVector::buffer_
std::vector< char > buffer_
Definition: string_view_vector.h:77
gs::StringViewVector::~StringViewVector
~StringViewVector()
Definition: string_view_vector.h:30
gs::StringViewVector::offset_buffer
const std::vector< size_t > & offset_buffer() const
Definition: string_view_vector.h:63
gs::StringViewVector::StringViewVector
StringViewVector()
Definition: string_view_vector.h:29
gs
Definition: adj_list.h:23
gs::StringViewVector
Definition: string_view_vector.h:27
gs::StringViewVector::content_buffer
const std::vector< char > & content_buffer() const
Definition: string_view_vector.h:59
gs::StringViewVector::clear
void clear()
Definition: string_view_vector.h:65
gs::StringViewVector::push_back
void push_back(const std::string_view &val)
Definition: string_view_vector.h:32
gs::StringViewVector::content_buffer
std::vector< char > & content_buffer()
Definition: string_view_vector.h:57
gs::StringViewVector::offsets_
std::vector< size_t > offsets_
Definition: string_view_vector.h:78
gs::StringViewVector::offset_buffer
std::vector< size_t > & offset_buffer()
Definition: string_view_vector.h:61
gs::StringViewVector::swap
void swap(StringViewVector &rhs)
Definition: string_view_vector.h:71
gs::StringViewVector::operator[]
std::string_view operator[](size_t index) const
Definition: string_view_vector.h:51