ABC_CoordPairsList() { pairs_list.push_back(new CP_Array); ints_list.push_back(new lem::UFString(L" ")); ints2index.insert(std::make_pair(UFString(L" "), 0)); return; }
int Register(const CP_Array &pairs) { if (pairs.empty()) return 0; lem::UFString ints; for (auto pair : pairs) { ints += lem::format_str(L" %d:%d", pair.GetCoord().GetIndex(), pair.GetState()); } ints += L' '; std::map< lem::UFString, int >::const_iterator it = ints2index.find(ints); if (it == ints2index.end()) { const int index = CastSizeToInt(ints_list.size()); ints_list.push_back(new UFString(ints)); pairs_list.push_back(new CP_Array(pairs)); ints2index.insert(std::make_pair(ints, index)); return index; } else { return it->second; } }
bool TreeMatchingExperience::GetMatchedFragmentAt( const LexerTextPos * token, lem::PtrCollect<SynPatternResult> & results, bool * matched ) const { LEM_CHECKIT_Z( token!=NULL ); FRAGMENT2ITEM::const_iterator it = fragment2item.find(token); if( it==fragment2item.end() ) return false; else { for( lem::Container::size_type i=0; i<it->second->results.size(); ++i ) results.push_back( it->second->results[i]->Copy1(NULL) ); *matched = it->second->success; return true; } }
void SG_DeclensionTable::GenerateForms( const Lexem &entry_name, lem::MCollect<Lexem> & res, lem::PtrCollect<CP_Array> & form_dims, const SynGram &sg, const SG_DeclensionAutomat &dsa ) const { res.reserve(form.size()); for( lem::Container::size_type i=0; i<form.size(); i++ ) { UCString frm( dsa.ProduceForm( entry_name, GetClass(), *form[i], sg ) ); res.push_back( frm); form_dims.push_back( new CP_Array( form[i]->GetDim() ) ); } return; }