File: VariableExpression.h

package info (click to toggle)
primrose 6%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster
  • size: 5,300 kB
  • ctags: 3,385
  • sloc: cpp: 27,318; php: 765; ansic: 636; objc: 272; sh: 136; makefile: 95; perl: 67
file content (180 lines) | stat: -rw-r--r-- 3,291 bytes parent folder | download | duplicates (18)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
 * Modification History 
 *
 * 2003-April-29   Jason Rohrer
 * Created.
 *
 * 2003-May-9   Jason Rohrer
 * Added support for replacing a variable.
 */
 

#ifndef VARIABLE_EXPRESSION_INCLUDED
#define VARIABLE_EXPRESSION_INCLUDED 
 
#include "Expression.h" 
#include "Variable.h" 



/**
 * Expression that contains a single variable.
 *
 * @author Jason Rohrer 
 */
class VariableExpression : public Expression { 
    
    public:
        
        /**
         * Constructs a variable expression.
         *
         * @param inVariable the variable.
         *   Must be destroyed by caller after this class is destroyed.
         */
        VariableExpression( Variable *inVariable );



        /**
         * Gets this expression's variable.
         *
         * @return the variable.
         *   Must not be destroyed by caller.
         */
        Variable *getVariable();


        
        /**
         * A static version of getID().
         */
        static long staticGetID();

        
        
        // implements the Expression interface
        virtual double evaluate();
        virtual long getID();
        virtual void print();
        virtual Expression *copy();

        virtual long getNumArguments();
        virtual Expression *getArgument( long inArgumentNumber );
        virtual void setArgument( long inArgumentNumber, 
            Expression *inArgument );
        virtual Expression *extractArgument( long inArgumentNumber );

        

        // overrides the default implementation
        virtual void replaceVariable( Variable *inTarget,
                                      Variable *inReplacement );

        
        
    protected:
        static long mID;

        Variable *mVariable;
    };



// static init
long VariableExpression::mID = 14;



inline VariableExpression::VariableExpression( Variable *inVariable ) 
    : mVariable( inVariable ) {
    
    }



inline Variable *VariableExpression::getVariable() {
    return mVariable;
    }



inline double VariableExpression::evaluate() {
    return mVariable->getValue();
    }



inline long VariableExpression::getID() {    
    return mID;
    }    



inline long VariableExpression::staticGetID() {
    return mID;
    }



inline void VariableExpression::print() {
    char *varName = mVariable->getName();
    
    printf( " %s ", varName );

    delete [] varName;
    }
            


inline Expression *VariableExpression::copy() {
    // don't copy our variable
    VariableExpression *copy =
        new VariableExpression( mVariable );
    
    return copy;
    }        



long VariableExpression::getNumArguments() {
    return 0;
    }   



inline Expression *VariableExpression::getArgument( 
    long inArgumentNumber ) {
    
    return NULL;
    }


    
inline void VariableExpression::setArgument( long inArgumentNumber, 
    Expression *inArgument ) {
    
    // do nothing
    return;
    }



inline Expression *VariableExpression::extractArgument( 
    long inArgumentNumber ) {
    
    return NULL;
    }



inline void VariableExpression::replaceVariable( Variable *inTarget,
                                                 Variable *inReplacement ) {
    if( mVariable == inTarget ) {
        mVariable = inReplacement;
        }
    }


    
#endif