xref: /aosp_15_r20/external/marisa-trie/include/marisa/agent.h (revision ab8db090fce404b23716c4c9194221ee27efe31c)
1*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_AGENT_H_
2*ab8db090SAndroid Build Coastguard Worker #define MARISA_AGENT_H_
3*ab8db090SAndroid Build Coastguard Worker 
4*ab8db090SAndroid Build Coastguard Worker #include "marisa/key.h"
5*ab8db090SAndroid Build Coastguard Worker #include "marisa/query.h"
6*ab8db090SAndroid Build Coastguard Worker 
7*ab8db090SAndroid Build Coastguard Worker namespace marisa {
8*ab8db090SAndroid Build Coastguard Worker namespace grimoire {
9*ab8db090SAndroid Build Coastguard Worker namespace trie {
10*ab8db090SAndroid Build Coastguard Worker 
11*ab8db090SAndroid Build Coastguard Worker class State;
12*ab8db090SAndroid Build Coastguard Worker 
13*ab8db090SAndroid Build Coastguard Worker }  // namespace trie
14*ab8db090SAndroid Build Coastguard Worker }  // namespace grimoire
15*ab8db090SAndroid Build Coastguard Worker 
16*ab8db090SAndroid Build Coastguard Worker class Agent {
17*ab8db090SAndroid Build Coastguard Worker  public:
18*ab8db090SAndroid Build Coastguard Worker   Agent();
19*ab8db090SAndroid Build Coastguard Worker   ~Agent();
20*ab8db090SAndroid Build Coastguard Worker 
query()21*ab8db090SAndroid Build Coastguard Worker   const Query &query() const {
22*ab8db090SAndroid Build Coastguard Worker     return query_;
23*ab8db090SAndroid Build Coastguard Worker   }
key()24*ab8db090SAndroid Build Coastguard Worker   const Key &key() const {
25*ab8db090SAndroid Build Coastguard Worker     return key_;
26*ab8db090SAndroid Build Coastguard Worker   }
27*ab8db090SAndroid Build Coastguard Worker 
28*ab8db090SAndroid Build Coastguard Worker   void set_query(const char *str);
29*ab8db090SAndroid Build Coastguard Worker   void set_query(const char *ptr, std::size_t length);
30*ab8db090SAndroid Build Coastguard Worker   void set_query(std::size_t key_id);
31*ab8db090SAndroid Build Coastguard Worker 
state()32*ab8db090SAndroid Build Coastguard Worker   const grimoire::trie::State &state() const {
33*ab8db090SAndroid Build Coastguard Worker     return *state_;
34*ab8db090SAndroid Build Coastguard Worker   }
state()35*ab8db090SAndroid Build Coastguard Worker   grimoire::trie::State &state() {
36*ab8db090SAndroid Build Coastguard Worker     return *state_;
37*ab8db090SAndroid Build Coastguard Worker   }
38*ab8db090SAndroid Build Coastguard Worker 
set_key(const char * str)39*ab8db090SAndroid Build Coastguard Worker   void set_key(const char *str) {
40*ab8db090SAndroid Build Coastguard Worker     MARISA_DEBUG_IF(str == NULL, MARISA_NULL_ERROR);
41*ab8db090SAndroid Build Coastguard Worker     key_.set_str(str);
42*ab8db090SAndroid Build Coastguard Worker   }
set_key(const char * ptr,std::size_t length)43*ab8db090SAndroid Build Coastguard Worker   void set_key(const char *ptr, std::size_t length) {
44*ab8db090SAndroid Build Coastguard Worker     MARISA_DEBUG_IF((ptr == NULL) && (length != 0), MARISA_NULL_ERROR);
45*ab8db090SAndroid Build Coastguard Worker     MARISA_DEBUG_IF(length > MARISA_UINT32_MAX, MARISA_SIZE_ERROR);
46*ab8db090SAndroid Build Coastguard Worker     key_.set_str(ptr, length);
47*ab8db090SAndroid Build Coastguard Worker   }
set_key(std::size_t id)48*ab8db090SAndroid Build Coastguard Worker   void set_key(std::size_t id) {
49*ab8db090SAndroid Build Coastguard Worker     MARISA_DEBUG_IF(id > MARISA_UINT32_MAX, MARISA_SIZE_ERROR);
50*ab8db090SAndroid Build Coastguard Worker     key_.set_id(id);
51*ab8db090SAndroid Build Coastguard Worker   }
52*ab8db090SAndroid Build Coastguard Worker 
has_state()53*ab8db090SAndroid Build Coastguard Worker   bool has_state() const {
54*ab8db090SAndroid Build Coastguard Worker     return state_.get() != NULL;
55*ab8db090SAndroid Build Coastguard Worker   }
56*ab8db090SAndroid Build Coastguard Worker   void init_state();
57*ab8db090SAndroid Build Coastguard Worker 
58*ab8db090SAndroid Build Coastguard Worker   void clear();
59*ab8db090SAndroid Build Coastguard Worker   void swap(Agent &rhs);
60*ab8db090SAndroid Build Coastguard Worker 
61*ab8db090SAndroid Build Coastguard Worker  private:
62*ab8db090SAndroid Build Coastguard Worker   Query query_;
63*ab8db090SAndroid Build Coastguard Worker   Key key_;
64*ab8db090SAndroid Build Coastguard Worker   scoped_ptr<grimoire::trie::State> state_;
65*ab8db090SAndroid Build Coastguard Worker 
66*ab8db090SAndroid Build Coastguard Worker   // Disallows copy and assignment.
67*ab8db090SAndroid Build Coastguard Worker   Agent(const Agent &);
68*ab8db090SAndroid Build Coastguard Worker   Agent &operator=(const Agent &);
69*ab8db090SAndroid Build Coastguard Worker };
70*ab8db090SAndroid Build Coastguard Worker 
71*ab8db090SAndroid Build Coastguard Worker }  // namespace marisa
72*ab8db090SAndroid Build Coastguard Worker 
73*ab8db090SAndroid Build Coastguard Worker #endif  // MARISA_AGENT_H_
74