MCPcopy Create free account
hub / github.com/Kitware/VTK / DisambiguateOperators

Method DisambiguateOperators

Common/Misc/vtkFunctionParser.cxx:156–395  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

154
155//------------------------------------------------------------------------------
156int vtkFunctionParser::DisambiguateOperators()
157{
158 unsigned char* tempStack = new unsigned char[this->ByteCodeSize];
159 int i;
160 int tempStackPtr = -1;
161
162 // using 0 for scalars and 1 for vectors
163 for (i = 0; i < this->ByteCodeSize; i++)
164 {
165 switch (this->ByteCode[i])
166 {
167 case VTK_PARSER_IMMEDIATE:
168 tempStackPtr++;
169 tempStack[tempStackPtr] = 0;
170 break;
171 case VTK_PARSER_UNARY_MINUS:
172 if (tempStack[tempStackPtr] != 0)
173 {
174 this->ByteCode[i] = VTK_PARSER_VECTOR_UNARY_MINUS;
175 }
176 break;
177 case VTK_PARSER_UNARY_PLUS:
178 if (tempStack[tempStackPtr] != 0)
179 {
180 this->ByteCode[i] = VTK_PARSER_VECTOR_UNARY_PLUS;
181 }
182 break;
183 case VTK_PARSER_ADD:
184 if (tempStack[tempStackPtr] != 0 && tempStack[tempStackPtr - 1] != 0)
185 {
186 this->ByteCode[i] = VTK_PARSER_VECTOR_ADD;
187 }
188 else if ((tempStack[tempStackPtr] == 0 && tempStack[tempStackPtr - 1] != 0) ||
189 (tempStack[tempStackPtr] != 0 && tempStack[tempStackPtr - 1] == 0))
190 {
191 delete[] tempStack;
192 vtkErrorMacro("addition expects either 2 vectors or 2 scalars");
193 return 0;
194 }
195 tempStackPtr--;
196 break;
197 case VTK_PARSER_SUBTRACT:
198 if (tempStack[tempStackPtr] != 0 && tempStack[tempStackPtr - 1] != 0)
199 {
200 this->ByteCode[i] = VTK_PARSER_VECTOR_SUBTRACT;
201 }
202 else if ((tempStack[tempStackPtr] == 0 && tempStack[tempStackPtr - 1] != 0) ||
203 (tempStack[tempStackPtr] != 0 && tempStack[tempStackPtr - 1] == 0))
204 {
205 delete[] tempStack;
206 vtkErrorMacro("subtraction expects either 2 vectors or 2 scalars");
207 return 0;
208 }
209 tempStackPtr--;
210 break;
211 case VTK_PARSER_MULTIPLY:
212 if (tempStack[tempStackPtr - 1] == 0 && tempStack[tempStackPtr] == 1)
213 {

Callers 1

ParseMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected