14 #ifndef FAISS_AUX_INDEX_STRUCTURES_H
15 #define FAISS_AUX_INDEX_STRUCTURES_H
20 #include <unordered_set>
56 virtual bool is_member (idx_t
id)
const = 0;
67 bool is_member(idx_t
id)
const override;
80 std::unordered_set<idx_t> set;
82 typedef unsigned char uint8_t;
83 std::vector<uint8_t> bloom;
88 bool is_member(idx_t
id)
const override;
110 std::vector<Buffer> buffers;
118 void append_buffer ();
120 inline void add (idx_t
id,
float dis)
122 if (
wp == buffer_size) {
125 Buffer & buf = buffers.back();
134 idx_t * dest_ids,
float *dest_dis);
151 inline void add (
float dis, idx_t
id) {
157 std::vector<QueryResult> queries;
182 virtual size_t operator()(
183 void *ptr,
size_t size,
size_t nitems) = 0;
186 virtual int fileno ();
196 virtual size_t operator()(
197 const void *ptr,
size_t size,
size_t nitems) = 0;
200 virtual int fileno ();
207 std::vector<uint8_t> data;
209 size_t operator()(
void *ptr,
size_t size,
size_t nitems)
override;
213 std::vector<uint8_t> data;
214 size_t operator()(
const void *ptr,
size_t size,
size_t nitems)
override;
result structure for a single query
void copy_range(size_t ofs, size_t n, idx_t *dest_ids, float *dest_dis)
void set_result(bool incremental=false)
called by range_search after do_allocation
void set_lims()
called by range_search before do_allocation
RangeSearchResult(idx_t nq, bool alloc_lims=true)
lims must be allocated on input to range_search.
size_t wp
write pointer in the last buffer.
float * distances
corresponding distances (not sorted)
long idx_t
all indices are this type
QueryResult & new_result(idx_t qno)
begin a new result
virtual void do_allocation()
the entries in the buffers are split per query
size_t buffer_size
size of the result buffers used
size_t * lims
size (nq + 1)
idx_t * labels
result for query i is labels[lims[i]:lims[i+1]]