#ifndef EXPRESSION_NODE_H #define EXPRESSION_NODE_H #include #include class ExpressionNode : public SerializableNode { public: enum class Type : uint8_t { AllocationFailure = 0, Float = 1, Addition, SimplificationRoot }; // Expression virtual Type type() const = 0; virtual float approximate() = 0; void deepReduce() { for (int i = 0; i < numberOfChildren(); i++) { child(i)->deepReduce(); } shallowReduce(); } virtual bool shallowReduce() { for (int i = 0; i < numberOfChildren(); i++) { if (child(i)->isAllocationFailure()) { replaceWithAllocationFailure(); return true; } } return false; } // Allocation failure static TreeNode * FailedAllocationStaticNode(); TreeNode * failedAllocationStaticNode() override { return FailedAllocationStaticNode(); } // Hierarchy ExpressionNode * child(int i) { return static_cast(childTreeAtIndex(i)); } protected: void sortChildren(); }; #endif