#pragma once #include "../GraphLoop/graph_loops_func.h" #include "../GraphCall/graph_calls_func.h" #include #include #include struct LoopCheckResults { bool usesIO; bool hasImpureCalls; std::vector linesOfIO; LoopCheckResults() : usesIO(false), hasImpureCalls(false) { } LoopCheckResults(bool io, bool calls) : usesIO(io), hasImpureCalls(calls) { } }; class LoopChecker { std::vector &loopGraph; LoopCheckResults checkLoopForPurenessAndIO(const LoopGraph *loopNode, const std::map &allFuncs) const; LoopCheckResults updateLoopNode(LoopGraph *loop, const std::map &allFuncs); public: explicit LoopChecker(std::vector &graph) : loopGraph(graph) { } void updateLoopGraph(const std::map &allFuncs); };