blob: 3fec8cef82a905aa721810799a0db78672adfc2d [file] [log] [blame]
#ifndef _LSH_TABLE_H_
#define _LSH_TABLE_H_
#include <cass.h>
#include <cass_hash.h> // dynamic array based
// #include <hash_table.h> // link list based
#include <cass_bitmap.h>
typedef struct _lshTable_t {
cass_size_t D; // cass_vec_t dimension
float W; // hash bin size
cass_size_t M; // number of hash functions per table
cass_size_t H;
float **alphas;
float *betas;
uint32_t *rndvec;
ohash_t *hash_table;
// hashTable_t *hash_table;
} lshTable_t;
lshTable_t *lshTable_init(cass_size_t D, float W, cass_size_t M,
cass_size_t H);
int lshTable_free(lshTable_t *lsh_table);
lshTable_t *lshTable_load(CASS_FILE *in);
int lshTable_dump(lshTable_t *lsh_table, CASS_FILE *out);
int lshTable_hash(lshTable_t *lsh_table, float *vec, int *hash);
int lshTable_hash_diff(lshTable_t *lsh_table, float *vec,
int *hash, float *diff);
int lshTable_insert(lshTable_t *lsh_table, float *vec,
cass_vec_id_t id);
int lshTable_query(lshTable_t *lsh_table, float *vec,
bitmap_t *map);
inline int lshTable_query_hash(lshTable_t *lsh_table, int *hash,
bitmap_t *map);
#endif /* _LSH_TABLE_H_ */