xref: /aosp_15_r20/external/marisa-trie/lib/marisa/agent.cc (revision ab8db090fce404b23716c4c9194221ee27efe31c)
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 Worker Agent::Agent() : query_(), key_(), state_() {}
9*ab8db090SAndroid Build Coastguard Worker 
~Agent()10*ab8db090SAndroid Build Coastguard Worker Agent::~Agent() {}
11*ab8db090SAndroid Build Coastguard Worker 
set_query(const char * str)12*ab8db090SAndroid Build Coastguard Worker void 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 Worker void 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 Worker void 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 Worker void 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 Worker void 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 Worker void 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