00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _SeExprSpecType_h_
00011 #define _SeExprSpecType_h_
00012
00013 #include <SeVec3d.h>
00014 #include <vector>
00015 #include <sstream>
00016 #include <SeCurve.h>
00017 #include <cstdio>
00018
00020 struct SeExprSpecNode
00021 {
00022 int startPos,endPos;
00023
00024
00025 SeExprSpecNode(int startPos,int endPos)
00026 :startPos(startPos),endPos(endPos)
00027 {}
00028
00029 virtual ~SeExprSpecNode()
00030 {}
00031 };
00032
00033 struct SeExprSpecScalarNode:public SeExprSpecNode
00034 {
00035 double v;
00036
00037 SeExprSpecScalarNode(int startPos,int endPos,double scalar)
00038 :SeExprSpecNode(startPos,endPos),v(scalar)
00039 {}
00040 };
00041
00042 struct SeExprSpecVectorNode:public SeExprSpecNode
00043 {
00044 SeVec3d v;
00045 SeExprSpecVectorNode(int startPos,int endPos,SeExprSpecNode* x,SeExprSpecNode* y,SeExprSpecNode* z)
00046 :SeExprSpecNode(startPos,endPos)
00047 {
00048 v=SeVec3d(static_cast<SeExprSpecScalarNode*>(x)->v,static_cast<SeExprSpecScalarNode*>(y)->v,static_cast<SeExprSpecScalarNode*>(z)->v);
00049 }
00050
00051 };
00052
00053 struct SeExprSpecListNode:public SeExprSpecNode
00054 {
00055 std::vector<SeExprSpecNode*> nodes;
00056 SeExprSpecListNode(int startPos,int endPos)
00057 :SeExprSpecNode(startPos,endPos)
00058 {}
00059
00060 void add(SeExprSpecNode* node){
00061 startPos=std::min(node->startPos,startPos);
00062 endPos=std::max(node->endPos,endPos);
00063 nodes.push_back(node);
00064 }
00065 };
00066
00067 struct SeExprSpecStringNode:public SeExprSpecNode
00068 {
00069 std::string v;
00070 SeExprSpecStringNode(int startPos,int endPos,const char* s)
00071 :SeExprSpecNode(startPos,endPos),v(s)
00072 {}
00073 };
00074
00075 struct SeExprSpecCurveNode:public SeExprSpecNode
00076 {
00077 SeExprSpecNode* args;
00078 SeExprSpecCurveNode(SeExprSpecNode* args)
00079 :SeExprSpecNode(args->startPos,args->endPos),args(args)
00080 {}
00081 };
00082
00083 struct SeExprSpecCCurveNode:public SeExprSpecNode
00084 {
00085 SeExprSpecNode* args;
00086 SeExprSpecCCurveNode(SeExprSpecNode* args)
00087 :SeExprSpecNode(args->startPos,args->endPos),args(args)
00088 {}
00089 };
00090
00091 struct SeExprSpecAnimCurveNode:public SeExprSpecNode
00092 {
00093 SeExprSpecNode* args;
00094 SeExprSpecAnimCurveNode(SeExprSpecNode* args)
00095 :SeExprSpecNode(args->startPos,args->endPos),args(args)
00096 {}
00097 };
00098
00099
00100
00101
00102
00103
00104 #endif
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114