#include <TDependentValues.h>
Public Types | |
typedef _Ty | ValueType |
typedef _Ty | ValueArray [_Count] |
Public Member Functions | |
TDependentValues () | |
const ValueType & | operator[] (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 |
The values of this class are dependent in the following sense:
Definition at line 53 of file TDependentValues.h.
typedef _Ty mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::ValueType |
Definition at line 57 of file TDependentValues.h.
typedef _Ty mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::ValueArray[_Count] |
Definition at line 58 of file TDependentValues.h.
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 }
const ValueType& mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::operator[] | ( | size_t | nIndex | ) | const [inline] |
nIndex | index of value to access |
Definition at line 72 of file TDependentValues.h.
ValueType mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetValue | ( | size_t | nIndex | ) | const [inline] |
nIndex | index of value to access |
Definition at line 81 of file TDependentValues.h.
ValueType mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetSum | ( | ) | const [inline] |
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 }
bool mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetValuesOk | ( | ) | const [inline] |
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 }
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 }
void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetAllValues | ( | const ValueArray * | pvtValues | ) | [inline] |
Set all parameters at once
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 }
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
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 }
virtual void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::DoUpdateValues | ( | size_t | nIndex | ) | [inline, protected, virtual] |
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().
virtual void mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::SetAutoFixup | ( | bool | bAutoFixup | ) | [inline, protected, virtual] |
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 }
virtual bool mbo::TDependentValues< _Ty, _Count, _Min, _Max, _Step >::GetAutoFixup | ( | ) | const [inline, protected, virtual] |
Hosted on code.google.com | © Marcus Börger | Generated on Fri Jan 18 21:21:13 2008 for MBO-lib by ![]() |