Program Listing for File evaluate.hpp

Return to documentation for file (include/eat/framework/evaluate.hpp)

#pragma once
#include "process.hpp"

namespace eat::framework {

Graph flatten(const Graph &g);

void validate(const Graph &g);

class ExecStep {
 public:
  virtual ~ExecStep() {}

  virtual void run() = 0;

  virtual std::string description() = 0;
};
using ExecStepPtr = std::shared_ptr<ExecStep>;

class Plan {
 public:
  Plan(Graph graph, std::vector<ExecStepPtr> steps) : graph_(std::move(graph)), steps_(std::move(steps)) {}

  const Graph &graph() const { return graph_; }

  const std::vector<ExecStepPtr> &steps() const { return steps_; }

  void run() {
    for (auto &step : steps_) step->run();
  }

 private:
  Graph graph_;
  std::vector<ExecStepPtr> steps_;
};

Plan plan(const Graph &g);

void evaluate(const Graph &g);

void run_with_progress(const Plan &p);

}  // namespace eat::framework