TARAXA
uint_comparator.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <rocksdb/comparator.h>
4 
5 #include "storage/db_utils.hpp"
6 
7 namespace taraxa {
8 template <class T>
9 class UintComparator : public rocksdb::Comparator {
10  public:
11  static const char *kClassName() { return "taraxa.UintComparator"; }
12  virtual const char *Name() const override { return kClassName(); }
13 
14  // Three-way comparison function:
15  // if a < b: negative result
16  // if a > b: positive result
17  // else: zero result
18  virtual int Compare(const rocksdb::Slice &a, const rocksdb::Slice &b) const override {
19  const auto x = FromSlice<T>(a.data());
20  const auto y = FromSlice<T>(b.data());
21  if (x == y) return 0;
22  if (x < y) return -1;
23  return 1;
24  }
25 
26  virtual void FindShortestSeparator(std::string *, const rocksdb::Slice &) const override {}
27 
28  virtual void FindShortSuccessor(std::string *) const override {}
29 };
30 
31 template <class T>
32 inline const rocksdb::Comparator *getIntComparator() {
33  const static taraxa::UintComparator<T> kComparator;
34  return &kComparator;
35 }
36 } // end namespace taraxa
Definition: uint_comparator.hpp:9
virtual const char * Name() const override
Definition: uint_comparator.hpp:12
virtual void FindShortestSeparator(std::string *, const rocksdb::Slice &) const override
Definition: uint_comparator.hpp:26
virtual int Compare(const rocksdb::Slice &a, const rocksdb::Slice &b) const override
Definition: uint_comparator.hpp:18
virtual void FindShortSuccessor(std::string *) const override
Definition: uint_comparator.hpp:28
static const char * kClassName()
Definition: uint_comparator.hpp:11
Definition: config.hpp:8
rocksdb::Slice Slice
Definition: storage.hpp:74
const rocksdb::Comparator * getIntComparator()
Definition: uint_comparator.hpp:32