xref: /aosp_15_r20/external/marisa-trie/bindings/python/marisa-swig.h (revision ab8db090fce404b23716c4c9194221ee27efe31c)
1*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_SWIG_H_
2*ab8db090SAndroid Build Coastguard Worker #define MARISA_SWIG_H_
3*ab8db090SAndroid Build Coastguard Worker 
4*ab8db090SAndroid Build Coastguard Worker #include <marisa.h>
5*ab8db090SAndroid Build Coastguard Worker 
6*ab8db090SAndroid Build Coastguard Worker namespace marisa_swig {
7*ab8db090SAndroid Build Coastguard Worker 
8*ab8db090SAndroid Build Coastguard Worker #define MARISA_SWIG_ENUM_COPY(name) name = MARISA_ ## name
9*ab8db090SAndroid Build Coastguard Worker 
10*ab8db090SAndroid Build Coastguard Worker enum ErrorCode {
11*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(OK),
12*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(STATE_ERROR),
13*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(NULL_ERROR),
14*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(BOUND_ERROR),
15*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(RANGE_ERROR),
16*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(CODE_ERROR),
17*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(RESET_ERROR),
18*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(SIZE_ERROR),
19*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(MEMORY_ERROR),
20*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(IO_ERROR),
21*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(FORMAT_ERROR)
22*ab8db090SAndroid Build Coastguard Worker };
23*ab8db090SAndroid Build Coastguard Worker 
24*ab8db090SAndroid Build Coastguard Worker enum NumTries {
25*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(MIN_NUM_TRIES),
26*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(MAX_NUM_TRIES),
27*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(DEFAULT_NUM_TRIES)
28*ab8db090SAndroid Build Coastguard Worker };
29*ab8db090SAndroid Build Coastguard Worker 
30*ab8db090SAndroid Build Coastguard Worker enum CacheLevel {
31*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(HUGE_CACHE),
32*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(LARGE_CACHE),
33*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(NORMAL_CACHE),
34*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(SMALL_CACHE),
35*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(TINY_CACHE),
36*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(DEFAULT_CACHE)
37*ab8db090SAndroid Build Coastguard Worker };
38*ab8db090SAndroid Build Coastguard Worker 
39*ab8db090SAndroid Build Coastguard Worker enum TailMode {
40*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(TEXT_TAIL),
41*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(BINARY_TAIL),
42*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(DEFAULT_TAIL)
43*ab8db090SAndroid Build Coastguard Worker };
44*ab8db090SAndroid Build Coastguard Worker 
45*ab8db090SAndroid Build Coastguard Worker enum NodeOrder {
46*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(LABEL_ORDER),
47*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(WEIGHT_ORDER),
48*ab8db090SAndroid Build Coastguard Worker   MARISA_SWIG_ENUM_COPY(DEFAULT_ORDER)
49*ab8db090SAndroid Build Coastguard Worker };
50*ab8db090SAndroid Build Coastguard Worker 
51*ab8db090SAndroid Build Coastguard Worker #undef MARISA_SWIG_ENUM_COPY
52*ab8db090SAndroid Build Coastguard Worker 
53*ab8db090SAndroid Build Coastguard Worker class Key {
54*ab8db090SAndroid Build Coastguard Worker  public:
55*ab8db090SAndroid Build Coastguard Worker   void str(const char **ptr_out, std::size_t *length_out) const;
56*ab8db090SAndroid Build Coastguard Worker   std::size_t id() const;
57*ab8db090SAndroid Build Coastguard Worker   float weight() const;
58*ab8db090SAndroid Build Coastguard Worker 
59*ab8db090SAndroid Build Coastguard Worker  private:
60*ab8db090SAndroid Build Coastguard Worker   const marisa::Key key_;
61*ab8db090SAndroid Build Coastguard Worker 
62*ab8db090SAndroid Build Coastguard Worker   Key();
63*ab8db090SAndroid Build Coastguard Worker   Key(const Key &key);
64*ab8db090SAndroid Build Coastguard Worker   Key &operator=(const Key &);
65*ab8db090SAndroid Build Coastguard Worker };
66*ab8db090SAndroid Build Coastguard Worker 
67*ab8db090SAndroid Build Coastguard Worker class Query {
68*ab8db090SAndroid Build Coastguard Worker  public:
69*ab8db090SAndroid Build Coastguard Worker   void str(const char **ptr_out, std::size_t *length_out) const;
70*ab8db090SAndroid Build Coastguard Worker   std::size_t id() const;
71*ab8db090SAndroid Build Coastguard Worker 
72*ab8db090SAndroid Build Coastguard Worker  private:
73*ab8db090SAndroid Build Coastguard Worker   const marisa::Query query_;
74*ab8db090SAndroid Build Coastguard Worker 
75*ab8db090SAndroid Build Coastguard Worker   Query();
76*ab8db090SAndroid Build Coastguard Worker   Query(const Query &query);
77*ab8db090SAndroid Build Coastguard Worker   Query &operator=(const Query &);
78*ab8db090SAndroid Build Coastguard Worker };
79*ab8db090SAndroid Build Coastguard Worker 
80*ab8db090SAndroid Build Coastguard Worker class Keyset {
81*ab8db090SAndroid Build Coastguard Worker  friend class Trie;
82*ab8db090SAndroid Build Coastguard Worker 
83*ab8db090SAndroid Build Coastguard Worker  public:
84*ab8db090SAndroid Build Coastguard Worker   Keyset();
85*ab8db090SAndroid Build Coastguard Worker   ~Keyset();
86*ab8db090SAndroid Build Coastguard Worker 
87*ab8db090SAndroid Build Coastguard Worker   void push_back(const marisa::Key &key);
88*ab8db090SAndroid Build Coastguard Worker   void push_back(const char *ptr, std::size_t length, float weight = 1.0);
89*ab8db090SAndroid Build Coastguard Worker 
90*ab8db090SAndroid Build Coastguard Worker   const Key &key(std::size_t i) const;
91*ab8db090SAndroid Build Coastguard Worker 
92*ab8db090SAndroid Build Coastguard Worker   void key_str(std::size_t i,
93*ab8db090SAndroid Build Coastguard Worker       const char **ptr_out, std::size_t *length_out) const;
94*ab8db090SAndroid Build Coastguard Worker   std::size_t key_id(std::size_t i) const;
95*ab8db090SAndroid Build Coastguard Worker 
96*ab8db090SAndroid Build Coastguard Worker   std::size_t num_keys() const;
97*ab8db090SAndroid Build Coastguard Worker 
98*ab8db090SAndroid Build Coastguard Worker   bool empty() const;
99*ab8db090SAndroid Build Coastguard Worker   std::size_t size() const;
100*ab8db090SAndroid Build Coastguard Worker   std::size_t total_length() const;
101*ab8db090SAndroid Build Coastguard Worker 
102*ab8db090SAndroid Build Coastguard Worker   void reset();
103*ab8db090SAndroid Build Coastguard Worker   void clear();
104*ab8db090SAndroid Build Coastguard Worker 
105*ab8db090SAndroid Build Coastguard Worker  private:
106*ab8db090SAndroid Build Coastguard Worker   marisa::Keyset *keyset_;
107*ab8db090SAndroid Build Coastguard Worker 
108*ab8db090SAndroid Build Coastguard Worker   Keyset(const Keyset &);
109*ab8db090SAndroid Build Coastguard Worker   Keyset &operator=(const Keyset &);
110*ab8db090SAndroid Build Coastguard Worker };
111*ab8db090SAndroid Build Coastguard Worker 
112*ab8db090SAndroid Build Coastguard Worker class Agent {
113*ab8db090SAndroid Build Coastguard Worker  friend class Trie;
114*ab8db090SAndroid Build Coastguard Worker 
115*ab8db090SAndroid Build Coastguard Worker  public:
116*ab8db090SAndroid Build Coastguard Worker   Agent();
117*ab8db090SAndroid Build Coastguard Worker   ~Agent();
118*ab8db090SAndroid Build Coastguard Worker 
119*ab8db090SAndroid Build Coastguard Worker   void set_query(const char *ptr, std::size_t length);
120*ab8db090SAndroid Build Coastguard Worker   void set_query(std::size_t id);
121*ab8db090SAndroid Build Coastguard Worker 
122*ab8db090SAndroid Build Coastguard Worker   const Key &key() const;
123*ab8db090SAndroid Build Coastguard Worker   const Query &query() const;
124*ab8db090SAndroid Build Coastguard Worker 
125*ab8db090SAndroid Build Coastguard Worker   void key_str(const char **ptr_out, std::size_t *length_out) const;
126*ab8db090SAndroid Build Coastguard Worker   std::size_t key_id() const;
127*ab8db090SAndroid Build Coastguard Worker 
128*ab8db090SAndroid Build Coastguard Worker   void query_str(const char **ptr_out, std::size_t *length_out) const;
129*ab8db090SAndroid Build Coastguard Worker   std::size_t query_id() const;
130*ab8db090SAndroid Build Coastguard Worker 
131*ab8db090SAndroid Build Coastguard Worker  private:
132*ab8db090SAndroid Build Coastguard Worker   marisa::Agent *agent_;
133*ab8db090SAndroid Build Coastguard Worker   char *buf_;
134*ab8db090SAndroid Build Coastguard Worker   std::size_t buf_size_;
135*ab8db090SAndroid Build Coastguard Worker 
136*ab8db090SAndroid Build Coastguard Worker   Agent(const Agent &);
137*ab8db090SAndroid Build Coastguard Worker   Agent &operator=(const Agent &);
138*ab8db090SAndroid Build Coastguard Worker };
139*ab8db090SAndroid Build Coastguard Worker 
140*ab8db090SAndroid Build Coastguard Worker class Trie {
141*ab8db090SAndroid Build Coastguard Worker  public:
142*ab8db090SAndroid Build Coastguard Worker   Trie();
143*ab8db090SAndroid Build Coastguard Worker   ~Trie();
144*ab8db090SAndroid Build Coastguard Worker 
145*ab8db090SAndroid Build Coastguard Worker   void build(Keyset &keyset, int config_flags = 0);
146*ab8db090SAndroid Build Coastguard Worker 
147*ab8db090SAndroid Build Coastguard Worker   void mmap(const char *filename);
148*ab8db090SAndroid Build Coastguard Worker   void load(const char *filename);
149*ab8db090SAndroid Build Coastguard Worker   void save(const char *filename) const;
150*ab8db090SAndroid Build Coastguard Worker 
151*ab8db090SAndroid Build Coastguard Worker   bool lookup(Agent &agent) const;
152*ab8db090SAndroid Build Coastguard Worker   void reverse_lookup(Agent &agent) const;
153*ab8db090SAndroid Build Coastguard Worker   bool common_prefix_search(Agent &agent) const;
154*ab8db090SAndroid Build Coastguard Worker   bool predictive_search(Agent &agent) const;
155*ab8db090SAndroid Build Coastguard Worker 
156*ab8db090SAndroid Build Coastguard Worker   std::size_t lookup(const char *ptr, std::size_t length) const;
157*ab8db090SAndroid Build Coastguard Worker   void reverse_lookup(std::size_t id,
158*ab8db090SAndroid Build Coastguard Worker       const char **ptr_out_to_be_deleted, std::size_t *length_out) const;
159*ab8db090SAndroid Build Coastguard Worker 
160*ab8db090SAndroid Build Coastguard Worker   std::size_t num_tries() const;
161*ab8db090SAndroid Build Coastguard Worker   std::size_t num_keys() const;
162*ab8db090SAndroid Build Coastguard Worker   std::size_t num_nodes() const;
163*ab8db090SAndroid Build Coastguard Worker 
164*ab8db090SAndroid Build Coastguard Worker   TailMode tail_mode() const;
165*ab8db090SAndroid Build Coastguard Worker   NodeOrder node_order() const;
166*ab8db090SAndroid Build Coastguard Worker 
167*ab8db090SAndroid Build Coastguard Worker   bool empty() const;
168*ab8db090SAndroid Build Coastguard Worker   std::size_t size() const;
169*ab8db090SAndroid Build Coastguard Worker   std::size_t total_size() const;
170*ab8db090SAndroid Build Coastguard Worker   std::size_t io_size() const;
171*ab8db090SAndroid Build Coastguard Worker 
172*ab8db090SAndroid Build Coastguard Worker   void clear();
173*ab8db090SAndroid Build Coastguard Worker 
174*ab8db090SAndroid Build Coastguard Worker  private:
175*ab8db090SAndroid Build Coastguard Worker   marisa::Trie *trie_;
176*ab8db090SAndroid Build Coastguard Worker 
177*ab8db090SAndroid Build Coastguard Worker   Trie(const Trie &);
178*ab8db090SAndroid Build Coastguard Worker   Trie &operator=(const Trie &);
179*ab8db090SAndroid Build Coastguard Worker };
180*ab8db090SAndroid Build Coastguard Worker 
181*ab8db090SAndroid Build Coastguard Worker }  // namespace marisa_swig
182*ab8db090SAndroid Build Coastguard Worker 
183*ab8db090SAndroid Build Coastguard Worker #endif  // MARISA_SWIG_H_
184