SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
SpecsFlags.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_cells_SpecsFlags_h
8 #define swcdb_db_cells_SpecsFlags_h
9 
10 
11 #include "swcdb/core/Compat.h"
13 
14 
15 namespace SWC { namespace DB { namespace Specs {
16 
17 
18 class Flags {
19  public:
20 
21  constexpr static const uint8_t NONE = 0x00;
22  constexpr static const uint8_t LIMIT_BY_KEYS = 0x01;
23  constexpr static const uint8_t OFFSET_BY_KEYS = 0x04;
24  constexpr static const uint8_t ONLY_KEYS = 0x08;
25  constexpr static const uint8_t ONLY_DELETES = 0x10;
26 
27  constexpr static const uint8_t MASK_ONLY_DELETES = 0xff - ONLY_DELETES;
28 
29 
30  constexpr SWC_CAN_INLINE
31  explicit Flags() noexcept
32  : limit(0), offset(0),
33  max_versions(0), max_buffer(0),
34  options(0), was_set(false) {
35  }
36 
38  explicit Flags(const uint8_t** bufp, size_t* remainp)
39  : limit(Serialization::decode_vi64(bufp, remainp)),
40  offset(Serialization::decode_vi64(bufp, remainp)),
41  max_versions(Serialization::decode_vi32(bufp, remainp)),
42  max_buffer(Serialization::decode_vi32(bufp, remainp)),
43  options(Serialization::decode_i8(bufp, remainp)),
44  was_set(true) {
45  }
46 
47  Flags(Flags&&) noexcept = default;
48  Flags(const Flags&) noexcept = default;
49  Flags& operator=(Flags&&) noexcept = default;
50  Flags& operator=(const Flags&) noexcept = default;
51 
52  constexpr SWC_CAN_INLINE
53  void copy(const Flags &other) noexcept {
54  limit = other.limit;
55  offset = other.offset;
56  max_versions = other.max_versions;
57  max_buffer = other.max_buffer;
58  options = other.options;
59  was_set = other.was_set;
60  }
61 
62  ~Flags() noexcept { }
63 
64  constexpr SWC_CAN_INLINE
65  bool is_only_keys() const noexcept {
66  return options & ONLY_KEYS;
67  }
68 
69  constexpr SWC_CAN_INLINE
70  bool is_only_deletes() const noexcept {
71  return options & ONLY_DELETES;
72  }
73 
74  constexpr SWC_CAN_INLINE
75  void set_only_keys() noexcept {
76  options |= ONLY_KEYS;
77  }
78 
79  constexpr SWC_CAN_INLINE
80  void set_only_deletes() noexcept {
82  }
83 
84  constexpr SWC_CAN_INLINE
85  void clear_only_deletes() noexcept {
87  }
88 
89  constexpr SWC_CAN_INLINE
90  bool equal(const Flags &other) const noexcept {
91  return limit == other.limit &&
92  offset == other.offset &&
93  max_versions == other.max_versions &&
94  max_buffer == other.max_buffer &&
95  options == other.options &&
96  was_set == other.was_set
97  ;
98  }
99 
100  constexpr SWC_CAN_INLINE
101  size_t encoded_length() const noexcept {
106  + 1;
107  }
108 
110  void encode(uint8_t** bufp) const {
116  }
117 
119  void decode(const uint8_t** bufp, size_t* remainp) {
120  limit = Serialization::decode_vi64(bufp, remainp);
121  offset = Serialization::decode_vi64(bufp, remainp);
122  max_versions = Serialization::decode_vi32(bufp, remainp);
123  max_buffer = Serialization::decode_vi32(bufp, remainp);
124  options = Serialization::decode_i8(bufp, remainp);
125  }
126 
128  std::string to_string() const {
129  std::string s;
130  {
131  std::stringstream ss;
132  print(ss);
133  s = ss.str();
134  }
135  return s;
136  }
137 
138  void print(std::ostream& out) const;
139 
140  void display(std::ostream& out) const;
141 
142  uint64_t limit, offset;
143  uint32_t max_versions;
144  uint32_t max_buffer;
145  uint8_t options;
146  bool was_set;
147 
148 };
149 
150 
151 }}}
152 
153 #ifdef SWC_IMPL_SOURCE
155 #endif
156 
157 #endif //swcdb_db_cells_SpecsFlags_h
SWC::DB::Specs::Flags::LIMIT_BY_KEYS
constexpr static const uint8_t LIMIT_BY_KEYS
Definition: SpecsFlags.h:22
SWC::DB::Specs::Flags::ONLY_KEYS
constexpr static const uint8_t ONLY_KEYS
Definition: SpecsFlags.h:24
SWC::DB::Specs::Flags::max_versions
uint32_t max_versions
Definition: SpecsFlags.h:143
SWC::DB::Specs::Flags::NONE
constexpr static const uint8_t NONE
Definition: SpecsFlags.h:21
SWC::DB::Specs::Flags::is_only_keys
constexpr SWC_CAN_INLINE bool is_only_keys() const noexcept
Definition: SpecsFlags.h:65
SWC::DB::Specs::Flags::MASK_ONLY_DELETES
constexpr static const uint8_t MASK_ONLY_DELETES
Definition: SpecsFlags.h:27
SWC::Serialization::encoded_length_vi32
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi32(uint32_t val) noexcept
Definition: Serialization.h:234
SWC::DB::Specs::Flags::set_only_deletes
constexpr SWC_CAN_INLINE void set_only_deletes() noexcept
Definition: SpecsFlags.h:80
SWC::DB::Specs::Flags::offset
uint64_t offset
Definition: SpecsFlags.h:142
SWC::Serialization::encode_i8
constexpr SWC_CAN_INLINE void encode_i8(uint8_t **bufp, uint8_t val) noexcept
Definition: Serialization.h:85
SWC::DB::Specs::Flags::is_only_deletes
constexpr SWC_CAN_INLINE bool is_only_deletes() const noexcept
Definition: SpecsFlags.h:70
SWC::DB::Specs::Flags::was_set
bool was_set
Definition: SpecsFlags.h:146
SWC::DB::Specs::Flags::set_only_keys
constexpr SWC_CAN_INLINE void set_only_keys() noexcept
Definition: SpecsFlags.h:75
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
Compat.h
SWC::DB::Specs::Flags::display
void display(std::ostream &out) const
Definition: SpecsFlags.cc:20
Serialization.h
SWC::DB::Specs::Flags::options
uint8_t options
Definition: SpecsFlags.h:145
SpecsFlags.cc
SWC::DB::Specs::Flags::to_string
SWC_CAN_INLINE std::string to_string() const
Definition: SpecsFlags.h:128
SWC::DB::Specs::Flags::encoded_length
constexpr SWC_CAN_INLINE size_t encoded_length() const noexcept
Definition: SpecsFlags.h:101
SWC::DB::Specs::Flags::Flags
constexpr SWC_CAN_INLINE Flags() noexcept
Definition: SpecsFlags.h:31
SWC::Serialization::encoded_length_vi64
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi64(uint64_t val) noexcept
Definition: Serialization.h:272
SWC::DB::Specs::Flags::Flags
Flags(Flags &&) noexcept=default
SWC::DB::Specs::Flags::copy
constexpr SWC_CAN_INLINE void copy(const Flags &other) noexcept
Definition: SpecsFlags.h:53
SWC::DB::Specs::Flags::~Flags
~Flags() noexcept
Definition: SpecsFlags.h:62
SWC::DB::Specs::Flags
Definition: SpecsFlags.h:18
SWC::DB::Specs::Flags::Flags
SWC_CAN_INLINE Flags(const uint8_t **bufp, size_t *remainp)
Definition: SpecsFlags.h:38
SWC::DB::Specs::Flags::equal
constexpr SWC_CAN_INLINE bool equal(const Flags &other) const noexcept
Definition: SpecsFlags.h:90
SWC::Serialization::decode_vi64
constexpr SWC_CAN_INLINE uint64_t decode_vi64(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:302
SWC::Serialization::encode_vi32
constexpr SWC_CAN_INLINE void encode_vi32(uint8_t **bufp, uint32_t val)
Definition: Serialization.h:243
SWC::DB::Specs::Flags::OFFSET_BY_KEYS
constexpr static const uint8_t OFFSET_BY_KEYS
Definition: SpecsFlags.h:23
SWC::DB::Specs::Flags::print
void print(std::ostream &out) const
Definition: SpecsFlags.cc:15
SWC::DB::Specs::Flags::encode
SWC_CAN_INLINE void encode(uint8_t **bufp) const
Definition: SpecsFlags.h:110
SWC::DB::Specs::Flags::ONLY_DELETES
constexpr static const uint8_t ONLY_DELETES
Definition: SpecsFlags.h:25
SWC::Serialization::encode_vi64
constexpr SWC_CAN_INLINE void encode_vi64(uint8_t **bufp, uint64_t val)
Definition: Serialization.h:286
SWC::DB::Specs::Flags::decode
SWC_CAN_INLINE void decode(const uint8_t **bufp, size_t *remainp)
Definition: SpecsFlags.h:119
SWC::DB::Specs::Flags::max_buffer
uint32_t max_buffer
Definition: SpecsFlags.h:144
SWC::DB::Specs::Flags::clear_only_deletes
constexpr SWC_CAN_INLINE void clear_only_deletes() noexcept
Definition: SpecsFlags.h:85
SWC::DB::Specs::Flags::limit
uint64_t limit
Definition: SpecsFlags.h:142
SWC::Serialization::decode_i8
constexpr SWC_CAN_INLINE uint8_t decode_i8(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:91
SWC::Serialization::decode_vi32
constexpr SWC_CAN_INLINE uint32_t decode_vi32(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:254