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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include <stdlib.h>
00040 #include <stdio.h>
00041
00042 #include "OSGConfig.h"
00043 #include <OSGLog.h>
00044
00045 OSG_BEGIN_NAMESPACE
00046
00047
00048
00049
00050 #ifndef WIN32
00051 template <class FieldTypeT, Int32 fieldNameSpace> inline
00052 const FieldType &SField<FieldTypeT, fieldNameSpace>::getClassType(void)
00053 {
00054 return _fieldType;
00055 }
00056 #endif
00057
00058
00059
00060
00061 template <class FieldTypeT, Int32 fieldNameSpace> inline
00062 SField<FieldTypeT, fieldNameSpace>::SField(void) :
00063 Inherited(),
00064 _value ()
00065 {
00066 }
00067
00068 template <class FieldTypeT, Int32 fieldNameSpace> inline
00069 SField<FieldTypeT, fieldNameSpace>::SField(const SField &obj) :
00070 Inherited(obj ),
00071 _value (obj._value)
00072 {
00073 }
00074
00075 template <class FieldTypeT, Int32 fieldNameSpace> inline
00076 SField<FieldTypeT, fieldNameSpace>::SField(ArgumentType value) :
00077 Inherited( ),
00078 _value (value)
00079 {
00080 }
00081
00082
00083
00084
00085 template <class FieldTypeT, Int32 fieldNameSpace> inline
00086 SField<FieldTypeT, fieldNameSpace>::~SField(void)
00087 {
00088 }
00089
00090
00091
00092
00093 template <class FieldTypeT, Int32 fieldNameSpace> inline
00094 typename SField<FieldTypeT, fieldNameSpace>::reference
00095 SField<FieldTypeT, fieldNameSpace>::getValue(void)
00096
00097 {
00098 return _value;
00099 }
00100
00101 template <class FieldTypeT, Int32 fieldNameSpace> inline
00102 typename SField<FieldTypeT, fieldNameSpace>::const_reference
00103 SField<FieldTypeT, fieldNameSpace>::getValue(void) const
00104 {
00105 return _value;
00106 }
00107
00108 template <class FieldTypeT, Int32 fieldNameSpace> inline
00109 bool SField<FieldTypeT, fieldNameSpace>::isEmpty(void) const
00110 {
00111 return false;
00112 }
00113
00114 #ifndef WIN32
00115 template <class FieldTypeT, Int32 fieldNameSpace> inline
00116 const FieldType &SField<FieldTypeT, fieldNameSpace>::getType(void) const
00117 {
00118 return _fieldType;
00119 }
00120 #endif
00121
00122 template <class FieldTypeT, Int32 fieldNameSpace> inline
00123 UInt32 SField<FieldTypeT, fieldNameSpace>::getSize(void) const
00124 {
00125 return 1;
00126 }
00127
00128
00129
00130
00131 template <class FieldTypeT, Int32 fieldNameSpace> inline
00132 void SField<FieldTypeT, fieldNameSpace>::setValue(ArgumentType value)
00133 {
00134 _value = value;
00135 }
00136
00137 template <class FieldTypeT, Int32 fieldNameSpace> inline
00138 void SField<FieldTypeT,
00139 fieldNameSpace>::setValue(const Self &obj)
00140 {
00141 _value = obj._value;
00142 }
00143
00147 template <class FieldTypeT, Int32 fieldNameSpace> inline
00148 void SField<FieldTypeT, fieldNameSpace>::setAbstrValue(const Field &obj)
00149 {
00150 if(getType() == obj.getType())
00151 {
00152 setValue(*((const SField<FieldTypeT, fieldNameSpace> *) &obj));
00153 }
00154 }
00155
00156
00157
00158
00159 template <class FieldTypeT, Int32 fieldNameSpace> inline
00160 void SField<FieldTypeT, fieldNameSpace>::pushValueByStr(const Char8 *str)
00161 {
00162 typedef typename osgIF< (SFieldTraits::StringConvertable &
00163 FieldTraits ::FromStringConvertable),
00164 SFieldTraits,
00165 ErrorFromToString<FieldTypeT> >::_IRet Converter;
00166
00167 Converter::getFromString(_value, str);
00168 }
00169
00170 template <class FieldTypeT, Int32 fieldNameSpace> inline
00171 std::string &SField<FieldTypeT,
00172 fieldNameSpace>::getValueByStr(std::string &str) const
00173 {
00174 typedef typename osgIF< (SFieldTraits::StringConvertable &
00175 FieldTraits ::ToStringConvertable),
00176 SFieldTraits,
00177 ErrorFromToString<FieldTypeT> >::_IRet Converter;
00178
00179 Converter::putToString(_value, str);
00180
00181 return str;
00182 }
00183
00184 template <class FieldTypeT, Int32 fieldNameSpace> inline
00185 std::string &SField<FieldTypeT,
00186 fieldNameSpace>::getValueByStr(
00187 std::string &str,
00188 StringConversionStateBase &state) const
00189 {
00190 typedef typename osgIF< (SFieldTraits::StringConvertable &
00191 FieldTraits ::ToStringConvertable),
00192 SFieldTraits,
00193 ErrorFromToString<FieldTypeT> >::_IRet Converter;
00194
00195 std::string valStr;
00196
00197 state.beginField(this, str);
00198
00199 Converter::putToString(_value, valStr);
00200 state.addValueStr(valStr, str);
00201
00202 state.endField(this, str);
00203
00204 return str;
00205 }
00206
00207 template <class FieldTypeT, Int32 fieldNameSpace> inline
00208 std::string &SField<FieldTypeT,
00209 fieldNameSpace>::getValueByStr(std::string &str,
00210 UInt32 index) const
00211 {
00212 typedef typename osgIF< (SFieldTraits::StringConvertable &
00213 FieldTraits ::ToStringConvertable),
00214 SFieldTraits,
00215 ErrorFromToString<FieldTypeT> >::_IRet Converter;
00216
00217 if(index > 0)
00218 {
00219 return str;
00220 }
00221
00222 Converter::putToString(_value, str);
00223
00224 return str;
00225 }
00226
00227
00228
00229
00230 template <class FieldTypeT, Int32 fieldNameSpace> inline
00231 void SField<FieldTypeT, fieldNameSpace>::syncWith(Self &source)
00232 {
00233 setValue(source);
00234 }
00235
00236
00237
00238
00239 template <class FieldTypeT, Int32 fieldNameSpace> inline
00240 UInt32 SField<FieldTypeT, fieldNameSpace>::getBinSize(void)
00241 {
00242 return SFieldTraits::getBinSize(_value);
00243 }
00244
00245 template <class FieldTypeT, Int32 fieldNameSpace> inline
00246 void SField<FieldTypeT, fieldNameSpace>::copyToBin(BinaryDataHandler &pMem)
00247 {
00248 SFieldTraits::copyToBin( pMem,
00249 _value);
00250 }
00251
00252 template <class FieldTypeT, Int32 fieldNameSpace> inline
00253 void SField<FieldTypeT, fieldNameSpace>::copyFromBin(BinaryDataHandler &pMem)
00254 {
00255 SFieldTraits::copyFromBin( pMem,
00256 _value);
00257 }
00258
00259
00260
00261
00262 template <class FieldTypeT, Int32 fieldNameSpace> inline
00263 void SField<FieldTypeT, fieldNameSpace>::operator =(const SField &source)
00264 {
00265 if(this != &source)
00266 {
00267 _value = source._value;
00268 }
00269 }
00270
00271
00272
00273
00274 template <class FieldTypeT, Int32 fieldNameSpace> inline
00275 void SField<FieldTypeT, fieldNameSpace>::dump(void) const
00276 {
00277
00278 }
00279
00280
00281
00282
00283 template <class FieldTypeT, Int32 fieldNameSpace> inline
00284 Field *SField<FieldTypeT, fieldNameSpace>::create(void)
00285 {
00286 return new SField<FieldTypeT, fieldNameSpace>();
00287 }
00288
00289 OSG_END_NAMESPACE
00290
00291 #define OSGSFIELD_INLINE_CVSID "@(#)$Id: $"