Struct faiss::simd_result_handlers::RangeHandler

template<class C, bool with_id_map = false>
struct RangeHandler : public faiss::simd_result_handlers::ResultHandlerCompare<C, false>

Result hanlder for range search. The difficulty is that the range distances have to be scaled using the scaler.

Public Types

using T = typename C::T
using TI = typename C::TI
using RHC = ResultHandlerCompare<C, with_id_map>

Public Functions

inline RangeHandler(RangeSearchResult &rres, float radius, size_t ntotal)
inline virtual void begin(const float *norms)
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final

called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.

inline virtual void end() override
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final

set the sub-matrix that is being computed

inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
inline int64_t adjust_id(size_t b, size_t j)
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)

return binary mask of elements below thr in (d0, d1) inverse_test returns elements above

Public Members

RangeSearchResult &rres
float radius
std::vector<uint16_t> thresholds
std::vector<size_t> n_per_query
size_t q0 = 0
std::vector<Triplet> triplets
bool disable
int64_t i0
int64_t j0
size_t nq
size_t ntotal
const idx_t *id_map = nullptr

these fields are used mainly for the IVF variants (with_id_map=true)

const int *q_map = nullptr
const uint16_t *dbias = nullptr
const float *normalizers = nullptr
bool is_CMax = false
uint8_t sizeof_ids = 0
bool with_fields = false
struct Triplet

Public Members

idx_t q
idx_t b
uint16_t dis