ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/selection/SelectionEvaluator.hpp
(Generate patch)

Comparing trunk/OOPSE-3.0/src/selection/SelectionEvaluator.hpp (file contents):
Revision 1962 by tim, Tue Feb 1 22:49:23 2005 UTC vs.
Revision 1972 by tim, Fri Feb 4 22:39:26 2005 UTC

# Line 49 | Line 49
49   #include "brains/SimInfo.hpp"
50   #include "selection/Token.hpp"
51   #include "selection/SelectionCompiler.hpp"
52 + #include "selection/NameFinder.hpp"
53   #include "utils/BitSet.hpp"
54 <
54 > #include "primitives/StuntDouble.hpp"
55   namespace oopse {
56  
56 class Context {
57    std::string filename;
58    std::tring script;
59    std::vector<int> linenumbers;
60    std::vector<int> lineIndices;
61    std::vector<std::vector<Token> > aatoken;
62    int pc;
63 }
57  
58 + //class Context {
59 + //    public:
60 + //        
61 + //        void clear() {
62 + //            linenumbers.clear();
63 + //            lineIndices.clear();
64 + //            aatoken.clear();
65 + //        }
66 + //        
67 + //        std::string filename;
68 + //        std::string script;
69 + //        std::vector<int> linenumbers;
70 + //        std::vector<int> lineIndices;
71 + //        std::vector<std::vector<Token> > aatoken;
72 + //        int pc;
73 + //};
74 +
75 +
76   /**
77   * @class SelectionEvaluator SelectionEvaluator.hpp "selection/SelectionEvaluator"
78   * @brief Evalute the tokens compiled by SelectionCompiler and return a BitSet
# Line 69 | Line 80 | class SelectionEvaluator{
80   class SelectionEvaluator{
81      public:
82  
83 <        SelectionEvaluator(SimInfo* info, const std::string& script);
83 >        SelectionEvaluator(SimInfo* info);
84  
85  
86 +        bool loadScriptString(const std::string& script);
87 +        bool loadScriptFile(const std::string& filename);
88 +        
89          BitSet evaluate();
90          
91 <        BitSet evaluate(int frameNo);
91 >        //BitSet evaluate(Snapshot* snapshot);
92  
93          /**
94 <         * Tests if the result from evaluation of script is static.
81 <         * @return true if the result keeps the same even the frame change, otherwise return false
94 >         * Tests if the result from evaluation of script is dynamic.
95           */        
96 <        bool isStatic();
96 >        bool isDynamic() {
97 >            return isDynamic_;
98 >        }
99  
100          bool hadRuntimeError() const{
101              return error;
# Line 98 | Line 113 | class SelectionEvaluator{
113          std::string getLine() {
114              int ichBegin = lineIndices[pc];
115              int ichEnd;
116 <            if ((ichEnd = script.find('\r', ichBegin)) == std::string:npos &&
117 <                (ichEnd = script.find('\n', ichBegin)) == std::string:npos) {
116 >            if ((ichEnd = script.find('\r', ichBegin)) == std::string::npos &&
117 >                (ichEnd = script.find('\n', ichBegin)) == std::string::npos) {
118                  ichEnd = script.size();
119              }            
120              return script.substr(ichBegin, ichEnd);
# Line 111 | Line 126 | class SelectionEvaluator{
126          
127          bool loadScript(const std::string& filename, const std::string& script);
128  
114        bool loadScriptString(const std::string& script);
115
129          bool loadScriptFileInternal(const std::string& filename);
130  
131 +
132          void clearDefinitionsAndLoadPredefined();
133          
134          void define();
135 <
136 <        void predefine();
135 >        void select(BitSet& bs);
136 >        void predefine(const std::string& script);
137  
138 <        void instructionDispatchLoop();
138 >        void instructionDispatchLoop(BitSet& bs);
139  
140 <        withinInstruction(Token instruction, BitSet , BitSet);
140 >        void withinInstruction(const Token& instruction, BitSet& bs);
141 >        
142 >        BitSet comparatorInstruction(const Token& instruction);
143 >        void compareProperty(StuntDouble* sd, BitSet& bs, int property, int comparator, float comparisonValue);
144 >        BitSet nameInstruction(const std::string& name);
145  
146 <        BitSet expression(std::vector<Token>& tokens, int pc);
146 >        BitSet expression(const std::vector<Token>& tokens, int pc);
147  
148 +        BitSet lookupValue(const std::string& variable);
149 +        
150 +        void evalError(const std::string& message) {
151 +            std::cerr << "SelectionEvaulator Error: " << message <<  std::endl;
152 +        }
153 +
154 +        void unrecognizedCommand(const Token& token) {
155 +            evalError("unrecognized command:" + boost::any_cast<std::string>(token.value));
156 +        }        
157 +
158 +        void unrecognizedExpression() {
159 +            evalError("unrecognized expression");
160 +        }
161 +
162 +        void unrecognizedAtomProperty(int property){
163 +            evalError("unrecognized atom property");
164 +        }
165 +
166 +        void unrecognizedIdentifier(const std::string& identifier) {
167 +            evalError("unrecognized identifier:" + identifier);
168 +        }    
169 +
170 +        bool containDynamicToken(const std::vector<Token>& tokens);
171 +        
172          SelectionCompiler compiler;
173  
174 <        const static int scriptLevelMax = 10;
175 <        int scriptLevel;
174 >        //const static int scriptLevelMax = 10;
175 >        //int scriptLevel;
176  
177 <        Context stack[scriptLevelMax];
177 >        //Context stack[scriptLevelMax];
178  
179          std::string filename;
180          std::string script;
# Line 141 | Line 183 | class SelectionEvaluator{
183          std::vector<std::vector<Token> > aatoken;
184          int pc; // program counter
185  
186 <        boolean error;
186 >        bool error;
187          std::string errorMessage;
188  
189          std::vector<Token> statement;
190          int statementLength;
191  
192 <        SimInfo* info_;
192 >        SimInfo* info;
193 >        NameFinder finder;
194 >        int nStuntDouble;   //natoms + nrigidbodies
195 >        std::map<std::string, boost::any > variables;
196  
197 <        std::map<std::string, std::vector<Token> > variables_;
198 <        std::string script_;
199 <
155 <        Hashtable variables = new Hashtable();        
197 >        bool isDynamic_;
198 >        bool isLoaded_;
199 >        
200   };
201  
202   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines