|
PH Logo
Logo intepreter modeled after UCB Logo.
|
00001 /* 00002 * Operator.h 00003 * 00004 * Author: Paul Hamilton 00005 * Date: 14 Aug 2011 00006 * 00007 */ 00008 #ifndef _OPERATOR_H 00009 #define _OPERATOR_H 00010 00011 namespace phlogo { 00012 00013 class World; 00014 class Interpreter; 00015 class TokenStream; 00016 00017 class Operator { 00018 00019 public: 00020 Operator(World *world) : _world(world) {} 00021 00022 void doOp(Interpreter *itp, World *world, TokenStream *ts); 00023 00024 virtual void op(long n1, long n2) = 0; 00025 virtual void op(double n1, long n2) = 0; 00026 virtual void op(long n1, double n2) = 0; 00027 virtual void op(double n1, double n2) = 0; 00028 00029 protected: 00030 World *_world; 00031 00032 private: 00033 void doOp(Interpreter *itp, World *world, TokenStream *ts, long n1); 00034 void doOp(Interpreter *itp, World *world, TokenStream *ts, double n1); 00035 00036 }; 00037 00038 class Mul : public Operator { 00039 public: 00040 Mul(World *world) : Operator(world) {} 00041 00042 // Operator overrides 00043 virtual void op(long n1, long n2); 00044 virtual void op(double n1, long n2); 00045 virtual void op(long n1, double n2); 00046 virtual void op(double n1, double n2); 00047 }; 00048 00049 class Div : public Operator { 00050 public: 00051 Div(World *world) : Operator(world) {} 00052 00053 // Operator overrides 00054 virtual void op(long n1, long n2); 00055 virtual void op(double n1, long n2); 00056 virtual void op(long n1, double n2); 00057 virtual void op(double n1, double n2); 00058 }; 00059 00060 class Add : public Operator { 00061 public: 00062 Add(World *world) : Operator(world) {} 00063 00064 // Operator overrides 00065 virtual void op(long n1, long n2); 00066 virtual void op(double n1, long n2); 00067 virtual void op(long n1, double n2); 00068 virtual void op(double n1, double n2); 00069 }; 00070 00071 class Sub : public Operator { 00072 public: 00073 Sub(World *world) : Operator(world) {} 00074 00075 // Operator overrides 00076 virtual void op(long n1, long n2); 00077 virtual void op(double n1, long n2); 00078 virtual void op(long n1, double n2); 00079 virtual void op(double n1, double n2); 00080 }; 00081 00082 } 00083 00084 #endif // _OPERATOR_H
1.7.4