3 #include "KVIntegerList.h"
7 #include "TObjString.h"
18 void KVIntegerList::init()
23 fRegle =
new TArrayI(100);
24 fLimiteRegle = fRegle->fN - 1;
49 if (fRegle)
delete fRegle;
59 void KVIntegerList::ResetRegle()
62 for (Int_t ii = 0; ii < fRegle->fN; ii += 1)
104 Info(
"Print",
"%s : population %d", GetName(),
GetPopulation());
113 void KVIntegerList::SetPartition(
const Char_t* par)
124 if (tamp.Contains(
"(")) {
125 if (!tamp.Contains(
")")) {
126 KVError::Warning(
this,
"SetPartition",
"%s ->pb de coherence dans les parentheses", tamp.Data());
130 toks = tamp.Tokenize(
"(");
131 val = ((TObjString*)toks->At(0))->GetString().Atoi();
132 freq = ((TObjString*)toks->At(1))->GetString().Atoi();
149 Bool_t KVIntegerList::ToBeUpdated()
177 void KVIntegerList::Update()
183 for (Int_t ii = fLimiteRegle; ii >= 0; ii -= 1) {
184 Int_t contenu = fRegle->At(ii);
187 stamp.Form(
"%d", ii);
190 stamp.Form(
"(%d)", contenu);
196 if (snom !=
"") snom.Remove(snom.Length() - 1);
197 SetName(snom.Data());
198 fLength = snom.Length();
275 void KVIntegerList::add_values(Int_t val, Int_t freq)
288 if (val > fLimiteRegle) {
289 fRegle->Set(val + 1);
293 fRegle->AddAt(fRegle->At(val) + freq, val);
306 add_values(val, freq);
318 for (Int_t ii = 0; ii < mult; ii += 1)
330 Int_t mult = tab->GetSize();
331 for (Int_t ii = 0; ii < mult; ii += 1)
343 for (Int_t ii = 0; ii < mult; ii += 1)
366 Add(TMath::Nint(val), 1);
378 Add(TMath::Nint(val), freq);
396 Bool_t KVIntegerList::remove_values(Int_t val, Int_t freq)
409 if (val > fLimiteRegle)
return kFALSE;
414 Int_t freq_rel = TMath::Min(fRegle->At(val), freq);
415 fRegle->AddAt(TMath::Max(fRegle->At(val) - freq, 0), val);
437 return remove_values(val, freq);
564 TNamed* nm =
new TNamed(GetName(), Form(
"%d",
GetPopulation()));
580 TArrayI* tab =
new TArrayI(
GetNbre());
582 for (Int_t ii = fLimiteRegle; ii >= 0; ii -= 1) {
583 Int_t contenu = fRegle->At(ii);
584 for (Int_t cc = 0; cc < contenu; cc += 1)
585 tab->AddAt(ii, mm++);
604 Int_t* tab =
new Int_t[
GetNbre()];
606 for (Int_t ii = fLimiteRegle; ii >= 0; ii -= 1) {
607 Int_t contenu = fRegle->At(ii);
608 for (Int_t cc = 0; cc < contenu; cc += 1)
631 const char* s1 = this->GetName();
632 const char* s2 = obj->GetName();
639 while (s1[ii] == s2[ii]) {
640 if (ii == len1)
return 0;
657 return (val <= fLimiteRegle ? fRegle->At(val) : -1);
698 void KVIntegerList::Streamer(TBuffer& R__b)
705 if (R__b.IsReading()) {
706 R__b.ReadClassBuffer(TNamed::Class(),
this);
707 DeducePartitionFromTNamed();
711 R__b.WriteClassBuffer(TNamed::Class(),
this);
722 void KVIntegerList::DeducePartitionFromTNamed()
727 DeducePartitionFromName();
728 DeducePopulationFromTitle();
736 void KVIntegerList::DeducePopulationFromTitle()
749 void KVIntegerList::DeducePartitionFromName()
753 SetPartition(GetName());
Handle a list of positive integers (partition)
void Copy(TObject &named) const override
Classe dérivée de TNamed, fait une copie vers l'objet obj.
Int_t * CreateTableOfValues()
void Add(TArrayI *tab)
void Fill(Double_t* tab,Int_t mult);
void Print(Option_t *option="") const override
Classe dérivée de TNamed, Imprime la liste formattée et la population associée.
void ResetPopulation()
Remet à 1 la population (comme dans le ctor)
Ssiz_t GetLengthName() const
void AddPopulation(Int_t pop)
Incrémente la population de "pop" fois.
Int_t GetFrequency(Int_t val) const
Bool_t Contains(Int_t val) const
TNamed * CreateTNamed()
KVPartition* CreateKVPartition(Int_t mom_max=5);.
void Clear(Option_t *option="") override
Classe dérivée de TNamed, Reinitialisation de l'object.
void Fill(Int_t *tab, Int_t mult)
void Fill(TArrayI* tab);
void SetPopulation(Int_t pop)
Initialise la population à "pop".
Int_t GetPopulation() const
Bool_t Remove(Int_t val, Int_t freq)
TArrayI * CreateTArrayI()
Int_t Compare(const TObject *obj) const override
Bool_t RemoveAll(Int_t val)
virtual ~KVIntegerList()
Destructor.
KVIntegerList()
Default constructor.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
KVString Next(Bool_t strip_whitespace=kFALSE) const
void Warning(UserClass p, const char *location, const char *va_(fmt),...)