| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | //  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#ifndef ROCKSDB_LITE#include <string>#include <memory>#include <utility>#include <vector>#include "db/dbformat.h"#include "file/random_access_file_reader.h"#include "options/cf_options.h"#include "rocksdb/env.h"#include "rocksdb/options.h"#include "table/table_reader.h"namespace ROCKSDB_NAMESPACE {class Arena;class TableReader;class CuckooTableReader: public TableReader { public:  CuckooTableReader(const ImmutableCFOptions& ioptions,                    std::unique_ptr<RandomAccessFileReader>&& file,                    uint64_t file_size, const Comparator* user_comparator,                    uint64_t (*get_slice_hash)(const Slice&, uint32_t,                                               uint64_t));  ~CuckooTableReader() {}  std::shared_ptr<const TableProperties> GetTableProperties() const override {    return table_props_;  }  Status status() const { return status_; }  Status Get(const ReadOptions& readOptions, const Slice& key,             GetContext* get_context, const SliceTransform* prefix_extractor,             bool skip_filters = false) override;  // Returns a new iterator over table contents  // compaction_readahead_size: its value will only be used if for_compaction =  // true  InternalIterator* NewIterator(const ReadOptions&,                                const SliceTransform* prefix_extractor,                                Arena* arena, bool skip_filters,                                TableReaderCaller caller,                                size_t compaction_readahead_size = 0) override;  void Prepare(const Slice& target) override;  // Report an approximation of how much memory has been used.  size_t ApproximateMemoryUsage() const override;  // Following methods are not implemented for Cuckoo Table Reader  uint64_t ApproximateOffsetOf(const Slice& /*key*/,                               TableReaderCaller /*caller*/) override {    return 0;  }  uint64_t ApproximateSize(const Slice& /*start*/, const Slice& /*end*/,                           TableReaderCaller /*caller*/) override {    return 0;  }  void SetupForCompaction() override {}  // End of methods not implemented. private:  friend class CuckooTableIterator;  void LoadAllKeys(std::vector<std::pair<Slice, uint32_t>>* key_to_bucket_id);  std::unique_ptr<RandomAccessFileReader> file_;  Slice file_data_;  bool is_last_level_;  bool identity_as_first_hash_;  bool use_module_hash_;  std::shared_ptr<const TableProperties> table_props_;  Status status_;  uint32_t num_hash_func_;  std::string unused_key_;  uint32_t key_length_;  uint32_t user_key_length_;  uint32_t value_length_;  uint32_t bucket_length_;  uint32_t cuckoo_block_size_;  uint32_t cuckoo_block_bytes_minus_one_;  uint64_t table_size_;  const Comparator* ucomp_;  uint64_t (*get_slice_hash_)(const Slice& s, uint32_t index,      uint64_t max_num_buckets);};}  // namespace ROCKSDB_NAMESPACE#endif  // ROCKSDB_LITE
 |