Skip to content

Commit

Permalink
Merge pull request spotify#324 from spotify/const
Browse files Browse the repository at this point in the history
add const qualifier to a few methods
  • Loading branch information
erikbern authored Oct 28, 2018
2 parents ca8edc6 + 3e3b521 commit 348eff8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 19 deletions.
24 changes: 12 additions & 12 deletions src/annoylib.h
Original file line number Diff line number Diff line change
Expand Up @@ -708,12 +708,12 @@ class AnnoyIndexInterface {
virtual bool save(const char* filename, bool prefault) = 0;
virtual void unload() = 0;
virtual bool load(const char* filename, bool prefault) = 0;
virtual T get_distance(S i, S j) = 0;
virtual void get_nns_by_item(S item, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) = 0;
virtual void get_nns_by_vector(const T* w, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) = 0;
virtual S get_n_items() = 0;
virtual T get_distance(S i, S j) const = 0;
virtual void get_nns_by_item(S item, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) const = 0;
virtual void get_nns_by_vector(const T* w, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) const = 0;
virtual S get_n_items() const = 0;
virtual void verbose(bool v) = 0;
virtual void get_item(S item, T* v) = 0;
virtual void get_item(S item, T* v) const = 0;
virtual void set_seed(int q) = 0;
};

Expand Down Expand Up @@ -904,26 +904,26 @@ template<typename S, typename T, typename Distance, typename Random>
return true;
}

T get_distance(S i, S j) {
T get_distance(S i, S j) const {
return D::normalized_distance(D::distance(_get(i), _get(j), _f));
}

void get_nns_by_item(S item, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) {
void get_nns_by_item(S item, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) const {
const Node* m = _get(item);
_get_all_nns(m->v, n, search_k, result, distances);
}

void get_nns_by_vector(const T* w, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) {
void get_nns_by_vector(const T* w, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) const {
_get_all_nns(w, n, search_k, result, distances);
}
S get_n_items() {
S get_n_items() const {
return _n_items;
}
void verbose(bool v) {
_verbose = v;
}

void get_item(S item, T* v) {
void get_item(S item, T* v) const {
Node* m = _get(item);
memcpy(v, m->v, (_f) * sizeof(T));
}
Expand All @@ -945,7 +945,7 @@ template<typename S, typename T, typename Distance, typename Random>
}
}

inline Node* _get(const S i) {
inline Node* _get(const S i) const {
return get_node_ptr<S, Node>(_nodes, _s, i);
}

Expand Down Expand Up @@ -1034,7 +1034,7 @@ template<typename S, typename T, typename Distance, typename Random>
return item;
}

void _get_all_nns(const T* v, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) {
void _get_all_nns(const T* v, size_t n, size_t search_k, vector<S>* result, vector<T>* distances) const {
Node* v_node = (Node *)malloc(_s); // TODO: avoid
D::template zero_value<Node>(v_node);
memcpy(v_node->v, v, sizeof(T) * _f);
Expand Down
14 changes: 7 additions & 7 deletions src/annoymodule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ class HammingWrapper : public AnnoyIndexInterface<int32_t, float> {
private:
int32_t _f_external, _f_internal;
AnnoyIndex<int32_t, uint64_t, Hamming, Kiss64Random> _index;
void _pack(const float* src, uint64_t* dst) {
void _pack(const float* src, uint64_t* dst) const {
for (int32_t i = 0; i < _f_internal; i++) {
dst[i] = 0;
for (int32_t j = 0; j < 64 && i*64+j < _f_external; j++) {
dst[i] |= (uint64_t)(src[i * 64 + j] > 0.5) << j;
}
}
};
void _unpack(const uint64_t* src, float* dst) {
void _unpack(const uint64_t* src, float* dst) const {
for (int32_t i = 0; i < _f_external; i++) {
dst[i] = (src[i / 64] >> (i % 64)) & 1;
}
Expand All @@ -71,8 +71,8 @@ class HammingWrapper : public AnnoyIndexInterface<int32_t, float> {
bool save(const char* filename, bool prefault) { return _index.save(filename, prefault); };
void unload() { _index.unload(); };
bool load(const char* filename, bool prefault) { return _index.load(filename, prefault); };
float get_distance(int32_t i, int32_t j) { return _index.get_distance(i, j); };
void get_nns_by_item(int32_t item, size_t n, size_t search_k, vector<int32_t>* result, vector<float>* distances) {
float get_distance(int32_t i, int32_t j) const { return _index.get_distance(i, j); };
void get_nns_by_item(int32_t item, size_t n, size_t search_k, vector<int32_t>* result, vector<float>* distances) const {
if (distances) {
vector<uint64_t> distances_internal;
_index.get_nns_by_item(item, n, search_k, result, &distances_internal);
Expand All @@ -81,7 +81,7 @@ class HammingWrapper : public AnnoyIndexInterface<int32_t, float> {
_index.get_nns_by_item(item, n, search_k, result, NULL);
}
};
void get_nns_by_vector(const float* w, size_t n, size_t search_k, vector<int32_t>* result, vector<float>* distances) {
void get_nns_by_vector(const float* w, size_t n, size_t search_k, vector<int32_t>* result, vector<float>* distances) const {
vector<uint64_t> w_internal(_f_internal, 0);
_pack(w, &w_internal[0]);
if (distances) {
Expand All @@ -92,9 +92,9 @@ class HammingWrapper : public AnnoyIndexInterface<int32_t, float> {
_index.get_nns_by_vector(&w_internal[0], n, search_k, result, NULL);
}
};
int32_t get_n_items() { return _index.get_n_items(); };
int32_t get_n_items() const { return _index.get_n_items(); };
void verbose(bool v) { _index.verbose(v); };
void get_item(int32_t item, float* v) {
void get_item(int32_t item, float* v) const {
vector<uint64_t> v_internal(_f_internal, 0);
_index.get_item(item, &v_internal[0]);
_unpack(&v_internal[0], v);
Expand Down

0 comments on commit 348eff8

Please sign in to comment.