| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // 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/db.h"
- #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
- 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
|