// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #pragma once #include #include "rocksdb/slice.h" namespace ROCKSDB_NAMESPACE { // Define all public custom types here. // Represents a sequence number in a WAL file. typedef uint64_t SequenceNumber; const SequenceNumber kMinUnCommittedSeq = 1; // 0 is always committed // User-oriented representation of internal key types. // Ordering of this enum entries should not change. enum EntryType { kEntryPut, kEntryDelete, kEntrySingleDelete, kEntryMerge, kEntryRangeDeletion, kEntryBlobIndex, kEntryDeleteWithTimestamp, kEntryOther, }; // tuple. struct FullKey { Slice user_key; SequenceNumber sequence; EntryType type; FullKey() : sequence(0) {} // Intentionally left uninitialized (for speed) FullKey(const Slice& u, const SequenceNumber& seq, EntryType t) : user_key(u), sequence(seq), type(t) {} std::string DebugString(bool hex = false) const; void clear() { user_key.clear(); sequence = 0; type = EntryType::kEntryPut; } }; // Parse slice representing internal key to FullKey // Parsed FullKey is valid for as long as the memory pointed to by // internal_key is alive. bool ParseFullKey(const Slice& internal_key, FullKey* result); } // namespace ROCKSDB_NAMESPACE