#pragma once #include #include #include #include #include class WorkflowEvaluationError { public: enum MessageType : int16_t { Error, Warning, }; enum PinType : int16_t { NoPin, InputPin, OutputPin, }; public: std::string Message; size_t NodeId; int PinId; PinType PinType; MessageType Type; public: static const char* FormatMessageType(enum MessageType messageType); static const char* FormatPinType(enum PinType pinType); std::string Format() const; }; class WorkflowEvaluationContext { private: struct RuntimeNode; struct RuntimeConnection; Workflow* mWorkflow; std::vector mRuntimeNodes; std::vector mRuntimeConnections; std::vector mErrors; std::vector mWarnings; public: WorkflowEvaluationContext(Workflow& workflow); BaseValue* GetConnectionValue(size_t id, bool constant); BaseValue* GetConnectionValue(const WorkflowNode::InputPin& inputPin); void SetConnectionValue(size_t id, std::unique_ptr value); void SetConnectionValue(const WorkflowNode::OutputPin& outputPin, std::unique_ptr value); void ReportError(std::string message, const WorkflowNode& node, int pinId, bool inputPin); void ReportError(std::string message, const WorkflowNode& node); void ReportWarning(std::string message, const WorkflowNode& node, int pinId, bool inputPin); void ReportWarning(std::string message, const WorkflowNode& node); /// Run until all possible paths have been evaluated. void Run(); };