Skip to content
Snippets Groups Projects
TransitionSet.cpp 1.05 KiB
Newer Older
#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;
}