lbry-rocksdb/rocksdb/cpp/comparator_wrapper.hpp

64 lines
1.7 KiB
C++
Raw Normal View History

2014-01-13 19:52:22 +01:00
#include "rocksdb/comparator.h"
#include "rocksdb/env.h"
#include <stdexcept>
2014-01-13 19:52:22 +01:00
using std::string;
using rocksdb::Comparator;
using rocksdb::Slice;
using rocksdb::Logger;
2014-01-13 19:52:22 +01:00
namespace py_rocks {
class ComparatorWrapper: public Comparator {
public:
typedef int (*compare_func)(
void*,
Logger*,
string&,
const Slice&,
const Slice&);
2014-01-13 19:52:22 +01:00
ComparatorWrapper(
string name,
void* compare_context,
compare_func compare_callback):
name(name),
compare_context(compare_context),
compare_callback(compare_callback)
{}
2014-04-01 21:31:03 +02:00
virtual int Compare(const Slice& a, const Slice& b) const {
string error_msg;
int val;
val = this->compare_callback(
this->compare_context,
this->info_log.get(),
error_msg,
a,
b);
if (error_msg.size()) {
throw std::runtime_error(error_msg.c_str());
}
return val;
2014-01-13 19:52:22 +01:00
}
2014-04-01 21:31:03 +02:00
virtual const char* Name() const {
2014-01-13 19:52:22 +01:00
return this->name.c_str();
}
2014-04-01 21:32:18 +02:00
virtual void FindShortestSeparator(string*, const Slice&) const {}
virtual void FindShortSuccessor(string*) const {}
2014-01-13 19:52:22 +01:00
void set_info_log(std::shared_ptr<Logger> info_log) {
this->info_log = info_log;
}
2014-01-13 19:52:22 +01:00
private:
string name;
void* compare_context;
compare_func compare_callback;
std::shared_ptr<Logger> info_log;
2014-01-13 19:52:22 +01:00
};
}