PH Logo
Logo intepreter modeled after UCB Logo.
/Users/paul/Documents/phlogo/core/Operator.h
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
 All Classes Functions