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();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// 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
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -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
|
||||
//
|
||||
// @base public | TSortable
|
||||
|
Loading…
x
Reference in New Issue
Block a user