#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; }