00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef FSF_TYPE_NODE_H
00030 #define FSF_TYPE_NODE_H
00031
00032 #include "FsfNode.h"
00033
00034 namespace fsf {
00035
00039 class CTypeNodeBase : public CNode {
00040 public:
00041
00043
00044
00045 CTypeNodeBase() : CNode() {}
00047 CTypeNodeBase(CNode *pParent, Time tTime=0)
00048 : CNode(pParent,tTime) {}
00050 CTypeNodeBase(const std::string &strName,CNode *pParent=NULL, Time tTime=0)
00051 : CNode(strName,pParent,tTime) {}
00053 CTypeNodeBase(const CTypeNodeBase& rhs)
00054 : CNode(rhs) {}
00056 virtual CNode *clone() const { return new CTypeNodeBase(*this); }
00058
00060
00061
00062 CTypeNodeBase& operator=(const CTypeNodeBase& rhs);
00064
00066
00067
00068 virtual void getTypeID(std::string &str) const { str.assign("FSF_TYPE_NODE_BASE"); }
00069
00070 };
00071
00076 template <typename Type> class CTypeNode : public CTypeNodeBase {
00077 private:
00078 Type m_tData;
00079 public:
00081
00082
00083 CTypeNode() : CTypeNodeBase() {}
00085 CTypeNode(CNode *pParent, Time tTime=0)
00086 : CTypeNodeBase(pParent,tTime) {}
00088 CTypeNode(const std::string &strName,CNode *pParent=NULL, Time tTime=0)
00089 : CTypeNodeBase(strName,pParent,tTime) {}
00091 CTypeNode(const Type &val, const std::string &strName, CNode *pParent=NULL, Time tTime=0)
00092 : CTypeNodeBase(strName,pParent,tTime), m_tData(val) {}
00094 CTypeNode(const CTypeNode& rhs)
00095 : CTypeNodeBase(rhs), m_tData(rhs.m_tData) {}
00097 virtual CNode *clone() const { return new CTypeNode<Type>(*this); }
00099
00101
00102
00103 virtual void getTypeID(std::string &str) const { str.assign("FSF_TYPE_NODE"); }
00105 void getData(Type &val) const { val=m_tData; }
00107 const Type& getData() const { return m_tData; }
00109
00111
00112
00113 CTypeNode& operator=(const CTypeNode& rhs);
00115 void setData(const Type &val) { m_tData=val; }
00117 };
00118
00122
00123
00126 typedef CTypeNode<long int> Int32Node;
00128 template<> inline void Int32Node::getTypeID(std::string &str) const { str.assign("FSF_INT32_NODE"); }
00129
00132 typedef CTypeNode<long long int> Int64Node;
00134 template<> inline void Int64Node::getTypeID(std::string &str) const { str.assign("FSF_INT64_NODE"); }
00135
00138 typedef CTypeNode<float> Float32Node;
00140 template<> inline void Float32Node::getTypeID(std::string &str) const { str.assign("FSF_FLOAT32_NODE"); }
00141
00144 typedef CTypeNode<double> Float64Node;
00146 template<> inline void Float64Node::getTypeID(std::string &str) const { str.assign("FSF_FLOAT64_NODE"); }
00147
00150 typedef CTypeNode<bool> BoolNode;
00152 template<> inline void BoolNode::getTypeID(std::string &str) const { str.assign("FSF_BOOL_NODE"); }
00153
00156 typedef CTypeNode<std::string> StringNode;
00158 template<> inline void StringNode::getTypeID(std::string &str) const { str.assign("FSF_STRING_NODE"); }
00159
00160 }
00161
00162 #endif // FSF_TYPE_NODE_H
00163