Newer
Older
#include "TransitionSet.hpp"
TransitionSet::TransitionSet(const std::string & filename)
{
FILE * file = std::fopen(filename.c_str(), "r");
Franck Dary
committed
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;
}