#include <mutex>
#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& ) {
static std::once_flag loaded;
std::call_once(loaded, []() {
auto library = ObjectLibrary::Default();
library->AddFactory<TableFactory>(
TableFactory::kBlockBasedTableName(),
[](const std::string& , std::unique_ptr<TableFactory>* guard,
std::string* ) {
guard->reset(new BlockBasedTableFactory());
return guard->get();
});
library->AddFactory<TableFactory>(
TableFactory::kPlainTableName(),
[](const std::string& , std::unique_ptr<TableFactory>* guard,
std::string* ) {
guard->reset(new PlainTableFactory());
return guard->get();
});
library->AddFactory<TableFactory>(
TableFactory::kCuckooTableName(),
[](const std::string& , std::unique_ptr<TableFactory>* guard,
std::string* ) {
guard->reset(new CuckooTableFactory());
return guard->get();
});
});
}
Status TableFactory::CreateFromString(const ConfigOptions& config_options,
const std::string& value,
std::shared_ptr<TableFactory>* factory) {
RegisterTableFactories("");
return LoadSharedObject<TableFactory>(config_options, value, factory);
}
}