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