Пример #1
0
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;
}
Пример #2
0
    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;
    }
Пример #3
0
    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);
        }
      }
    }
Пример #4
0
  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);
      }
    }
  }