double ProbComp::compute_level_probability(std::vector<std::pair<int,int> >similarities,int model_length) { std::cout<<"Model has: "<<compute_levels(this->get_model_nodes())<<" levels!"<<std::endl; return 1; /*std::cout<<"==============================================================================="<<std::endl; this->setup_probabilities(model_length); std::cout<<"Computing level probabilities!"<<std::endl; std::cout<<"There are :"<<similarities.size()<<" similarities between the model and target!"<<std::endl; std::cout<<"Model graph length :"<<model_length<<std::endl; double prob=0; for(int i=0;i<similarities.size();i++) { int level=compute_level(this->get_model_nodes(),similarities[i].first); std::cout<<"The level is :"<<level<<std::endl; prob+=this->level_probs[level]; } std::cout<<"The probabilities are :"<<prob<<std::endl; std::cout<<"==============================================================================="<<std::endl; /*double single_prob=1/(double)model_length; double prob=0; for(int i=0;i<similarities.size();i++) { int level=compute_level(this->get_model_nodes(),similarities[i].first); double frac=(double)model_length/(level+1); prob+=(double)single_prob*frac; std::cout<<"Frac :"<<frac<<std::endl; std::cout<<"The level is :"<<level<<std::endl; } for(int i=0;i<similarities.size();i++) { std::cout<<"Model :"<<similarities[i].first<<" Target :"<<similarities[i].second<<std::endl; } std::cout<<"The probabilities are :"<<prob<<std::endl; std::cout<<"==============================================================================="<<std::endl;*/ return 1; }
unsigned long compute_levels (TypeInfo const& ti, unsigned long cur, LevelMap& map) { unsigned long ret = cur; if (map.find (ti) == map.end () || map[ti] < cur) map[ti] = cur; for (TypeInfo::BaseIterator i = ti.begin_base (); i != ti.end_base (); i++) { unsigned long t = compute_levels (i->type_info (), cur + 1, map); if (t > ret) ret = t; } return ret; }
void Dispatcher:: dispatch (SyntaxTree::NodePtr const& n) { LevelMap levels; unsigned long max = compute_levels (n->type_info (), 0, levels); //cerr << "starting dispatch process for " // << n->type_info ().type_id () << " with " // << max << " levels" << endl; for (unsigned long l = 0; l < max + 1; l++) { TypeInfoSet dispatched; for (LevelMap::const_iterator i = levels.begin (); i != levels.end (); i++) { if (i->second == l) { TraversalMap::const_iterator v = traversal_map_.find (i->first.type_id ()); if (v != traversal_map_.end () && !(v->second.suppressed)) { //cerr << "dispatching traverser for " // << n->type_info ().type_id () << " as " // << i->first.type_id () << endl; v->second.traverser->traverse (n); flatten_tree (i->first, dispatched); } } } // Remove traversed types from level map. for (TypeInfoSet::const_iterator i = dispatched.begin (); i != dispatched.end (); i++) { levels.erase (*i); } } }
void Dispatcher:: dispatch (SyntaxTree::Node* n) { LevelMap levels; unsigned long max = compute_levels (n->type_info (), 0, levels); for (unsigned long l = 0; l < max + 1; l++) { TypeInfoSet dispatched; for (LevelMap::const_iterator i = levels.begin (); i != levels.end (); i++) { if (i->second == l) { TraversalMap::const_iterator v = traversal_map_.find (i->first.type_id ()); if (v != traversal_map_.end ()) { v->second->traverse (n); flatten_tree (i->first, dispatched); } } } // Remove traversed types from level map. for (TypeInfoSet::const_iterator i = dispatched.begin (); i != dispatched.end (); i++) { levels.erase (*i); } } }