2525#include  " flxCoreTypes.h" 
2626#include  " flxUtils.h" 
2727
28+ //  Define a type used to enumerate parameter value types (not data types, but values, like temp, accel)
29+ 
30+ typedef  uint16_t  flxParamValueType_t;
31+ 
32+ const  flxParamValueType_t kParamValueNone  = 0 ;
33+ 
2834// ----------------------------------------------------------------------------------------
2935//  flxParameter
3036// 
3137//  Base/Core Parameter Class
3238// 
3339//  From an abstract sense, a basic parameter   - nothing more
34- 
40+ // 
3541class  flxParameter  : public  flxDescriptor 
3642{
3743    bool  _isEnabled;
44+     flxParamValueType_t _valueType;
3845
3946  public: 
40-     flxParameter () : _isEnabled{true } {};
47+     flxParameter () : _isEnabled{true }, _valueType{kParamValueNone }
48+     {
49+     }
4150
4251    bool  enabled (void )
4352    {
4453        return  _isEnabled;
4554    }
4655
56+     flxParamValueType_t valueType (void )
57+     {
58+         return  _valueType;
59+     }
60+     void  setValueType (flxParamValueType_t type)
61+     {
62+         _valueType = type;
63+     }
64+ 
4765    virtual  void  setEnabled (bool  enabled)
4866    {
4967        _isEnabled = enabled;
@@ -292,6 +310,14 @@ class _flxParameterOut : public _flxDataOut<T>, public flxParameterOutScalar
292310        (*this )(obj, name);
293311    }
294312
313+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
314+     {
315+         //  Value type
316+         setValueType (vtype);
317+ 
318+         //  cascade to other version of method
319+         (*this )(obj, name, desc);
320+     }
295321    //  override to deal with dirty status of object.
296322    void  setEnabled (bool  bEnabled)
297323    {
@@ -488,6 +514,14 @@ class flxParameterOutString : public flxParameterOutScalar, public _flxDataOutSt
488514        (*this )(obj, name);
489515    }
490516
517+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
518+     {
519+         //  Value type
520+         setValueType (vtype);
521+ 
522+         //  cascade to other version of method
523+         (*this )(obj, name, desc);
524+     }
491525    //  override to deal with dirty status of object.
492526    void  setEnabled (bool  bEnabled)
493527    {
@@ -641,6 +675,14 @@ class flxParameterOutArrayType : public flxParameterOutArray
641675        (*this )(obj, name);
642676    }
643677
678+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
679+     {
680+         //  Value type
681+         setValueType (vtype);
682+ 
683+         //  cascade to other version of method
684+         (*this )(obj, name, desc);
685+     }
644686    //  override to deal with dirty status of object.
645687    void  setEnabled (bool  bEnabled)
646688    {
@@ -805,7 +847,14 @@ class flxParameterOutArrayString : public flxParameterOutArray
805847        //  cascade to other version of method
806848        (*this )(obj, name);
807849    }
850+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
851+     {
852+         //  Value type
853+         setValueType (vtype);
808854
855+         //  cascade to other version of method
856+         (*this )(obj, name, desc);
857+     }
809858    //  override to deal with dirty status of object.
810859    void  setEnabled (bool  bEnabled)
811860    {
@@ -913,6 +962,14 @@ class _flxParameterIn : public flxParameterIn, public _flxDataIn<T>
913962        (*this )(obj, name);
914963    }
915964
965+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
966+     {
967+         //  Value type
968+         setValueType (vtype);
969+ 
970+         //  cascade to other version of method
971+         (*this )(obj, name, desc);
972+     }
916973    // ---------------------------------------------------------------------------------
917974    void  set (T const  &value)
918975    {
@@ -1063,6 +1120,14 @@ class flxParameterInString : public flxParameterIn, _flxDataInString
10631120        (*this )(obj, name);
10641121    }
10651122
1123+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
1124+     {
1125+         //  Value type
1126+         setValueType (vtype);
1127+ 
1128+         //  cascade to other version of method
1129+         (*this )(obj, name, desc);
1130+     }
10661131    // ---------------------------------------------------------------------------------
10671132    void  set (std::string const  &value)
10681133    {
@@ -1188,6 +1253,15 @@ template <class Object, void (Object::*_setter)()> class flxParameterInVoid : pu
11881253        (*this )(obj, name);
11891254    }
11901255
1256+     void  operator ()(Object *obj, const  char  *name, const  char  *desc, flxParamValueType_t vtype)
1257+     {
1258+         //  Value type
1259+         setValueType (vtype);
1260+ 
1261+         //  cascade to other version of method
1262+         (*this )(obj, name, desc);
1263+     }
1264+ 
11911265    // ---------------------------------------------------------------------------------
11921266    void  set ()
11931267    {
@@ -1229,9 +1303,10 @@ template <class Object, void (Object::*_setter)()> class flxParameterInVoid : pu
12291303
12301304//  Use some macro magic to determine which actual call to make based on the number of passed in
12311305//  parameters..
1232- #define  _spGetRegAttributeMacro (_1, _2, _3, _NAME_, ...) _NAME_
1306+ #define  _spGetRegAttributeMacro (_1, _2, _3, _4,  _NAME_, ...) _NAME_
12331307#define  flxRegister (...)                                                                                               \
1234-     _spGetRegAttributeMacro (__VA_ARGS__, flxRegisterDesc, flxRegisterName, flxRegisterObj)(__VA_ARGS__)
1308+     _spGetRegAttributeMacro (__VA_ARGS__, flxRegisterValueType, flxRegisterDesc, flxRegisterName,                       \
1309+                             flxRegisterObj)(__VA_ARGS__)
12351310
12361311#define  flxRegisterObj (_obj_name_ ) _obj_name_(this , #_obj_name_)
12371312
@@ -1241,6 +1316,9 @@ template <class Object, void (Object::*_setter)()> class flxParameterInVoid : pu
12411316//  User provided Name and description
12421317#define  flxRegisterDesc (_obj_name_, _name_, _desc_ ) _obj_name_(this , _name_, _desc_)
12431318
1319+ //  For parameters - user provided value type
1320+ #define  flxRegisterValueType (_obj_name_, _name_, _desc_, _type_ ) _obj_name_(this , _name_, _desc_, _type_)
1321+ 
12441322//  Define a object type that supports parameter lists (input and output)
12451323class  flxOperation  : public  flxObject , public  _flxParameterContainer 
12461324{
0 commit comments