SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
SpecsTimestamp.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_SpecsTimestamp_h
8 #define swcdb_db_cells_SpecsTimestamp_h
9 
10 
11 #include "swcdb/core/Comparators.h"
13 
14 
15 namespace SWC { namespace DB { namespace Specs {
16 
17 
18 class Timestamp {
19  public:
20 
21  constexpr SWC_CAN_INLINE
22  explicit Timestamp() noexcept
23  : value(0), comp(Condition::NONE), was_set(false) {
24  }
25 
26  constexpr SWC_CAN_INLINE
27  explicit Timestamp(int64_t timestamp, Condition::Comp a_comp) noexcept
28  : value(timestamp), comp(a_comp), was_set(true) {
29  }
30 
32  explicit Timestamp(const uint8_t** bufp, size_t* remainp)
33  : value(),
34  comp(Condition::Comp(Serialization::decode_i8(bufp, remainp))),
35  was_set(true) {
37  ? 0
38  : Serialization::decode_i64(bufp, remainp);
39  }
40 
41  Timestamp(Timestamp&&) noexcept = default;
42  Timestamp(const Timestamp&) noexcept = default;
43  Timestamp& operator=(Timestamp&&) noexcept = default;
44  Timestamp& operator=(const Timestamp&) noexcept = default;
45 
46  ~Timestamp() noexcept { }
47 
48  constexpr SWC_CAN_INLINE
49  void copy(const Timestamp &other) noexcept {
50  set(other.value, other.comp);
51  }
52 
53  constexpr SWC_CAN_INLINE
54  void set(int64_t timestamp, Condition::Comp comperator) noexcept {
55  value = timestamp;
56  comp = comperator;
57  was_set = true;
58  }
59 
60  constexpr SWC_CAN_INLINE
61  void free() noexcept {
62  value = 0;
64  was_set = false;
65  }
66 
67  constexpr SWC_CAN_INLINE
68  bool empty() const noexcept {
69  return !was_set;
70  }
71 
72  constexpr SWC_CAN_INLINE
73  bool equal(const Timestamp &other) const noexcept {
74  return value == other.value && comp == other.comp;
75  }
76 
77  constexpr SWC_CAN_INLINE
78  size_t encoded_length() const noexcept {
79  size_t sz = 1;
80  if(comp != Condition::NONE)
81  sz += 8;
82  return sz;
83  }
84 
86  void encode(uint8_t** bufp) const {
88  if(comp != Condition::NONE)
90  }
91 
93  void decode(const uint8_t** bufp, size_t* remainp) {
95  if(comp != Condition::NONE)
96  value = Serialization::decode_i64(bufp, remainp);
97  }
98 
100  bool is_matching(int64_t other) const noexcept {
101  return Condition::is_matching(comp, value, other);
102  }
103 
105  std::string to_string() const {
106  std::string s;
107  {
108  std::stringstream ss;
109  print(ss);
110  s = ss.str();
111  }
112  return s;
113  }
114 
115  void display(std::ostream& out) const;
116 
117  void print(std::ostream& out) const;
118 
119  friend std::ostream& operator<<(std::ostream& out, const Timestamp& key) {
120  key.print(out);
121  return out;
122  }
123 
124  int64_t value;
126  bool was_set;
127 
128 };
129 
130 
131 }}}
132 
133 #ifdef SWC_IMPL_SOURCE
135 #endif
136 
137 #endif // swcdb_db_cells_SpecsTimestamp_h
SWC::DB::Specs::Timestamp::encoded_length
constexpr SWC_CAN_INLINE size_t encoded_length() const noexcept
Definition: SpecsTimestamp.h:78
SpecsTimestamp.cc
SWC::DB::Specs::Timestamp::Timestamp
SWC_CAN_INLINE Timestamp(const uint8_t **bufp, size_t *remainp)
Definition: SpecsTimestamp.h:32
SWC::Serialization::encode_i64
SWC_CAN_INLINE void encode_i64(uint8_t **bufp, uint64_t val) noexcept
Definition: Serialization.h:151
SWC::DB::Specs::Timestamp::copy
constexpr SWC_CAN_INLINE void copy(const Timestamp &other) noexcept
Definition: SpecsTimestamp.h:49
SWC::DB::Specs::Timestamp::encode
SWC_CAN_INLINE void encode(uint8_t **bufp) const
Definition: SpecsTimestamp.h:86
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::Timestamp::decode
SWC_CAN_INLINE void decode(const uint8_t **bufp, size_t *remainp)
Definition: SpecsTimestamp.h:93
SWC::DB::Specs::Timestamp::value
int64_t value
Definition: SpecsTimestamp.h:124
SWC::DB::Specs::Timestamp::comp
Condition::Comp comp
Definition: SpecsTimestamp.h:125
SWC::Condition::Comp
Comp
Definition: Comparators.h:27
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::DB::Specs::Timestamp::Timestamp
constexpr SWC_CAN_INLINE Timestamp(int64_t timestamp, Condition::Comp a_comp) noexcept
Definition: SpecsTimestamp.h:27
SWC::DB::Specs::Timestamp
Definition: SpecsTimestamp.h:18
SWC::DB::Specs::Timestamp::free
constexpr SWC_CAN_INLINE void free() noexcept
Definition: SpecsTimestamp.h:61
SWC::DB::Specs::Timestamp::empty
constexpr SWC_CAN_INLINE bool empty() const noexcept
Definition: SpecsTimestamp.h:68
Serialization.h
SWC::DB::Specs::Timestamp::equal
constexpr SWC_CAN_INLINE bool equal(const Timestamp &other) const noexcept
Definition: SpecsTimestamp.h:73
Comparators.h
SWC::DB::Specs::Timestamp::Timestamp
Timestamp(Timestamp &&) noexcept=default
SWC::Condition::is_matching
SWC_CAN_INLINE bool is_matching(bool volumetric, uint8_t comp, const uint8_t *p1, uint32_t p1_len, const uint8_t *p2, uint32_t p2_len)
Definition: Comparators.h:439
SWC::Condition::NONE
@ NONE
Definition: Comparators.h:28
SWC::DB::Specs::Timestamp::display
void display(std::ostream &out) const
Definition: SpecsTimestamp.cc:15
SWC::DB::Specs::Timestamp::Timestamp
constexpr SWC_CAN_INLINE Timestamp() noexcept
Definition: SpecsTimestamp.h:22
SWC::DB::Specs::Timestamp::to_string
SWC_CAN_INLINE std::string to_string() const
Definition: SpecsTimestamp.h:105
SWC::DB::Specs::Timestamp::was_set
bool was_set
Definition: SpecsTimestamp.h:126
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_i64
SWC_CAN_INLINE uint64_t decode_i64(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:156
SWC::DB::Specs::Timestamp::is_matching
SWC_CAN_INLINE bool is_matching(int64_t other) const noexcept
Definition: SpecsTimestamp.h:100
SWC::DB::Specs::Timestamp::operator<<
friend std::ostream & operator<<(std::ostream &out, const Timestamp &key)
Definition: SpecsTimestamp.h:119
SWC::DB::Specs::Timestamp::print
void print(std::ostream &out) const
Definition: SpecsTimestamp.cc:19
SWC::DB::Specs::Timestamp::set
constexpr SWC_CAN_INLINE void set(int64_t timestamp, Condition::Comp comperator) noexcept
Definition: SpecsTimestamp.h:54