mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step > Class Template Reference

array of dependent values More...

#include <TDependentValues.h>

Collaboration diagram for mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >:

Collaboration graph
[legend]

List of all members.

Public Types

typedef _Ty ValueType
typedef _Ty ValueArray [_Count]

Public Member Functions

 TDependentValues ()
const ValueTypeoperator[] (size_t nIndex) const
ValueType GetValue (size_t nIndex) const
ValueType GetSum () const
bool GetValuesOk () const
void SetEqual ()
void SetAllValues (const ValueArray *pvtValues)
void SetValue (size_t nIndex, ValueType new_val)

Protected Member Functions

virtual void DoUpdateValues (size_t nIndex)
virtual void SetAutoFixup (bool bAutoFixup)
virtual bool GetAutoFixup () const


Detailed Description

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
class mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >

array of dependent values

The values of this class are dependent in the following sense:

Definition at line 53 of file TDependentValues.h.


Member Typedef Documentation

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
typedef _Ty mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::ValueType

Definition at line 57 of file TDependentValues.h.

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
typedef _Ty mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::ValueArray[_Count]

Definition at line 58 of file TDependentValues.h.


Constructor & Destructor Documentation

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::TDependentValues (  )  [inline]

Create with equal values

Definition at line 62 of file TDependentValues.h.

References mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetEqual().

00063         : m_bUpdate(false)
00064         , m_bFixup(true)
00065     {
00066         SetEqual();
00067     }

Here is the call graph for this function:

mbo::TDependentValues::SetEqualmbo::TDependentValues::DoUpdateValues


Member Function Documentation

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
const ValueType& mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::operator[] ( size_t  nIndex  )  const [inline]

Parameters:
nIndex index of value to access
Returns:
read access by value

Definition at line 72 of file TDependentValues.h.

00073     {
00074         assert(nIndex < _Count);
00075         return m_vtValues[nIndex];
00076     }

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
ValueType mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetValue ( size_t  nIndex  )  const [inline]

Parameters:
nIndex index of value to access
Returns:
read access by copy

Definition at line 81 of file TDependentValues.h.

00082     {
00083         assert(nIndex < _Count);
00084         return m_vtValues[nIndex];
00085     }

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
ValueType mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetSum (  )  const [inline]

Returns:
the sum of all values, should be _Max

Definition at line 89 of file TDependentValues.h.

00090     {
00091         ValueType sum(0);
00092 
00093         for(size_t nPos = 0; nPos < _Count; ++nPos)
00094         {
00095             sum += m_vtValues[nPos];
00096         }
00097         return sum;
00098     }

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
bool mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetValuesOk (  )  const [inline]

Returns:
whether all conditions apply to values
  • all values greater than or equal _Min
  • all values less than or equal _Max
  • sum of all values equals _Max

Definition at line 105 of file TDependentValues.h.

00106     {
00107         ValueType sum(0);
00108 
00109         for(size_t nPos = 0; nPos < _Count; ++nPos)
00110         {
00111             if (m_vtValues[nPos] < _Min)
00112             {
00113                 return false;
00114             }
00115             sum += m_vtValues[nPos];
00116         }
00117         return sum == _Max;
00118     }

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetEqual (  )  [inline]

Set all values to the same value (_Max/_Count) and then call DoUpdateValues(-1).

Definition at line 123 of file TDependentValues.h.

References mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::DoUpdateValues().

Referenced by mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::TDependentValues().

00124     {
00125         if (!m_bUpdate)
00126         {
00127             m_bUpdate = true;
00128 
00129             // Correct the values
00130             for(size_t nPos = 0; nPos < _Count; ++nPos)
00131             {
00132                 m_vtValues[nPos] = _Max / _Count;
00133             }
00134 
00135             FixupSum();
00136 
00137             // now that all values are correct again we can notify
00138             DoUpdateValues(-1);
00139 
00140             m_bUpdate = false;
00141         }
00142     }

Here is the call graph for this function:

mbo::TDependentValues::DoUpdateValues

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetAllValues ( const ValueArray pvtValues  )  [inline]

Set all parameters at once

Parameters:
pvtValues pointer to array of new values must have exactly _Count values

Definition at line 149 of file TDependentValues.h.

References mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::DoUpdateValues().

00150     {
00151         for(size_t nPos = 0; nPos < _Count; ++nPos)
00152         {
00153             m_vtValues[nPos] = (*pvtValues)[nPos];
00154         }
00155         FixupSum();
00156         DoUpdateValues(-1);
00157     }

Here is the call graph for this function:

mbo::TDependentValues::DoUpdateValues

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetValue ( size_t  nIndex,
ValueType  new_val 
) [inline]

Set a single value and correct the others automatically

Parameters:
nIndex index of value to change
new_val value to set

Definition at line 164 of file TDependentValues.h.

References mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::DoUpdateValues(), and min.

00165     {
00166         if (!m_bUpdate)
00167         {
00168             m_bUpdate = true;
00169 
00170             if (!m_bFixup)
00171             {
00172                 m_vtValues[nIndex] = new_val;
00173                 DoUpdateValues(nIndex);
00174             }
00175             // check whether at least one value was changed, diff != 0
00176             else if (m_vtValues[nIndex] != new_val)
00177             {
00178                 // if a new value was set 1000 then we need to set all other to zero
00179                 if (new_val >= _Max)
00180                 {
00181                     for(size_t nPos = 0; nPos < _Count; ++nPos)
00182                     {
00183                         m_vtValues[nPos] = nPos == nIndex ? _Max : _Min;
00184                     }
00185                 }
00186                 else
00187                 {
00188                     // handle the normal case (and later the case when a value was set to zero)
00189                     ValueType  count_min_one = _Count - 1;
00190                     ValueType  diff_val  = _Step * (new_val - m_vtValues[nIndex]) / count_min_one;
00191                     ValueType  miss_val  = 0;
00192                     ValueType  max_val   = _Min;
00193                     size_t     nIndexMax = 0;
00194 
00195                     for(size_t nPos = 0; nPos < _Count; ++nPos)
00196                     {
00197                         if (nPos == nIndex)
00198                         {
00199                             m_vtValues[nPos] += diff_val * count_min_one;
00200                             m_vtValues[nPos] = min(m_vtValues[nPos], _Max);
00201                         }
00202                         else
00203                         {
00204                             m_vtValues[nPos] -= diff_val;
00205                         }
00206 
00207                         if (m_vtValues[nPos] < _Min)
00208                         {
00209                             miss_val += _Min - m_vtValues[nPos];
00210                             m_vtValues[nPos] = _Min;
00211                         }
00212                         else if (m_vtValues[nPos] >= max_val)
00213                         {
00214                             nIndexMax = nPos;
00215                             max_val = m_vtValues[nPos];
00216                         }
00217                     }
00218 
00219                     if (miss_val)
00220                     {
00221                         m_vtValues[nIndexMax] -= miss_val;
00222                     }
00223 
00224                     FixupSum();
00225                 }
00226 
00227                 DoUpdateValues(nIndex);
00228             }
00229 
00230             m_bUpdate = false;
00231         }
00232     }

Here is the call graph for this function:

mbo::TDependentValues::DoUpdateValues

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
virtual void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::DoUpdateValues ( size_t  nIndex  )  [inline, protected, virtual]

Parameters:
nIndex index of updated value or -1 if all values were set simultaineously.

Definition at line 239 of file TDependentValues.h.

Referenced by mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetAllValues(), mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetAutoFixup(), mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetEqual(), and mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetValue().

00240     {
00241         // nothing to do here
00242     }

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
virtual void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetAutoFixup ( bool  bAutoFixup  )  [inline, protected, virtual]

Parameters:
bAutoFixup whether to automatically fix values upon modification

Definition at line 246 of file TDependentValues.h.

References mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::DoUpdateValues().

00247     {
00248         m_bFixup = bAutoFixup;
00249         if (m_bFixup)
00250         {
00251             FixupSum();
00252             DoUpdateValues(-1);
00253         }
00254     }

Here is the call graph for this function:

mbo::TDependentValues::DoUpdateValues

template<typename _Ty, size_t _Count, _Ty _Min, _Ty _Max, _Ty _Step>
virtual bool mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetAutoFixup (  )  const [inline, protected, virtual]

Returns:
whether auto fixup mode is active

Definition at line 258 of file TDependentValues.h.

00259     {
00260         return m_bFixup;
00261     }


The documentation for this class was generated from the following file:
  Hosted on code.google.com  
© Marcus Börger
Generated on Fri Jan 18 21:21:13 2008 for MBO-lib by doxygen 1.5.4