SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
RgrData.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 
7 #ifndef swcdb_db_Columns_RgrData_h
8 #define swcdb_db_Columns_RgrData_h
9 
10 
12 #include "swcdb/core/Buffer.h"
14 
18 
19 
20 namespace SWC { namespace DB {
21 
22 
23 
24 class RgrData final {
25  public:
26 
27  typedef std::shared_ptr<RgrData> Ptr;
30 
32  RgrData() noexcept : rgrid(0), endpoints() { }
33 
34  ~RgrData() noexcept { }
35 
36  uint32_t encoded_length() const noexcept {
39  }
40 
41  void encode(uint8_t** bufp) const noexcept {
44  }
45 
46  void decode(const uint8_t *ptr, size_t remain) {
47  rgrid.store(Serialization::decode_vi64(&ptr, &remain));
48  Serialization::decode(&ptr, &remain, endpoints);
49  }
50 
51  void print(std::ostream& out) {
52  out << "RgrData(";
53  Comm::print(out, endpoints);
54  out << " rgrid=" << rgrid.load() << ')';
55  }
56 
57 
58  void set_insert_cell(cid_t cid, rid_t rid,
60  const noexcept {
61  DB::Cells::Cell cell;
62  cell.set_time_order_desc(true);
63  cell.key.add(std::to_string(cid));
64  cell.key.add(std::to_string(rid));
65  cell.flag = DB::Cells::INSERT;
66 
68  uint8_t* ptr = buff.base;
69  encode(&ptr);
70  cell.set_value(buff.base, buff.size, false);
71  colp->add(cell);
72  }
73 
74  static
75  void set_delete_cell(cid_t cid, rid_t rid,
77  noexcept {
78  DB::Cells::Cell cell;
79  cell.set_time_order_desc(true);
80  cell.key.add(std::to_string(cid));
81  cell.key.add(std::to_string(rid));
83 
84  colp->add(cell);
85  }
86 
87  void set_rgr(int &err, cid_t cid, rid_t rid) noexcept {
88  try {
89  auto hdlr = SyncUpdater::Ptr(new SyncUpdater());
90  hdlr->set_rgr(*this, cid, rid);
91  hdlr->await.wait();
92  err = hdlr->error();
93  } catch(...) {
94  err = SWC_CURRENT_EXCEPTION("").code();
95  }
96  }
97 
98 
99  static void remove(int &err, cid_t cid, rid_t rid) noexcept {
100  try {
101  auto hdlr = SyncUpdater::Ptr(new SyncUpdater());
102  hdlr->remove_rgr(cid, rid);
103  hdlr->await.wait();
104  err = hdlr->error();
105  } catch(...) {
106  err = SWC_CURRENT_EXCEPTION("").code();
107  }
108  }
109 
110  static void remove(int &err, cid_t cid) noexcept {
111  try {
112  DB::Cells::Result cells;
113  {
114  DB::Specs::Interval spec(DB::Types::Column::PLAIN);
115  spec.flags.set_only_keys();
116  auto& key_intval = spec.key_intervals.add();
117  key_intval.start.reserve(2);
118  key_intval.start.add(std::to_string(cid), Condition::EQ);
119  key_intval.start.add("", Condition::FIP);
120 
121  auto hdlr = SyncSelector::Ptr(new SyncSelector());
122  hdlr->scan(
123  DB::Types::KeySeq::VOLUME,
125  std::move(spec)
126  );
127  hdlr->await.wait();
128  err = hdlr->error();
129  if(err) {
130  SWC_LOGF(LOG_WARN, "Remove RgrData for cid=" SWC_FMT_LU " err=%d",
131  cid, err);
132  return;
133  }
134  hdlr->get_cells(cells);
135  if(cells.empty())
136  return;
137  }
138 
141  auto& col = hdlr->create(
143  DB::Types::KeySeq::VOLUME, 1, 0, DB::Types::Column::PLAIN
144  );
145  for(auto cell : cells) {
146  cell->flag = DB::Cells::DELETE_LE;
147  col->add(*cell);
148  hdlr->commit_or_wait(col.get());
149  }
150  hdlr->commit_if_need();
151  hdlr->wait();
152  err = hdlr->error();
153  SWC_LOGF(
154  (err ? LOG_WARN : LOG_DEBUG),
155  "Removed RgrData for cid=" SWC_FMT_LU " ranges=" SWC_FMT_LU " err=%d",
156  cid, cells.size(), err
157  );
158  } catch(...) {
159  err = SWC_CURRENT_EXCEPTION("").code();
160  }
161  }
162 
163 
164 
166  public:
167  typedef std::shared_ptr<BaseUpdater> Ptr;
168 
170  : client::Query::Update::Handlers::BaseSingleColumn(
171  Env::Clients::get(),
172  DB::Types::SystemColumn::SYS_RGR_DATA,
173  DB::Types::KeySeq::VOLUME,
174  1, 0, DB::Types::Column::PLAIN) {
175  }
176 
177  void set_rgr(const RgrData& data, cid_t cid, rid_t rid) noexcept {
178  data.set_insert_cell(cid, rid, &column);
179  commit(&column);
180  }
181 
182  void remove_rgr(cid_t cid, rid_t rid) noexcept {
183  set_delete_cell(cid, rid, &column);
184  commit(&column);
185  }
186 
187  virtual bool valid() noexcept override {
188  return true;
189  }
190 
191  void response(int err=Error::OK) override {
192  if(!completion.is_last())
193  return;
194 
195  if(!err && valid() && requires_commit()) {
196  commit(&column);
197  return;
198  }
199 
200  if(err)
201  error(err);
202  else if(!empty())
204 
205  profile.finished();
206  callback();
207  }
208 
209  virtual void callback() = 0;
210 
211  protected:
212 
213  virtual ~BaseUpdater() noexcept { }
214 
215  };
216 
217  class SyncUpdater final : public BaseUpdater {
218  public:
219  typedef std::shared_ptr<SyncUpdater> Ptr;
222  SyncUpdater() noexcept : await() { }
223  SyncUpdater(const SyncUpdater&) = delete;
225  SyncUpdater& operator=(const SyncUpdater&) = delete;
227  void callback() override {
228  await.acknowledge();
229  };
230 
231  virtual ~SyncUpdater() noexcept { }
232  };
233 
234 
235 
236  class BaseSelector :
238  public:
239  typedef std::shared_ptr<BaseSelector> Ptr;
240 
243 
246  : client::Query::Select::Handlers::BaseSingleColumn(
247  Env::Clients::get(), DB::Types::SystemColumn::SYS_RGR_DATA) {
248  }
249 
250  bool valid() noexcept override {
251  return !state_error;
252  }
253 
254  void response(int err) override {
255  if(err) {
256  int at = Error::OK;
258  }
259  profile.finished();
260  callback();
261  }
262 
263  virtual void callback() = 0;
264 
265  void scan(cid_t a_cid, rid_t a_rid) {
266  DB::Specs::Interval spec(DB::Types::Column::PLAIN);
267  spec.flags.limit = 1;
268  auto& key_intval = spec.key_intervals.add();
269  key_intval.start.reserve(2);
270  key_intval.start.add(std::to_string(a_cid), Condition::EQ);
271  key_intval.start.add(std::to_string(a_rid), Condition::EQ);
272  scan(
273  DB::Types::KeySeq::VOLUME,
275  std::move(spec)
276  );
277  }
278 
279  void get_rgr(int& err, DB::RgrData& data) noexcept {
280  try {
281  DB::Cells::Result cells;
282  get_cells(cells);
283  if(cells.empty()) {
284  err = ENOKEY;
285  return;
286  }
287  const DB::Cells::Cell& cell = **cells.begin();
288  data.decode(cell.value, cell.vlen);
289  } catch(...) {
290  err = SWC_CURRENT_EXCEPTION("").code();
291  }
292  }
293 
294  protected:
295 
296  virtual ~BaseSelector() noexcept { }
297 
298  };
299 
300  class SyncSelector : public BaseSelector {
301  public:
302  typedef std::shared_ptr<SyncSelector> Ptr;
305  SyncSelector() noexcept : await() { }
306  SyncSelector(const SyncSelector&) = delete;
310  void callback() override {
311  await.acknowledge();
312  };
313 
314  virtual ~SyncSelector() noexcept { }
315  };
316 
317 
318  static void get_rgr(const SyncSelector::Ptr& hdlr,
319  RgrData& data, cid_t cid, rid_t rid) noexcept {
320  int err = Error::OK;
321  try {
322  hdlr->scan(cid, rid);
323  hdlr->await.wait();
324  if((err = hdlr->error()))
325  return;
326  hdlr->get_rgr(err, data);
327  } catch(...) {
328  err = ENOKEY;
329  }
330  if(err) {
331  data.rgrid.store(0);
332  data.endpoints.clear();
333  }
334  }
335 
336 };
337 
338 
339 
340 }} // SWC::DB namespace
341 
342 
343 
344 #endif // swcdb_db_Columns_RgrData_h
SWC::DB::RgrData::SyncSelector::operator=
SyncSelector & operator=(const SyncSelector &)=delete
SWC::DB::RgrData::encoded_length
uint32_t encoded_length() const noexcept
Definition: RgrData.h:36
SWC::DB::RgrData::SyncUpdater::~SyncUpdater
virtual ~SyncUpdater() noexcept
Definition: RgrData.h:231
SWC::Core::AtomicBase::compare_exchange_weak
constexpr SWC_CAN_INLINE bool compare_exchange_weak(T &at, T value) noexcept
Definition: Atomic.h:52
BaseSingleColumn.h
SWC::DB::Cells::Cell::set_value
SWC_CAN_INLINE void set_value(uint8_t *v, uint32_t len, bool owner)
Definition: Cell.h:223
SWC::DB::RgrData::BaseUpdater::~BaseUpdater
virtual ~BaseUpdater() noexcept
Definition: RgrData.h:213
SWC::DB::Specs::Interval::key_intervals
KeyIntervals key_intervals
Definition: SpecsInterval.h:239
SWC::DB::RgrData::SyncUpdater::operator=
SyncUpdater & operator=(const SyncUpdater &)=delete
BaseSingleColumn.h
SWC::Env::Clients::get
static SWC_CAN_INLINE client::Clients::Ptr & get() noexcept
Definition: Clients.h:299
SWC_LOGF
#define SWC_LOGF(priority, fmt,...)
Definition: Logger.h:188
SWC::DB::Specs::KeyInterval::start
Key start
Definition: SpecsKeyIntervals.h:19
StateSynchronization.h
data
T data
Definition: BitFieldInt.h:1
SWC::DB::RgrData::SyncSelector::Ptr
std::shared_ptr< SyncSelector > Ptr
Definition: RgrData.h:302
SWC::Core::Atomic< rgrid_t >
SWC::DB::RgrData::SyncSelector::callback
void callback() override
Definition: RgrData.h:310
SWC::DB::RgrData::BaseUpdater::callback
virtual void callback()=0
SWC::DB::RgrData::BaseUpdater::valid
virtual bool valid() noexcept override
Definition: RgrData.h:187
SWC::client::Query::Select::Handlers::BaseSingleColumn::get_cells
virtual void get_cells(DB::Cells::Result &cells)
Definition: BaseSingleColumn.cc:63
SWC::client::Query::Update::Handlers::BaseSingleColumn::column
ColumnMutable column
Definition: BaseSingleColumn.h:24
SWC::DB::RgrData::BaseSelector::valid
bool valid() noexcept override
Definition: RgrData.h:250
SWC::DB::Cells::DELETE_LE
@ DELETE_LE
Definition: Cell.h:63
SWC::DB::RgrData::BaseUpdater::response
void response(int err=Error::OK) override
Definition: RgrData.h:191
SWC::DB::Cells::Cell
Definition: Cell.h:92
SWC::DB::RgrData::SyncSelector::SyncSelector
SWC_CAN_INLINE SyncSelector() noexcept
Definition: RgrData.h:305
SWC::DB::RgrData::rgrid
Core::Atomic< rgrid_t > rgrid
Definition: RgrData.h:28
SWC::DB::RgrData::print
void print(std::ostream &out)
Definition: RgrData.h:51
SWC::DB::Cells::Cell::key
DB::Cell::Key key
Definition: Cell.h:357
SWC::client::Query::Update::Handlers::BaseSingleColumn::empty
virtual bool empty() noexcept override
Definition: BaseSingleColumn.h:53
SWC::Serialization::encoded_length
SWC_CAN_INLINE uint8_t encoded_length(const Comm::EndPoint &endpoint) noexcept
Definition: Resolver.h:63
SWC::DB::RgrData::BaseSelector::~BaseSelector
virtual ~BaseSelector() noexcept
Definition: RgrData.h:296
SWC::client::Query::Select::Handlers::Base::scan
SWC_CAN_INLINE void scan(const DB::Schema::Ptr &schema, const DB::Specs::Interval &intval)
Definition: Base.h:79
SWC::DB::RgrData::SyncUpdater
Definition: RgrData.h:217
SWC::DB::RgrData::decode
void decode(const uint8_t *ptr, size_t remain)
Definition: RgrData.h:46
SWC::Comm::print
void print(std::ostream &out, const EndPoints &endpoints)
Definition: Resolver.cc:85
SWC::Serialization::encode
void encode(uint8_t **bufp, const Comm::EndPoint &endpoint)
Definition: Resolver.cc:22
SWC::DB::Cells::Result
Definition: Result.h:16
SWC::DB::Cell::Key::add
SWC_CAN_INLINE void add(const std::string_view &fraction)
Definition: CellKey.h:86
SWC::client::Query::Update::Handlers::Common::make
static SWC_CAN_INLINE Ptr make(const Clients::Ptr &clients, Cb_t &&cb=nullptr, const Comm::IoContextPtr &io=nullptr, Clients::Flag executor=Clients::DEFAULT)
Definition: Common.h:24
SWC::DB::Specs::Flags::set_only_keys
constexpr SWC_CAN_INLINE void set_only_keys() noexcept
Definition: SpecsFlags.h:75
SWC::client::Query::Update::Handlers::Base::commit
void commit()
Definition: Base.h:179
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
SWC::DB::RgrData::BaseUpdater::set_rgr
void set_rgr(const RgrData &data, cid_t cid, rid_t rid) noexcept
Definition: RgrData.h:177
SWC::Core::AtomicBase::store
constexpr SWC_CAN_INLINE void store(T v) noexcept
Definition: Atomic.h:37
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC::DB::RgrData::remove
static void remove(int &err, cid_t cid) noexcept
Definition: RgrData.h:110
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::LOG_DEBUG
@ LOG_DEBUG
Definition: Logger.h:36
SWC::DB::RgrData::BaseUpdater::Ptr
std::shared_ptr< BaseUpdater > Ptr
Definition: RgrData.h:167
SWC::DB::RgrData::BaseSelector::Ptr
std::shared_ptr< BaseSelector > Ptr
Definition: RgrData.h:239
SWC::Condition::FIP
@ FIP
Definition: Comparators.h:75
SWC::DB::RgrData::RgrData
SWC_CAN_INLINE RgrData() noexcept
Definition: RgrData.h:32
SWC::DB::Specs::KeyIntervals::add
KeyInterval & add()
Definition: SpecsKeyIntervals.cc:28
SWC::DB::RgrData::SyncUpdater::Ptr
std::shared_ptr< SyncUpdater > Ptr
Definition: RgrData.h:219
SWC_CURRENT_EXCEPTION
#define SWC_CURRENT_EXCEPTION(_msg_)
Definition: Exception.h:119
SWC::Core::Buffer::base
value_type * base
Definition: Buffer.h:131
SWC::DB::RgrData::SyncSelector::SyncSelector
SyncSelector(const SyncSelector &)=delete
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::client::Query::Update::Handlers::Base::completion
Core::CompletionCounter< uint64_t > completion
Definition: Base.h:113
SWC::DB::RgrData::set_delete_cell
static void set_delete_cell(cid_t cid, rid_t rid, client::Query::Update::Handlers::Base::Column *colp) noexcept
Definition: RgrData.h:75
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::Core::Buffer::size
size_t size
Definition: Buffer.h:130
SWC::Condition::EQ
@ EQ
Definition: Comparators.h:32
SWC::DB::RgrData::remove
static void remove(int &err, cid_t cid, rid_t rid) noexcept
Definition: RgrData.h:99
SWC::DB::RgrData::SyncSelector::await
Core::StateSynchronization await
Definition: RgrData.h:303
SWC::client::Query::Update::Handlers::Base::Column
Definition: Base.h:30
SWC::DB::Cells::Cell::value
uint8_t * value
Definition: Cell.h:362
SWC::DB::RgrData::SyncUpdater::SyncUpdater
SyncUpdater(SyncUpdater &&)=delete
Serialization.h
SWC::DB::Cells::INSERT
@ INSERT
Definition: Cell.h:62
SWC::client::Query::Update::Handlers::BaseSingleColumn
Definition: BaseSingleColumn.h:18
Buffer.h
SWC::DB::RgrData::SyncSelector
Definition: RgrData.h:300
SWC::DB::RgrData::BaseUpdater
Definition: RgrData.h:165
SWC::client::Query::Profiling::finished
SWC_CAN_INLINE void finished() noexcept
Definition: Profiling.h:127
SWC::DB::Cells::Cell::set_time_order_desc
constexpr SWC_CAN_INLINE void set_time_order_desc(bool desc) noexcept
Definition: Cell.h:169
SWC::Serialization::encoded_length_vi64
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi64(uint64_t val) noexcept
Definition: Serialization.h:272
SWC::Error::CLIENT_DATA_REMAINED
@ CLIENT_DATA_REMAINED
Definition: Error.h:125
SWC::DB::RgrData::BaseSelector::get_rgr
void get_rgr(int &err, DB::RgrData &data) noexcept
Definition: RgrData.h:279
SWC::DB::RgrData::SyncSelector::operator=
SyncSelector & operator=(SyncSelector &&)=delete
SWC::DB::Types::SystemColumn::SYS_RGR_DATA
const cid_t SYS_RGR_DATA
Definition: SystemColumn.h:22
SWC::DB::RgrData
Definition: RgrData.h:24
SWC::DB::RgrData::BaseSelector::BaseSelector
SWC_CAN_INLINE BaseSelector()
Definition: RgrData.h:245
SWC_FMT_LU
#define SWC_FMT_LU
Definition: Compat.h:98
SWC::DB::RgrData::BaseSelector
Definition: RgrData.h:237
SWC::DB::Specs::Interval::flags
Flags flags
Definition: SpecsInterval.h:242
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::client::Query::Select::Handlers::BaseSingleColumn
Definition: BaseSingleColumn.h:21
SWC::client::Query::Select::Handlers::BaseSingleColumn::BaseSingleColumn
SWC_CAN_INLINE BaseSingleColumn(const Clients::Ptr &a_clients, const cid_t a_cid, Clients::Flag a_executor=Clients::DEFAULT) noexcept
Definition: BaseSingleColumn.h:30
SWC::client::Query::Update::Handlers::Base::error
virtual int error() noexcept
Definition: Base.h:159
SWC::DB::Cells::Cell::vlen
uint32_t vlen
Definition: Cell.h:361
SWC::Core::Vector< EndPoint >
SWC::DB::RgrData::encode
void encode(uint8_t **bufp) const noexcept
Definition: RgrData.h:41
SWC::DB::Specs::Interval
Definition: SpecsInterval.h:25
SWC::DB::RgrData::~RgrData
~RgrData() noexcept
Definition: RgrData.h:34
SWC::DB::RgrData::BaseSelector::callback
virtual void callback()=0
SWC::DB::RgrData::Ptr
std::shared_ptr< RgrData > Ptr
Definition: RgrData.h:27
SWC::Core::AtomicBase::load
constexpr SWC_CAN_INLINE T load() const noexcept
Definition: Atomic.h:42
SWC::DB::RgrData::BaseUpdater::BaseUpdater
BaseUpdater()
Definition: RgrData.h:169
SWC::Serialization::decode
Comm::EndPoint decode(const uint8_t **bufp, size_t *remainp)
Definition: Resolver.cc:35
SWC::Serialization::decode_vi64
constexpr SWC_CAN_INLINE uint64_t decode_vi64(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:302
SWC::DB::RgrData::SyncUpdater::operator=
SyncUpdater & operator=(SyncUpdater &&)=delete
SWC::DB::RgrData::SyncSelector::SyncSelector
SyncSelector(SyncSelector &&)=delete
SWC::DB::RgrData::BaseSelector::response
void response(int err) override
Definition: RgrData.h:254
SWC::Core::StateSynchronization
Definition: StateSynchronization.h:16
SWC::rid_t
uint64_t rid_t
Definition: Identifiers.h:17
SWC::DB::RgrData::BaseSelector::scan
void scan(cid_t a_cid, rid_t a_rid)
Definition: RgrData.h:265
SWC::client::Query::Select::Handlers::Base::state_error
Core::Atomic< int > state_error
Definition: Base.h:32
SWC::DB::RgrData::SyncUpdater::await
Core::StateSynchronization await
Definition: RgrData.h:220
SWC::DB::RgrData::SyncUpdater::callback
void callback() override
Definition: RgrData.h:227
SWC::DB::RgrData::endpoints
Comm::EndPoints endpoints
Definition: RgrData.h:29
SWC::LOG_WARN
@ LOG_WARN
Definition: Logger.h:33
SWC::DB::RgrData::BaseUpdater::remove_rgr
void remove_rgr(cid_t cid, rid_t rid) noexcept
Definition: RgrData.h:182
SWC::Serialization::encode_vi64
constexpr SWC_CAN_INLINE void encode_vi64(uint8_t **bufp, uint64_t val)
Definition: Serialization.h:286
SWC::Core::StateSynchronization::acknowledge
SWC_CAN_INLINE void acknowledge() noexcept
Definition: StateSynchronization.h:31
SWC::DB::RgrData::SyncUpdater::SyncUpdater
SyncUpdater(const SyncUpdater &)=delete
SWC::Core::CompletionCounter::is_last
constexpr SWC_CAN_INLINE bool is_last() noexcept
Definition: CompletionCounter.h:37
SWC::client::Query::Update::Handlers::Base::profile
Profiling profile
Definition: Base.h:111
SWC::DB::RgrData::SyncSelector::~SyncSelector
virtual ~SyncSelector() noexcept
Definition: RgrData.h:314
SWC::DB::Specs::Flags::limit
uint64_t limit
Definition: SpecsFlags.h:142
SWC::Core::to_string
SWC_CAN_INLINE std::string to_string(const BitFieldInt< T, SZ > &v)
Definition: BitFieldInt.h:263
SWC::DB::RgrData::SyncUpdater::SyncUpdater
SWC_CAN_INLINE SyncUpdater() noexcept
Definition: RgrData.h:222
SWC::client::Query::Update::Handlers::BaseSingleColumn::BaseSingleColumn
SWC_CAN_INLINE BaseSingleColumn(const Clients::Ptr &a_clients, const cid_t cid, DB::Types::KeySeq seq, uint32_t versions, uint32_t ttl_secs, DB::Types::Column type, Clients::Flag a_executor=Clients::DEFAULT)
Definition: BaseSingleColumn.h:27
SWC::DB::RgrData::get_rgr
static void get_rgr(const SyncSelector::Ptr &hdlr, RgrData &data, cid_t cid, rid_t rid) noexcept
Definition: RgrData.h:318
Common.h
SWC::client::Query::Select::Handlers::Base::profile
Profiling profile
Definition: Base.h:31
SWC::DB::RgrData::set_rgr
void set_rgr(int &err, cid_t cid, rid_t rid) noexcept
Definition: RgrData.h:87
SWC::DB::RgrData::set_insert_cell
void set_insert_cell(cid_t cid, rid_t rid, client::Query::Update::Handlers::Base::Column *colp) const noexcept
Definition: RgrData.h:58
SWC::client::Query::Update::Handlers::BaseSingleColumn::requires_commit
virtual bool requires_commit() noexcept override
Definition: BaseSingleColumn.h:49
SWC::Core::Vector::reserve
SWC_CAN_INLINE void reserve(size_type cap)
Definition: Vector.h:288
SWC::DB::Cells::Cell::flag
uint8_t flag
Definition: Cell.h:359