#ifndef EVALUATOR_H_ #define EVALUATOR_H_ #include #include "value.h" class evaluator { public: evaluator(const char * display_name); virtual value * evaluate( value * l, value * r); virtual value * evaluate( float_value * l, value * r); virtual value * evaluate( value * r, float_value * l); virtual value * evaluate( float_value * l, float_value * r) = 0; virtual std::string to_string(); protected: value * default_evaluate( value * l, value * r); private: value_type get_value_type(value * val); const char * m_display_name; }; class add_evaluator : public evaluator{ public: add_evaluator(); value * evaluate( float_value * l, float_value * r); }; class mul_evaluator : public evaluator { public: mul_evaluator(); value * evaluate( float_value * l, float_value * r); }; class abs_evaluator : public evaluator { public: abs_evaluator(); value * evaluate( float_value * l, float_value * r); }; class sub_evaluator : public evaluator { public: sub_evaluator(); value * evaluate( float_value * l, float_value * r); }; class sat_evaluator : public evaluator { public: sat_evaluator(); value * evaluate( float_value * l, float_value * r); }; class rcp_evaluator : public evaluator { public: rcp_evaluator(); value * evaluate( float_value * l, float_value * r); }; class min_evaluator : public evaluator { public: min_evaluator(); value * evaluate( float_value * l, float_value * r); }; class max_evaluator : public evaluator { public: max_evaluator(); value * evaluate( float_value * l, float_value * r); }; #endif //EVALUATOR_H_