fork of https://github.com/rust-rocksdb/rust-rocksdb for nextgraph
				
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							68 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							68 lines
						
					
					
						
							2.1 KiB
						
					
					
				| //  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
 | |
| 
 |