// From the client-perspective, semantics are the same.
class PutOperator : public MergeOperator {
public:
- virtual bool FullMerge(const Slice& /*key*/, const Slice* /*existing_value*/,
- const std::deque<std::string>& operand_sequence,
- std::string* new_value,
- Logger* /*logger*/) const override {
+ bool FullMerge(const Slice& /*key*/, const Slice* /*existing_value*/,
+ const std::deque<std::string>& operand_sequence,
+ std::string* new_value, Logger* /*logger*/) const override {
// Put basically only looks at the current/latest value
assert(!operand_sequence.empty());
assert(new_value != nullptr);
return true;
}
- virtual bool PartialMerge(const Slice& /*key*/, const Slice& /*left_operand*/,
- const Slice& right_operand, std::string* new_value,
- Logger* /*logger*/) const override {
+ bool PartialMerge(const Slice& /*key*/, const Slice& /*left_operand*/,
+ const Slice& right_operand, std::string* new_value,
+ Logger* /*logger*/) const override {
new_value->assign(right_operand.data(), right_operand.size());
return true;
}
using MergeOperator::PartialMergeMulti;
- virtual bool PartialMergeMulti(const Slice& /*key*/,
- const std::deque<Slice>& operand_list,
- std::string* new_value,
- Logger* /*logger*/) const override {
+ bool PartialMergeMulti(const Slice& /*key*/,
+ const std::deque<Slice>& operand_list,
+ std::string* new_value,
+ Logger* /*logger*/) const override {
new_value->assign(operand_list.back().data(), operand_list.back().size());
return true;
}
- virtual const char* Name() const override {
- return "PutOperator";
- }
+ const char* Name() const override { return "PutOperator"; }
};
class PutOperatorV2 : public PutOperator {
- virtual bool FullMerge(const Slice& /*key*/, const Slice* /*existing_value*/,
- const std::deque<std::string>& /*operand_sequence*/,
- std::string* /*new_value*/,
- Logger* /*logger*/) const override {
+ bool FullMerge(const Slice& /*key*/, const Slice* /*existing_value*/,
+ const std::deque<std::string>& /*operand_sequence*/,
+ std::string* /*new_value*/,
+ Logger* /*logger*/) const override {
assert(false);
return false;
}
- virtual bool FullMergeV2(const MergeOperationInput& merge_in,
- MergeOperationOutput* merge_out) const override {
+ bool FullMergeV2(const MergeOperationInput& merge_in,
+ MergeOperationOutput* merge_out) const override {
// Put basically only looks at the current/latest value
assert(!merge_in.operand_list.empty());
merge_out->existing_operand = merge_in.operand_list.back();