diff --git a/modules/mol/base/src/query_state.cc b/modules/mol/base/src/query_state.cc index c81d3b437133264fd423aa484b32e1e2a0c6c3d5..5f4ef1295abc63c07943227848b3b46bf043ceca 100644 --- a/modules/mol/base/src/query_state.cc +++ b/modules/mol/base/src/query_state.cc @@ -151,9 +151,8 @@ boost::logic::tribool QueryState::EvalChain(const ChainImplPtr& c) { float float_value; switch (ss.sel_id) { case Prop::CNAME: - value = c->GetName(); - s_[*i] = cmp_string(ss.comp_op, - value,boost::get<StringOrRegexParam>(ss.param)); + s_[*i] = cmp_string(ss.comp_op, c->GetName(), + boost::get<StringOrRegexParam>(ss.param)); continue; default: if (ss.sel_id>=Prop::CUSTOM) { @@ -187,8 +186,7 @@ boost::logic::tribool QueryState::EvalResidue(const ResidueImplPtr& r) { Real float_value; switch (ss.sel_id) { case Prop::RNAME: - str_value = r->GetKey(); - s_[*i] = cmp_string(ss.comp_op,str_value, + s_[*i] = cmp_string(ss.comp_op,r->GetName(), boost::get<StringOrRegexParam>(ss.param)); continue; case Prop::RNUM: @@ -234,7 +232,7 @@ boost::logic::tribool QueryState::EvalResidue(const ResidueImplPtr& r) { } s_[*i]=ss.comp_op==COP_EQ ? b : !b; } else { - str_value= String(1, (char)r->GetSecStructure()); + str_value = String(1, (char)r->GetSecStructure()); s_[*i]=cmp_string(ss.comp_op,str_value, boost::get<StringOrRegexParam>(ss.param)); } @@ -265,19 +263,18 @@ boost::logic::tribool QueryState::EvalResidue(const ResidueImplPtr& r) { boost::logic::tribool QueryState::EvalStack(Prop::Level level) { const SelStack& stack = q_.sel_stacks_[(int)level]; SelStack::const_reverse_iterator i = stack.rbegin(); - std::vector<boost::logic::tribool> value_stack; - + value_stack_.clear(); while (i!=stack.rend()) { const SelItem& si = *i; if (si.type==VALUE) { - value_stack.push_back(s_[si.value]); + value_stack_.push_back(s_[si.value]); ++i; continue; } else { - boost::logic::tribool lhs = value_stack.back(); - value_stack.pop_back(); - boost::logic::tribool rhs = value_stack.back(); - value_stack.pop_back(); + boost::logic::tribool lhs = value_stack_.back(); + value_stack_.pop_back(); + boost::logic::tribool rhs = value_stack_.back(); + value_stack_.pop_back(); LogicOP lop = (LogicOP)si.value; boost::logic::tribool result; switch(lop) { @@ -288,12 +285,12 @@ boost::logic::tribool QueryState::EvalStack(Prop::Level level) { result = lhs || rhs; break; } - value_stack.push_back(result); + value_stack_.push_back(result); ++i; } } - assert(value_stack.size()==1); - return value_stack.back(); + assert(value_stack_.size()==1); + return value_stack_.back(); } namespace { @@ -302,6 +299,7 @@ QueryImpl dummy_query_impl; } QueryState::QueryState() : s_(), q_(dummy_query_impl) { + value_stack_.reserve(20); } boost::logic::tribool QueryState::EvalAtom(const AtomImplPtr& a) { @@ -316,8 +314,7 @@ boost::logic::tribool QueryState::EvalAtom(const AtomImplPtr& a) { int int_value; switch (ss.sel_id) { case Prop::ANAME: - str_value = a->Name(); - s_[*i] = cmp_string(ss.comp_op,str_value, + s_[*i] = cmp_string(ss.comp_op,a->GetName(), boost::get<StringOrRegexParam>(ss.param)); break; case Prop::AINDEX: @@ -345,8 +342,7 @@ boost::logic::tribool QueryState::EvalAtom(const AtomImplPtr& a) { boost::get<float>(ss.param)); break; case Prop::ELE: - str_value = a->GetElement(); - s_[*i] = cmp_string(ss.comp_op,str_value, + s_[*i] = cmp_string(ss.comp_op,a->GetElement(), boost::get<StringOrRegexParam>(ss.param)); break; case Prop::ABFAC: diff --git a/modules/mol/base/src/query_state.hh b/modules/mol/base/src/query_state.hh index ad6feffd277af599affe3f4f4745610e5991bbf9..f2d8edfdd39762be70100a58751473c32cb4ccfb 100644 --- a/modules/mol/base/src/query_state.hh +++ b/modules/mol/base/src/query_state.hh @@ -82,6 +82,7 @@ private: bool do_within(const geom::Vec3& pos, const impl::WithinParam& p, impl::CompOP op); std::vector<boost::logic::tribool> s_; + std::vector<boost::logic::tribool> value_stack_; boost::shared_ptr<LazilyBoundData> r_; const impl::QueryImpl& q_; };