// 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 #include "rocksdb/options.h" #include "rocksdb/table.h" namespace rocksdb { struct EnvOptions; using std::unique_ptr; class Status; class RandomAccessFile; class WritableFile; class Table; class TableBuilder; class AdaptiveTableFactory : public TableFactory { public: ~AdaptiveTableFactory() {} explicit AdaptiveTableFactory( std::shared_ptr table_factory_to_write, std::shared_ptr block_based_table_factory, std::shared_ptr plain_table_factory, std::shared_ptr cuckoo_table_factory); const char* Name() const override { return "AdaptiveTableFactory"; } Status NewTableReader( const ImmutableCFOptions& ioptions, const EnvOptions& env_options, const InternalKeyComparator& internal_comparator, unique_ptr&& file, uint64_t file_size, unique_ptr* table) const override; TableBuilder* NewTableBuilder( const ImmutableCFOptions& ioptions, const InternalKeyComparator& icomparator, WritableFile* file, const CompressionType compression_type, const CompressionOptions& compression_opts) const override; // Sanitizes the specified DB Options. Status SanitizeDBOptions(const DBOptions* db_opts) const override { if (db_opts->allow_mmap_reads == false) { return Status::NotSupported( "AdaptiveTable with allow_mmap_reads == false is not supported."); } return Status::OK(); } std::string GetPrintableTableOptions() const override; private: std::shared_ptr table_factory_to_write_; std::shared_ptr block_based_table_factory_; std::shared_ptr plain_table_factory_; std::shared_ptr cuckoo_table_factory_; }; } // namespace rocksdb #endif // ROCKSDB_LITE