Aggiunto TGenerici_distrib
git-svn-id: svn://10.65.10.50/trunk@2561 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b795040bbb
commit
42bd4c1615
@ -1327,6 +1327,52 @@ void TDistrib::init (
|
|||||||
if (zap) _slices.destroy();
|
if (zap) _slices.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Generic_distrib
|
||||||
|
// Oggetto per dividere un real in parti prefissate
|
||||||
|
// in modo che la loro somma dia sempre il real di partenza
|
||||||
|
// /////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
void TGeneric_distrib::add(real slice)
|
||||||
|
{
|
||||||
|
CHECK (!_ready, "TGeneric_distrib: les jeux sont faits");
|
||||||
|
_totslices += slice;
|
||||||
|
_slices.add (slice);
|
||||||
|
}
|
||||||
|
|
||||||
|
real TGeneric_distrib::get ()
|
||||||
|
{
|
||||||
|
_ready = TRUE;
|
||||||
|
CHECK (_current < _slices.items(), "TGeneric_distrib: too many gets");
|
||||||
|
real & currslice = (real &) _slices[_current++];
|
||||||
|
real r = (_tot * currslice) / _totslices;
|
||||||
|
r.round (_decs);
|
||||||
|
_tot -= r;
|
||||||
|
_totslices -= currslice;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @mfunc Inizializza l'oggetto
|
||||||
|
void TGeneric_distrib::init (
|
||||||
|
const real & r, // @parm Importo da dividere
|
||||||
|
bool zap) // @parm Permette di cancellare le percenutali immesse
|
||||||
|
// (default FALSE)
|
||||||
|
|
||||||
|
// @comm Se <p zap> e' vero cancella tutte le percentuali immesse, altrimenti
|
||||||
|
// cambia solo il totale
|
||||||
|
{
|
||||||
|
_current = 0; _totslices = 0;
|
||||||
|
_tot = r; _ready = FALSE;
|
||||||
|
if (zap) _slices.destroy();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const int items = _slices.items();
|
||||||
|
for (int i = 0; i < items; i++)
|
||||||
|
_totslices += (real &) _slices[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Importo
|
// Importo
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
@ -340,6 +340,61 @@ public:
|
|||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// @class TGeneric_distrib | Classe per dividere un real in parti fissate
|
||||||
|
// in modo che la loro somma dia sempre il real di partenza
|
||||||
|
//
|
||||||
|
// @base public | TObject
|
||||||
|
|
||||||
|
class TGeneric_distrib : public TObject
|
||||||
|
{
|
||||||
|
|
||||||
|
// @access Private Member
|
||||||
|
|
||||||
|
// @cmember Totale da ripartire
|
||||||
|
real _tot;
|
||||||
|
// @cmember Totale parti da distribuire
|
||||||
|
real _totslices;
|
||||||
|
// @cmember Pronto per essere usato (tutti gli add() fatti)
|
||||||
|
bool _ready;
|
||||||
|
// @cmember Percentuali da distribuire
|
||||||
|
TArray _slices;
|
||||||
|
// @cmember Indice delle percentuali aggiunte o estratte
|
||||||
|
int _current;
|
||||||
|
// @cmember Precisione
|
||||||
|
int _decs;
|
||||||
|
|
||||||
|
// @access Public Member
|
||||||
|
public:
|
||||||
|
|
||||||
|
// @cmember Aggiunge una percentuale per la ripartizione
|
||||||
|
virtual void add(real slice);
|
||||||
|
// @cmember Ritorna il successivo degli importi suddivisi
|
||||||
|
virtual real get();
|
||||||
|
|
||||||
|
// @cmember Inizializza il numero di decimali
|
||||||
|
void set_dec(int decs) { _decs = decs;}
|
||||||
|
|
||||||
|
// @cmember Inizializza l'oggetto
|
||||||
|
void init(const real& r, bool zap = FALSE);
|
||||||
|
|
||||||
|
// @cmember Assegnamento di un importo
|
||||||
|
void operator =(const real& r)
|
||||||
|
{ init(r); }
|
||||||
|
// @cmember Ritorna l'ultima percentuale aggiunta
|
||||||
|
const real& last_slice() const
|
||||||
|
{
|
||||||
|
CHECK(_current,"TGeneric_distrib: slices not set");
|
||||||
|
return (const real&)_slices[_current-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// @cmember Costruttore
|
||||||
|
TGeneric_distrib(const real& r,int round=0) : _totslices(0.0),_tot(r),_ready(FALSE),_current(0),_decs(round),_slices(4)
|
||||||
|
{}
|
||||||
|
// @cmember Distruttore
|
||||||
|
virtual ~TGeneric_distrib()
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
// @class TImporto | Classe per la definizione di oggetti con sezione e importo
|
// @class TImporto | Classe per la definizione di oggetti con sezione e importo
|
||||||
//
|
//
|
||||||
// @base public | TSortable
|
// @base public | TSortable
|
||||||
|
Loading…
x
Reference in New Issue
Block a user