1*ab8db090SAndroid Build Coastguard Worker #include <new> 2*ab8db090SAndroid Build Coastguard Worker 3*ab8db090SAndroid Build Coastguard Worker #include "marisa/agent.h" 4*ab8db090SAndroid Build Coastguard Worker #include "marisa/grimoire/trie.h" 5*ab8db090SAndroid Build Coastguard Worker 6*ab8db090SAndroid Build Coastguard Worker namespace marisa { 7*ab8db090SAndroid Build Coastguard Worker Agent()8*ab8db090SAndroid Build Coastguard WorkerAgent::Agent() : query_(), key_(), state_() {} 9*ab8db090SAndroid Build Coastguard Worker ~Agent()10*ab8db090SAndroid Build Coastguard WorkerAgent::~Agent() {} 11*ab8db090SAndroid Build Coastguard Worker set_query(const char * str)12*ab8db090SAndroid Build Coastguard Workervoid Agent::set_query(const char *str) { 13*ab8db090SAndroid Build Coastguard Worker MARISA_THROW_IF(str == NULL, MARISA_NULL_ERROR); 14*ab8db090SAndroid Build Coastguard Worker if (state_.get() != NULL) { 15*ab8db090SAndroid Build Coastguard Worker state_->reset(); 16*ab8db090SAndroid Build Coastguard Worker } 17*ab8db090SAndroid Build Coastguard Worker query_.set_str(str); 18*ab8db090SAndroid Build Coastguard Worker } 19*ab8db090SAndroid Build Coastguard Worker set_query(const char * ptr,std::size_t length)20*ab8db090SAndroid Build Coastguard Workervoid Agent::set_query(const char *ptr, std::size_t length) { 21*ab8db090SAndroid Build Coastguard Worker MARISA_THROW_IF((ptr == NULL) && (length != 0), MARISA_NULL_ERROR); 22*ab8db090SAndroid Build Coastguard Worker if (state_.get() != NULL) { 23*ab8db090SAndroid Build Coastguard Worker state_->reset(); 24*ab8db090SAndroid Build Coastguard Worker } 25*ab8db090SAndroid Build Coastguard Worker query_.set_str(ptr, length); 26*ab8db090SAndroid Build Coastguard Worker } 27*ab8db090SAndroid Build Coastguard Worker set_query(std::size_t key_id)28*ab8db090SAndroid Build Coastguard Workervoid Agent::set_query(std::size_t key_id) { 29*ab8db090SAndroid Build Coastguard Worker if (state_.get() != NULL) { 30*ab8db090SAndroid Build Coastguard Worker state_->reset(); 31*ab8db090SAndroid Build Coastguard Worker } 32*ab8db090SAndroid Build Coastguard Worker query_.set_id(key_id); 33*ab8db090SAndroid Build Coastguard Worker } 34*ab8db090SAndroid Build Coastguard Worker init_state()35*ab8db090SAndroid Build Coastguard Workervoid Agent::init_state() { 36*ab8db090SAndroid Build Coastguard Worker MARISA_THROW_IF(state_.get() != NULL, MARISA_STATE_ERROR); 37*ab8db090SAndroid Build Coastguard Worker state_.reset(new (std::nothrow) grimoire::State); 38*ab8db090SAndroid Build Coastguard Worker MARISA_THROW_IF(state_.get() == NULL, MARISA_MEMORY_ERROR); 39*ab8db090SAndroid Build Coastguard Worker } 40*ab8db090SAndroid Build Coastguard Worker clear()41*ab8db090SAndroid Build Coastguard Workervoid Agent::clear() { 42*ab8db090SAndroid Build Coastguard Worker Agent().swap(*this); 43*ab8db090SAndroid Build Coastguard Worker } 44*ab8db090SAndroid Build Coastguard Worker swap(Agent & rhs)45*ab8db090SAndroid Build Coastguard Workervoid Agent::swap(Agent &rhs) { 46*ab8db090SAndroid Build Coastguard Worker query_.swap(rhs.query_); 47*ab8db090SAndroid Build Coastguard Worker key_.swap(rhs.key_); 48*ab8db090SAndroid Build Coastguard Worker state_.swap(rhs.state_); 49*ab8db090SAndroid Build Coastguard Worker } 50*ab8db090SAndroid Build Coastguard Worker 51*ab8db090SAndroid Build Coastguard Worker } // namespace marisa 52