#pragma once #include #include #include #include "store.h" #include "field.h" #include "collection.h" // Singleton, for managing meta information of all collections and house keeping class CollectionManager { private: Store *store; spp::sparse_hash_map collections; // Auto incrementing ID assigned to each collection // Using a ID instead of a collection's name makes renaming possible uint32_t next_collection_id; static constexpr const char* COLLECTION_NAME_KEY = "name"; static constexpr const char* COLLECTION_ID_KEY = "id"; static constexpr const char* COLLECTION_SEARCH_FIELDS_KEY = "search_fields"; static constexpr const char* COLLECTION_FACET_FIELDS_KEY = "facet_fields"; static constexpr const char* COLLECTION_RANK_FIELDS_KEY = "rank_fields"; static constexpr const char* COLLECTION_TOKEN_ORDERING_FIELD_KEY = "token_ordering_field"; CollectionManager(); public: static CollectionManager& get_instance() { static CollectionManager instance; return instance; } ~CollectionManager(); CollectionManager(CollectionManager const&) = delete; void operator=(CollectionManager const&) = delete; void init(Store *store); Collection* create_collection(std::string name, const std::vector & search_fields, const std::vector & facet_fields, const std::vector & rank_fields, const std::string & token_ordering_field = ""); Collection* get_collection(std::string collection_name); bool drop_collection(std::string collection_name); uint32_t get_next_collection_id(); static constexpr const char* NEXT_COLLECTION_ID_KEY = "$CI"; };