Skip to content
Snippets Groups Projects
TransitionSet.cpp 1.05 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "TransitionSet.hpp"
    
    TransitionSet::TransitionSet(const std::string & filename)
    {
      FILE * file = std::fopen(filename.c_str(), "r");
    
      if (!file)
        util::myThrow(fmt::format("cannot open file '{}'", filename));
    
    
      char readBuffer[1024];
    
      while (!std::feof(file))
      {
        if (readBuffer != std::fgets(readBuffer, 1024, file))
          break;
    
        std::string transitionName = readBuffer;
        if (transitionName.back() == '\n')
          transitionName.pop_back();
    
        transitions.emplace_back(transitionName);
      }
    
      std::fclose(file);
    }
    
    
    std::vector<std::pair<Transition &, int>> TransitionSet::getAppliableTransitionsCosts(const Config & c)
    {
      using Pair = std::pair<Transition &, int>;
      std::vector<Pair> appliableTransitions;
    
      for (auto & transition : transitions)
        if (transition.appliable(c))
          appliableTransitions.emplace_back(transition, transition.getCost(c));
    
      std::sort(appliableTransitions.begin(), appliableTransitions.end(), 
      [](const Pair & a, const Pair & b)
      {
        return a.second < b.second;
      });
    
      return appliableTransitions;
    }