// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. #pragma once #include #include namespace faiss_rocksdb { struct RocksDBInvertedListsIterator : faiss::InvertedListsIterator { RocksDBInvertedListsIterator( rocksdb::DB* db, size_t list_no, size_t code_size); virtual bool is_available() const override; virtual void next() override; virtual std::pair get_id_and_codes() override; private: std::unique_ptr it; size_t list_no; size_t code_size; std::vector codes; // buffer for returning codes in next() }; struct RocksDBInvertedLists : faiss::InvertedLists { RocksDBInvertedLists( const char* db_directory, size_t nlist, size_t code_size); size_t list_size(size_t list_no) const override; const uint8_t* get_codes(size_t list_no) const override; const faiss::idx_t* get_ids(size_t list_no) const override; size_t add_entries( size_t list_no, size_t n_entry, const faiss::idx_t* ids, const uint8_t* code) override; void update_entries( size_t list_no, size_t offset, size_t n_entry, const faiss::idx_t* ids, const uint8_t* code) override; void resize(size_t list_no, size_t new_size) override; faiss::InvertedListsIterator* get_iterator( size_t list_no, void* inverted_list_context) const override; private: std::unique_ptr db_; }; } // namespace faiss_rocksdb