X3DField.h

Go to the documentation of this file.
00001 #ifndef X3DFIELD_H
00002 #define X3DFIELD_H
00003 
00004 #include "SFString.h"
00005 #include <typeinfo>
00006 
00007 namespace X3DTK {
00008 
00009 class X3DField
00010 {
00011   template<class T, class V> friend class MemberFunctor;
00012   template<class V> friend class FieldLoader;
00013   template<class V> friend class FieldWriter;
00014   friend bool operator== (const X3DField &f1, const X3DField &f2);
00015   friend bool operator!= (const X3DField &f1, const X3DField &f2);
00016   
00017 public:
00018   inline const std::type_info &getType() const {return _type;};
00019   inline unsigned char *getData() const {return _data;};
00020     
00021 private:
00022   X3DField(const std::type_info &type, unsigned char *data);
00023   
00024   const std::type_info &_type;
00025   unsigned char *_data;
00026 
00027 public:
00028   static const X3DField null;  
00029 };
00030 
00031 inline bool operator== (const X3DField &f1, const X3DField &f2)
00032 {
00033   return ((f1._type == f2._type) && (f1._data == f2._data));
00034 }
00035 
00036 inline bool operator!= (const X3DField &f1, const X3DField &f2)
00037 {
00038   return ((f1._type != f2._type) || (f1._data != f2._data));
00039 }
00040 
00041 class X3DFieldLoader
00042 {
00043 public:
00044   virtual void load(X3DField &field, const SFString &value) = 0;
00045 };
00046 
00047 template<class V>
00048 class FieldLoader : public X3DFieldLoader
00049 {
00050 public:
00051   void load(X3DField &field, const SFString &value);
00052 };
00053 
00054 
00055 class X3DFieldWriter
00056 {
00057 public:
00058   virtual SFString write(const X3DField &field) = 0;
00059   virtual void writeToFile(SFString &output, const SFString &name, const X3DField &field, const SFString &init) = 0;
00060 };
00061 
00062 template<class V>
00063 class FieldWriter : public X3DFieldWriter
00064 {
00065 public:
00066   SFString write(const X3DField &field);
00067   void writeToFile(SFString &output, const SFString &name, const X3DField &field, const SFString &init);
00068   void write(SFString &output, const V &value);
00069 };
00070 
00071 
00072 template<>
00073 class FieldLoader<bool> : public X3DFieldLoader
00074 {
00075 public:
00076   void load(X3DField &field, const SFString &value);
00077 };
00078 
00079 template<>
00080 class FieldLoader<int> : public X3DFieldLoader
00081 {
00082 public:
00083   void load(X3DField &field, const SFString &value);
00084 };
00085 
00086 template<>
00087 class FieldLoader<float> : public X3DFieldLoader
00088 {
00089 public:
00090   void load(X3DField &field, const SFString &value);
00091 };
00092 
00093 template<>
00094 class FieldWriter<bool> : public X3DFieldWriter
00095 {
00096 public:
00097   SFString write(const X3DField &field);
00098   void writeToFile(SFString &output, const SFString &name, const X3DField &field, const SFString &init);
00099   void write(SFString &output, const bool &value);
00100 };
00101 
00102 template<>
00103 class FieldWriter<int> : public X3DFieldWriter
00104 {
00105 public:
00106   SFString write(const X3DField &field);
00107   void writeToFile(SFString &output, const SFString &name, const X3DField &field, const SFString &init);
00108   void write(SFString &output, const int &value);
00109 };
00110 
00111 template<>
00112 class FieldWriter<float> : public X3DFieldWriter
00113 {
00114 public:
00115   SFString write(const X3DField &field);
00116   void writeToFile(SFString &output, const SFString &name, const X3DField &field, const SFString &init);
00117   void write(SFString &output, const float &value);
00118 };
00119 
00120 }
00121 
00122 #include "X3DField.inl"
00123 
00124 #endif

Generated on Mon Jul 12 09:40:01 2004 for X3DToolKit by doxygen 1.3.6