// Copyright (c) 2013 The LevelDB Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. See the AUTHORS file for names of contributors. #ifndef STORAGE_LEVELDB_INCLUDE_COMPACTION_FILTER_H_ #define STORAGE_LEVELDB_INCLUDE_COMPACTION_FILTER_H_ #include namespace leveldb { class Slice; // CompactionFilter allows an application to modify/delete a key-value at // the time of compaction. class CompactionFilter { public: virtual ~CompactionFilter() {} // The compaction process invokes this // method for kv that is being compacted. A return value // of false indicates that the kv should be preserved in the // output of this compaction run and a return value of true // indicates that this key-value should be removed from the // output of the compaction. The application can inspect // the existing value of the key and make decision based on it. // // When the value is to be preserved, the application has the option // to modify the existing_value and pass it back through new_value. // value_changed needs to be set to true in this case. virtual bool Filter(int level, const Slice& key, const Slice& existing_value, std::string* new_value, bool* value_changed) const = 0; // Returns a name that identifies this compaction filter. // The name will be printed to LOG file on start up for diagnosis. virtual const char* Name() const = 0; }; } // namespace leveldb #endif // STORAGE_LEVELDB_INCLUDE_COMPACTION_FILTER_H_