Skip to content

Commit

Permalink
Implemented cereal serialization bindings for AnnoyIndex
Browse files Browse the repository at this point in the history
  • Loading branch information
FuexFollets committed Jan 30, 2024
1 parent 56b9f94 commit 03f70c8
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/lexocraft/cereal_annoy_index.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef LEXOCRAFT_CEREAL_ANNOY_HPP
#define LEXOCRAFT_CEREAL_ANNOY_HPP

#include <annoy/annoylib.h>
#include <cereal/archives/binary.hpp>
#include <cereal/cereal.hpp>
#include <cstdint>

namespace cereal {
template <class Archive, typename S, typename T, typename Distance, typename Random,
class ThreadedBuildPolicy>
inline void
save(Archive& archive,
const Annoy::AnnoyIndex<S, T, Distance, Random, ThreadedBuildPolicy> annoy_index) {
archive(annoy_index.serialize());
}

template <class Archive, typename S, typename T, typename Distance, typename Random,
class ThreadedBuildPolicy>
inline void load(Archive& archive,
Annoy::AnnoyIndex<S, T, Distance, Random, ThreadedBuildPolicy>& annoy_index) {
std::string serialized_index;
archive(serialized_index);

const std::vector<uint8_t> bytes(serialized_index.begin(),
serialized_index.end());

annoy_index.deserialize(bytes.data());
}
} // namespace cereal

#endif

0 comments on commit 03f70c8

Please sign in to comment.