// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. // 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. #include #include "rocksdb/convenience.h" #include "rocksdb/table.h" #include "rocksdb/utilities/customizable_util.h" #include "rocksdb/utilities/object_registry.h" #include "table/block_based/block_based_table_factory.h" #include "table/cuckoo/cuckoo_table_factory.h" #include "table/plain/plain_table_factory.h" namespace ROCKSDB_NAMESPACE { static void RegisterTableFactories(const std::string& /*arg*/) { static std::once_flag loaded; std::call_once(loaded, []() { auto library = ObjectLibrary::Default(); library->AddFactory( TableFactory::kBlockBasedTableName(), [](const std::string& /*uri*/, std::unique_ptr* guard, std::string* /* errmsg */) { guard->reset(new BlockBasedTableFactory()); return guard->get(); }); library->AddFactory( TableFactory::kPlainTableName(), [](const std::string& /*uri*/, std::unique_ptr* guard, std::string* /* errmsg */) { guard->reset(new PlainTableFactory()); return guard->get(); }); library->AddFactory( TableFactory::kCuckooTableName(), [](const std::string& /*uri*/, std::unique_ptr* guard, std::string* /* errmsg */) { guard->reset(new CuckooTableFactory()); return guard->get(); }); }); } static bool LoadFactory(const std::string& name, std::shared_ptr* factory) { if (name == TableFactory::kBlockBasedTableName()) { factory->reset(new BlockBasedTableFactory()); return true; } else { return false; } } Status TableFactory::CreateFromString(const ConfigOptions& config_options, const std::string& value, std::shared_ptr* factory) { RegisterTableFactories(""); return LoadSharedObject(config_options, value, LoadFactory, factory); } } // namespace ROCKSDB_NAMESPACE