| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // 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).
- //
- // Copyright (c) 2011 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.
- #pragma once
- #include <string>
- #include <utility>
- #include "rocksdb/slice.h"
- #include "rocksdb/types.h"
- namespace ROCKSDB_NAMESPACE {
- // A helper class useful for DBImpl::Get()
- class LookupKey {
- public:
- // Initialize *this for looking up user_key at a snapshot with
- // the specified sequence number.
- LookupKey(const Slice& _user_key, SequenceNumber sequence,
- const Slice* ts = nullptr);
- ~LookupKey();
- // Return a key suitable for lookup in a MemTable.
- Slice memtable_key() const {
- return Slice(start_, static_cast<size_t>(end_ - start_));
- }
- // Return an internal key (suitable for passing to an internal iterator)
- Slice internal_key() const {
- return Slice(kstart_, static_cast<size_t>(end_ - kstart_));
- }
- // Return the user key.
- // If user-defined timestamp is enabled, then timestamp is included in the
- // result.
- Slice user_key() const {
- return Slice(kstart_, static_cast<size_t>(end_ - kstart_ - 8));
- }
- private:
- // We construct a char array of the form:
- // klength varint32 <-- start_
- // userkey char[klength] <-- kstart_
- // tag uint64
- // <-- end_
- // The array is a suitable MemTable key.
- // The suffix starting with "userkey" can be used as an InternalKey.
- const char* start_;
- const char* kstart_;
- const char* end_;
- char space_[200]; // Avoid allocation for short keys
- // No copying allowed
- LookupKey(const LookupKey&);
- void operator=(const LookupKey&);
- };
- inline LookupKey::~LookupKey() {
- if (start_ != space_) delete[] start_;
- }
- } // namespace ROCKSDB_NAMESPACE
|