VedaLibMath/PackDynamicFloat.h

Go to the documentation of this file.
00001 /*! \file 
00002     \author victorien ferry & www.m4nkind.com
00003     \brief This file applies the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1 , read file COPYING.
00004 */
00005 #ifndef COM_M4NKIND_PackDynamicFloat_H
00006 #define COM_M4NKIND_PackDynamicFloat_H
00007 
00008 #include "PackDynamicType.h"
00009 #include "PackFloat_FixedPoint.h"
00010 #include "PackFloat.h"
00011 #include "PackObjectReference.h"
00012 /*!
00013     \class  PackDynamicFloat
00014     \brief  Base type that lets you choose between a constant scalar expression or a reference to an equation.
00015             It supports 1,2 or 3 vector like PackFloat, but is not extended from packfloat.
00016 */
00017 class PackDynamicFloat : public PackDynamicType
00018 {
00019 /*==================================================================
00020                                 PUBLIC
00021 ==================================================================*/
00022 public:
00023     /*!
00024         \brief  Constructor. There should only be initialisation there.
00025         \param _DimensionEnum the dimension of the value.:(1,2,3,4) PackFloat::vd_...
00026     */
00027     PackDynamicFloat( PackFloat::VectorDimension _DimensionEnum);
00028 #ifdef _ENGINE_EDITABLE_
00029     /*!
00030         \brief  editable mode accesor, that force a constant type, and its value.
00031         \param _value the new value.
00032         \param _dimensionIndex of the dimension affected. 0 is default.
00033     */
00034     void    SetConstant(float _value,unsigned int _dimensionIndex=0);
00035 #endif
00036     /*!
00037         \brief   Compute 1,2,3 or 4 value according to a parameter list (X,Y,Z,D).
00038                 An equation can manage one or more dimensions on input and output.
00039                 the unused output parameters are left untouch, so that you
00040                 can set your default values there.
00041                 Note this version is not virtual, because there is no reason for extension a prioris.
00042         \param  _OutgoingParameterTable result table. elements are writen or not according to the equation.
00043         \param _IncomingParameterTable. float table, the (X,Y,Z,D) parameters.
00044     */
00045     void Compute( float _OutgoingParameterTable[4] , const float _IncomingParameterTable[4] );
00046 
00047 /*==================================================================
00048                                 PROTECTED
00049 ==================================================================*/
00050 protected:
00051     //! the optionnal constant, valid if PackDynamicType selected.
00052     PackFloat               mSer_Constant;
00053     //! the optional reference to an equation, valid if PackDynamicType selected.
00054     PackObjectReference     mSer_EquationReference;
00055 
00056     //! the number of Dimension managed if PackFloat was initialized as a vector
00057     const unsigned int  m_NumberOfDimensionManaged;
00058 };
00059 /*!
00060     \def    REGISTER_MEMBER_PACKDYNAMICFLOAT
00061 
00062     \brief  This macro is used to register a serializable member in a class constructor.
00063             For editable mode, it uses _MemberName to explicit the use of the member, in order
00064             to display it in a GUI for example.
00065         
00066 */
00067 #ifdef _ENGINE_EDITABLE_
00068 #define     REGISTER_MEMBER_PACKDYNAMICFLOAT(_object,_MemberName,_DefaultVal) \
00069 RegisterSerializableMember(_object);\
00070 _object.SetMemberName( _MemberName );\
00071 _object.SetConstant(_DefaultVal,0);\
00072 _object.SetConstant(_DefaultVal,1);\
00073 _object.SetConstant(_DefaultVal,2);
00074 #else
00075 #define     REGISTER_MEMBER_PACKDYNAMICFLOAT(_object,_MemberName,_DefaultVal) \
00076 RegisterSerializableMember(_object);
00077 #endif
00078 /*!
00079     \def    REGISTER_MEMBER_PACKDYNAMICFLOAT_XY
00080 
00081     \brief  This macro is used to register a serializable member in a class constructor.
00082             For editable mode, it uses _MemberName to explicit the use of the member, in order
00083             to display it in a GUI for example.
00084         
00085 */
00086 #ifdef _ENGINE_EDITABLE_
00087 #define     REGISTER_MEMBER_PACKDYNAMICFLOAT_XY(_object,_MemberName,_DefaultValX,_DefaultValY) \
00088 RegisterSerializableMember(_object);\
00089 _object.SetMemberName( _MemberName );\
00090 _object.SetConstant(_DefaultValX,0);\
00091 _object.SetConstant(_DefaultValY,1);
00092 #else
00093 #define     REGISTER_MEMBER_PACKDYNAMICFLOAT_XY(_object,_MemberName,_DefaultValX,_DefaultValY) \
00094 RegisterSerializableMember(_object);
00095 #endif
00096 /*!
00097     \def    REGISTER_MEMBER_PACKDYNAMICFLOAT_XYZ
00098 
00099     \brief  This macro is used to register a serializable member in a class constructor.
00100             For editable mode, it uses _MemberName to explicit the use of the member, in order
00101             to display it in a GUI for example.
00102         
00103 */
00104 #ifdef _ENGINE_EDITABLE_
00105 #define     REGISTER_MEMBER_PACKDYNAMICFLOAT_XYZ(_object,_MemberName,_DefaultValX,_DefaultValY,_DefaultValZ) \
00106 RegisterSerializableMember(_object);\
00107 _object.SetMemberName( _MemberName );\
00108 _object.SetConstant(_DefaultValX,0);\
00109 _object.SetConstant(_DefaultValY,1);\
00110 _object.SetConstant(_DefaultValZ,2);
00111 #else
00112 #define     REGISTER_MEMBER_PACKDYNAMICFLOAT_XYZ(_object,_MemberName,_DefaultValX,_DefaultValY,_DefaultValZ) \
00113 RegisterSerializableMember(_object);
00114 #endif
00115 //end of file
00116 #endif

      /\/\        4         N         k         !         N         D
                      _______  _ __ ___  _____            ___ _ _  ____
     ___________  __//___   /________  |/    / ___________\_______/    \
    /   _   _   \/   _     /    _   /      _/_/____/    _       __     /
   /    /   /       /     /    /    \      \/     /    /    \   \     /
  \\___/___/___/    ¯    _____/_____/       ______\___/_____/\________\\
               \________/_ ___ __ l____\      /elD!  
                 http://www.m4nkind.com \____/