diff options
Diffstat (limited to 'bindings/python/marisa-swig.h')
-rw-r--r-- | bindings/python/marisa-swig.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/bindings/python/marisa-swig.h b/bindings/python/marisa-swig.h new file mode 100644 index 0000000..f09a9a7 --- /dev/null +++ b/bindings/python/marisa-swig.h @@ -0,0 +1,183 @@ +#ifndef MARISA_SWIG_H_ +#define MARISA_SWIG_H_ + +#include <marisa.h> + +namespace marisa_swig { + +#define MARISA_SWIG_ENUM_COPY(name) name = MARISA_ ## name + +enum ErrorCode { + MARISA_SWIG_ENUM_COPY(OK), + MARISA_SWIG_ENUM_COPY(STATE_ERROR), + MARISA_SWIG_ENUM_COPY(NULL_ERROR), + MARISA_SWIG_ENUM_COPY(BOUND_ERROR), + MARISA_SWIG_ENUM_COPY(RANGE_ERROR), + MARISA_SWIG_ENUM_COPY(CODE_ERROR), + MARISA_SWIG_ENUM_COPY(RESET_ERROR), + MARISA_SWIG_ENUM_COPY(SIZE_ERROR), + MARISA_SWIG_ENUM_COPY(MEMORY_ERROR), + MARISA_SWIG_ENUM_COPY(IO_ERROR), + MARISA_SWIG_ENUM_COPY(FORMAT_ERROR) +}; + +enum NumTries { + MARISA_SWIG_ENUM_COPY(MIN_NUM_TRIES), + MARISA_SWIG_ENUM_COPY(MAX_NUM_TRIES), + MARISA_SWIG_ENUM_COPY(DEFAULT_NUM_TRIES) +}; + +enum CacheLevel { + MARISA_SWIG_ENUM_COPY(HUGE_CACHE), + MARISA_SWIG_ENUM_COPY(LARGE_CACHE), + MARISA_SWIG_ENUM_COPY(NORMAL_CACHE), + MARISA_SWIG_ENUM_COPY(SMALL_CACHE), + MARISA_SWIG_ENUM_COPY(TINY_CACHE), + MARISA_SWIG_ENUM_COPY(DEFAULT_CACHE) +}; + +enum TailMode { + MARISA_SWIG_ENUM_COPY(TEXT_TAIL), + MARISA_SWIG_ENUM_COPY(BINARY_TAIL), + MARISA_SWIG_ENUM_COPY(DEFAULT_TAIL) +}; + +enum NodeOrder { + MARISA_SWIG_ENUM_COPY(LABEL_ORDER), + MARISA_SWIG_ENUM_COPY(WEIGHT_ORDER), + MARISA_SWIG_ENUM_COPY(DEFAULT_ORDER) +}; + +#undef MARISA_SWIG_ENUM_COPY + +class Key { + public: + void str(const char **ptr_out, std::size_t *length_out) const; + std::size_t id() const; + float weight() const; + + private: + const marisa::Key key_; + + Key(); + Key(const Key &key); + Key &operator=(const Key &); +}; + +class Query { + public: + void str(const char **ptr_out, std::size_t *length_out) const; + std::size_t id() const; + + private: + const marisa::Query query_; + + Query(); + Query(const Query &query); + Query &operator=(const Query &); +}; + +class Keyset { + friend class Trie; + + public: + Keyset(); + ~Keyset(); + + void push_back(const marisa::Key &key); + void push_back(const char *ptr, std::size_t length, float weight = 1.0); + + const Key &key(std::size_t i) const; + + void key_str(std::size_t i, + const char **ptr_out, std::size_t *length_out) const; + std::size_t key_id(std::size_t i) const; + + std::size_t num_keys() const; + + bool empty() const; + std::size_t size() const; + std::size_t total_length() const; + + void reset(); + void clear(); + + private: + marisa::Keyset *keyset_; + + Keyset(const Keyset &); + Keyset &operator=(const Keyset &); +}; + +class Agent { + friend class Trie; + + public: + Agent(); + ~Agent(); + + void set_query(const char *ptr, std::size_t length); + void set_query(std::size_t id); + + const Key &key() const; + const Query &query() const; + + void key_str(const char **ptr_out, std::size_t *length_out) const; + std::size_t key_id() const; + + void query_str(const char **ptr_out, std::size_t *length_out) const; + std::size_t query_id() const; + + private: + marisa::Agent *agent_; + char *buf_; + std::size_t buf_size_; + + Agent(const Agent &); + Agent &operator=(const Agent &); +}; + +class Trie { + public: + Trie(); + ~Trie(); + + void build(Keyset &keyset, int config_flags = 0); + + void mmap(const char *filename); + void load(const char *filename); + void save(const char *filename) const; + + bool lookup(Agent &agent) const; + void reverse_lookup(Agent &agent) const; + bool common_prefix_search(Agent &agent) const; + bool predictive_search(Agent &agent) const; + + std::size_t lookup(const char *ptr, std::size_t length) const; + void reverse_lookup(std::size_t id, + const char **ptr_out_to_be_deleted, std::size_t *length_out) const; + + std::size_t num_tries() const; + std::size_t num_keys() const; + std::size_t num_nodes() const; + + TailMode tail_mode() const; + NodeOrder node_order() const; + + bool empty() const; + std::size_t size() const; + std::size_t total_size() const; + std::size_t io_size() const; + + void clear(); + + private: + marisa::Trie *trie_; + + Trie(const Trie &); + Trie &operator=(const Trie &); +}; + +} // namespace marisa_swig + +#endif // MARISA_SWIG_H_ |