// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "enumstore.hpp" #include #include #include LOG_SETUP(".searchlib.attribute.enum_store"); namespace search { template <> void EnumStoreT::write_value(BufferWriter& writer, Index idx) const { const char* src = _store.get(idx); size_t sz = strlen(src) + 1; writer.write(src, sz); } template <> ssize_t EnumStoreT::load_unique_value(const void* src, size_t available, Index& idx) { const char* value = static_cast(src); size_t slen = strlen(value); size_t sz = slen + 1; if (available < sz) { return -1; } idx = _store.get_allocator().allocate(value); return sz; } std::unique_ptr make_enum_store_dictionary(IEnumStore &store, bool has_postings, const DictionaryConfig & dict_cfg, std::unique_ptr compare, std::unique_ptr folded_compare) { using NoBTreeDictionary = vespalib::datastore::NoBTreeDictionary; using ShardedHashMap = vespalib::datastore::ShardedHashMap; if (has_postings) { if (folded_compare) { return std::make_unique(store, std::move(compare), std::move(folded_compare)); } else { switch (dict_cfg.getType()) { case DictionaryConfig::Type::HASH: return std::make_unique>(store, std::move(compare)); case DictionaryConfig::Type::BTREE_AND_HASH: return std::make_unique>(store, std::move(compare)); default: return std::make_unique>(store, std::move(compare)); } } } else { return std::make_unique>(store, std::move(compare)); } } } namespace vespalib::datastore { template class DataStoreT; } namespace vespalib::btree { template class BTreeBuilder; template class BTreeBuilder; } namespace search { template class EnumStoreT; template class EnumStoreT; template class EnumStoreT; template class EnumStoreT; template class EnumStoreT; template class EnumStoreT; template class EnumStoreT; } // namespace search namespace vespalib::datastore { using search::EnumStoreComparator; using search::EnumStoreStringComparator; using search::enumstore::InternalIndex; template class UniqueStore>; template class UniqueStore>; template class UniqueStore>; template class UniqueStore>; template class UniqueStore>; template class UniqueStore>; template class UniqueStore>; }