Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

OSGSField.inl

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002  *                                OpenSG                                     *
00003  *                                                                           *
00004  *                                                                           *
00005  *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
00006  *                                                                           *
00007  *                            www.opensg.org                                 *
00008  *                                                                           *
00009  *   contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de          *
00010  *                                                                           *
00011 \*---------------------------------------------------------------------------*/
00012 /*---------------------------------------------------------------------------*\
00013  *                                License                                    *
00014  *                                                                           *
00015  * This library is free software; you can redistribute it and/or modify it   *
00016  * under the terms of the GNU Library General Public License as published    *
00017  * by the Free Software Foundation, version 2.                               *
00018  *                                                                           *
00019  * This library is distributed in the hope that it will be useful, but       *
00020  * WITHOUT ANY WARRANTY; without even the implied warranty of                *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
00022  * Library General Public License for more details.                          *
00023  *                                                                           *
00024  * You should have received a copy of the GNU Library General Public         *
00025  * License along with this library; if not, write to the Free Software       *
00026  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
00027  *                                                                           *
00028 \*---------------------------------------------------------------------------*/
00029 /*---------------------------------------------------------------------------*\
00030  *                                Changes                                    *
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 /*                            Class Get                                    */
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 /*                            Constructors                                 */
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 /*                             Destructor                                  */
00084 
00085 template <class FieldTypeT, Int32 fieldNameSpace> inline
00086 SField<FieldTypeT, fieldNameSpace>::~SField(void)
00087 {
00088 }
00089 
00090 /*-------------------------------------------------------------------------*/
00091 /*                               Get                                       */
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 /*                                Set                                      */
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 /*                           String IO                                     */
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 /*                              MT Sync                                    */
00229 
00230 template <class FieldTypeT, Int32 fieldNameSpace> inline
00231 void SField<FieldTypeT, fieldNameSpace>::syncWith(Self &source)
00232 {
00233     setValue(source);
00234 }
00235 
00236 /*-------------------------------------------------------------------------*/
00237 /*                         Binary Interface                                */
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 /*                              MT Sync                                    */
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 /*                               Dump                                      */
00273 
00274 template <class FieldTypeT, Int32 fieldNameSpace> inline
00275 void SField<FieldTypeT, fieldNameSpace>::dump(void) const
00276 {
00277 //    std::cerr << "Dump Field : " << _value << std::endl;
00278 }
00279 
00280 /*-------------------------------------------------------------------------*/
00281 /*                             Create                                      */
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: $"

Generated on Thu Aug 25 04:09:08 2005 for OpenSG by  doxygen 1.4.3