]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /** |
2 | * A MergeOperator for rocksdb that implements string append. | |
3 | * @author Deon Nicholas (dnicholas@fb.com) | |
4 | * Copyright 2013 Facebook | |
5 | */ | |
6 | ||
7 | #pragma once | |
8 | #include "rocksdb/merge_operator.h" | |
9 | #include "rocksdb/slice.h" | |
10 | ||
f67539c2 | 11 | namespace ROCKSDB_NAMESPACE { |
7c673cae FG |
12 | |
13 | class StringAppendOperator : public AssociativeMergeOperator { | |
14 | public: | |
15 | // Constructor: specify delimiter | |
16 | explicit StringAppendOperator(char delim_char); | |
1e59de90 | 17 | explicit StringAppendOperator(const std::string& delim); |
7c673cae | 18 | |
1e59de90 TL |
19 | virtual bool Merge(const Slice& key, const Slice* existing_value, |
20 | const Slice& value, std::string* new_value, | |
7c673cae FG |
21 | Logger* logger) const override; |
22 | ||
1e59de90 TL |
23 | static const char* kClassName() { return "StringAppendOperator"; } |
24 | static const char* kNickName() { return "stringappend"; } | |
25 | virtual const char* Name() const override { return kClassName(); } | |
26 | virtual const char* NickName() const override { return kNickName(); } | |
7c673cae FG |
27 | |
28 | private: | |
1e59de90 | 29 | std::string delim_; // The delimiter is inserted between elements |
7c673cae FG |
30 | }; |
31 | ||
f67539c2 | 32 | } // namespace ROCKSDB_NAMESPACE |