PixelLightAPI  .
Var.h
Go to the documentation of this file.
00001 /*********************************************************\
00002  *  File: Var.h                                          *
00003  *
00004  *  Copyright (C) 2002-2012 The PixelLight Team (http://www.pixellight.org/)
00005  *
00006  *  This file is part of PixelLight.
00007  *
00008  *  PixelLight is free software: you can redistribute it and/or modify
00009  *  it under the terms of the GNU Lesser General Public License as published by
00010  *  the Free Software Foundation, either version 3 of the License, or
00011  *  (at your option) any later version.
00012  *
00013  *  PixelLight is distributed in the hope that it will be useful,
00014  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00016  *  GNU Lesser General Public License for more details.
00017  *
00018  *  You should have received a copy of the GNU Lesser General Public License
00019  *  along with PixelLight. If not, see <http://www.gnu.org/licenses/>.
00020 \*********************************************************/
00021 
00022 
00023 #ifndef __PLCORE_VAR_H__
00024 #define __PLCORE_VAR_H__
00025 #pragma once
00026 
00027 
00028 //[-------------------------------------------------------]
00029 //[ Includes                                              ]
00030 //[-------------------------------------------------------]
00031 #include "PLCore/Base/Tools/TypeTraits.h"
00032 #include "PLCore/Base/Type/Type.h"
00033 #include "PLCore/Base/Var/DynVar.h"
00034 #include "PLCore/Base/Var/VarAccess.h"
00035 
00036 
00037 //[-------------------------------------------------------]
00038 //[ Namespace                                             ]
00039 //[-------------------------------------------------------]
00040 namespace PLCore {
00041 
00042 
00043 //[-------------------------------------------------------]
00044 //[ Forward declarations                                  ]
00045 //[-------------------------------------------------------]
00046 class Object;
00047 
00048 
00049 //[-------------------------------------------------------]
00050 //[ Classes                                               ]
00051 //[-------------------------------------------------------]
00052 /**
00053 *  @brief
00054 *    Typed variable
00055 *
00056 *  @remarks
00057 *    This class represents an actual variable of a certain type.
00058 *    The two other template parameters control, where the actual value
00059 *    is stored (STORAGE) and how the variable is allowed to be accessed (ACCESS).
00060 */
00061 template <typename T, typename ACCESS = PLCore::AccessReadWrite, typename STORAGE = PLCore::StorageDirectValue >
00062 class Var : public DynVar {
00063 
00064 
00065     //[-------------------------------------------------------]
00066     //[ Public data types                                     ]
00067     //[-------------------------------------------------------]
00068     public:
00069         // Storage type
00070         typedef typename Type<T>::_Type _Type;
00071 
00072 
00073     //[-------------------------------------------------------]
00074     //[ Public functions                                      ]
00075     //[-------------------------------------------------------]
00076     public:
00077         /**
00078         *  @brief
00079         *    Constructor
00080         */
00081         Var() :
00082             m_Value(DefaultValue<T>::Default())
00083         {
00084         }
00085 
00086         /**
00087         *  @brief
00088         *    Constructor
00089         *
00090         *  @param[in] DefaultValue
00091         *    Default value for the var
00092         */
00093         Var(_Type DefaultValue) :
00094             m_Value(DefaultValue)
00095         {
00096         }
00097 
00098         /**
00099         *  @brief
00100         *    Constructor
00101         *
00102         *  @param[in] DefaultValue
00103         *    Default value for the var
00104         *  @param[in] pObject
00105         *    Pointer to object to which the attribute belongs
00106         */
00107         Var(_Type DefaultValue, Object *pObject) :
00108             m_Value(DefaultValue, pObject)
00109         {
00110         }
00111 
00112         /**
00113         *  @brief
00114         *    Destructor
00115         */
00116         virtual ~Var()
00117         {
00118         }
00119 
00120         /**
00121         *  @brief
00122         *    Get value
00123         *
00124         *  @return
00125         *    Value
00126         */
00127         operator _Type() const
00128         {
00129             // Get value
00130             return m_Value.Get();
00131         }
00132 
00133         /**
00134         *  @brief
00135         *    Assignment operator
00136         *
00137         *  @param[in] Value
00138         *    New value
00139         *
00140         *  @return
00141         *    Reference to this instance
00142         */
00143         Var &operator =(const _Type &Value)
00144         {
00145             // Set value
00146             m_Value.Set(Value);
00147             return *this;
00148         }
00149 
00150         /**
00151         *  @brief
00152         *    Get value
00153         *
00154         *  @return
00155         *    Value
00156         */
00157         inline _Type Get() const
00158         {
00159             // Return value
00160             return m_Value.Get();
00161         }
00162 
00163         /**
00164         *  @brief
00165         *    Set value
00166         *
00167         *  @param[in] Value
00168         *    New value
00169         */
00170         inline void Set(const _Type &Value)
00171         {
00172             m_Value.Set(Value);
00173         }
00174 
00175         /**
00176         *  @brief
00177         *    Get default value
00178         *
00179         *  @return
00180         *    Default value
00181         */
00182         inline _Type Default() const
00183         {
00184             // Return default value
00185             return m_Value.GetDefault();
00186         }
00187 
00188 
00189     //[-------------------------------------------------------]
00190     //[ Public virtual DynVar functions                       ]
00191     //[-------------------------------------------------------]
00192     public:
00193         virtual DynTypeInfo &GetType() const override
00194         {
00195             return TypeInfo<T>::Instance;
00196         }
00197 
00198         virtual String GetTypeName() const override
00199         {
00200             return Type<T>::GetTypeName();
00201         }
00202 
00203         virtual int GetTypeID() const override
00204         {
00205             return Type<T>::TypeID;
00206         }
00207 
00208         virtual bool IsDefault() const override
00209         {
00210             return (m_Value.Get() == m_Value.GetDefault());
00211         }
00212 
00213         virtual void SetDefault() override
00214         {
00215             m_Value.Set(m_Value.GetDefault());
00216         }
00217 
00218         virtual String GetDefault() const override
00219         {
00220             return Type<T>::ConvertToString(m_Value.GetDefault());
00221         }
00222 
00223         virtual void SetVar(const DynVar &cValue) override
00224         {
00225             m_Value.Set(Type<T>::ConvertFromVar(cValue));
00226         }
00227 
00228         virtual bool GetBool() const override
00229         {
00230             return Type<T>::ConvertToBool(m_Value.Get());
00231         }
00232 
00233         virtual void SetBool(bool bValue) override
00234         {
00235             m_Value.Set(Type<T>::ConvertFromBool(bValue));
00236         }
00237 
00238         virtual int GetInt() const override
00239         {
00240             return Type<T>::ConvertToInt(m_Value.Get());
00241         }
00242 
00243         virtual void SetInt(int nValue) override
00244         {
00245             m_Value.Set(Type<T>::ConvertFromInt(nValue));
00246         }
00247 
00248         virtual int8 GetInt8() const override
00249         {
00250             return Type<T>::ConvertToInt8(m_Value.Get());
00251         }
00252 
00253         virtual void SetInt8(int8 nValue) override
00254         {
00255             m_Value.Set(Type<T>::ConvertFromInt8(nValue));
00256         }
00257 
00258         virtual int16 GetInt16() const override
00259         {
00260             return Type<T>::ConvertToInt16(m_Value.Get());
00261         }
00262 
00263         virtual void SetInt16(int16 nValue) override
00264         {
00265             m_Value.Set(Type<T>::ConvertFromInt16(nValue));
00266         }
00267 
00268         virtual int32 GetInt32() const override
00269         {
00270             return Type<T>::ConvertToInt32(m_Value.Get());
00271         }
00272 
00273         virtual void SetInt32(int32 nValue) override
00274         {
00275             m_Value.Set(Type<T>::ConvertFromInt32(nValue));
00276         }
00277 
00278         virtual int64 GetInt64() const override
00279         {
00280             return Type<T>::ConvertToInt64(m_Value.Get());
00281         }
00282 
00283         virtual void SetInt64(int64 nValue) override
00284         {
00285             m_Value.Set(Type<T>::ConvertFromInt64(nValue));
00286         }
00287 
00288         virtual uint8 GetUInt8() const override
00289         {
00290             return Type<T>::ConvertToUInt8(m_Value.Get());
00291         }
00292 
00293         virtual void SetUInt8(uint8 nValue) override
00294         {
00295             m_Value.Set(Type<T>::ConvertFromUInt8(nValue));
00296         }
00297 
00298         virtual uint16 GetUInt16() const override
00299         {
00300             return Type<T>::ConvertToUInt16(m_Value.Get());
00301         }
00302 
00303         virtual void SetUInt16(uint16 nValue) override
00304         {
00305             m_Value.Set(Type<T>::ConvertFromUInt16(nValue));
00306         }
00307 
00308         virtual uint32 GetUInt32() const override
00309         {
00310             return Type<T>::ConvertToUInt32(m_Value.Get());
00311         }
00312 
00313         virtual void SetUInt32(uint32 nValue) override
00314         {
00315             m_Value.Set(Type<T>::ConvertFromUInt32(nValue));
00316         }
00317 
00318         virtual uint64 GetUInt64() const override
00319         {
00320             return Type<T>::ConvertToUInt64(m_Value.Get());
00321         }
00322 
00323         virtual void SetUInt64(uint64 nValue) override
00324         {
00325             m_Value.Set(Type<T>::ConvertFromUInt64(nValue));
00326         }
00327 
00328         virtual uint_ptr GetUIntPtr() const override
00329         {
00330             return Type<T>::ConvertToUIntPtr(m_Value.Get());
00331         }
00332 
00333         virtual void SetUIntPtr(uint_ptr nValue) override
00334         {
00335             m_Value.Set(Type<T>::ConvertFromUIntPtr(nValue));
00336         }
00337 
00338         virtual float GetFloat() const override
00339         {
00340             return Type<T>::ConvertToFloat(m_Value.Get());
00341         }
00342 
00343         virtual void SetFloat(float fValue) override
00344         {
00345             m_Value.Set(Type<T>::ConvertFromFloat(fValue));
00346         }
00347 
00348         virtual double GetDouble() const override
00349         {
00350             return Type<T>::ConvertToDouble(m_Value.Get());
00351         }
00352 
00353         virtual void SetDouble(double dValue) override
00354         {
00355             m_Value.Set(Type<T>::ConvertFromDouble(dValue));
00356         }
00357 
00358         virtual String GetString() const override
00359         {
00360             return Type<T>::ConvertToString(m_Value.Get());
00361         }
00362 
00363         virtual void SetString(const String &sValue) override
00364         {
00365             m_Value.Set(Type<T>::ConvertFromString(sValue));
00366         }
00367 
00368 
00369     //[-------------------------------------------------------]
00370     //[ Private data                                          ]
00371     //[-------------------------------------------------------]
00372     private:
00373         // Variable value
00374         VarAccess<_Type, ACCESS, STORAGE> m_Value;  /**< Value storage and access */
00375 
00376 
00377 };
00378 
00379 
00380 //[-------------------------------------------------------]
00381 //[ Namespace                                             ]
00382 //[-------------------------------------------------------]
00383 } // PLCore
00384 
00385 
00386 #endif // __PLCORE_VAR_H__


PixelLight PixelLight 0.9.11-R1
Copyright (C) 2002-2012 by The PixelLight Team
Last modified Thu Feb 23 2012 14:09:01
The content of this PixelLight document is published under the
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported