KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVTrieur.cpp
Go to the documentation of this file.
1 #include <math.h>
2 #include <stdio.h>
3 #include "KVTrieur.h"
4 
5 using namespace std;
6 
8 
12 
13 //________________________________________________________
14 
20 
22 {
23 //
24 // Initialisation des champs de KVTrieur
25 // Cette methode privee n'est appelee par les createurs
26 //
27 
28  nb++;
29  nb_crea++;
30  nb_cases = 0;
31  noms_cases = 0;
32 }
33 
34 
35 
40 
42 {
43 //
44 // Createur par default
45 //
46  Char_t* nom = new Char_t[80];
47 
48  initKVTrieur();
49  sprintf(nom, "KVTrieur_%d", nb_crea);
50  SetName(nom);
51  SetTitle(nom);
52 #ifdef DEBUG_KVTrieur
53  cout << nb << " crees...(defaut) " << endl;
54 #endif
55  delete[]nom;
56 }
57 
58 
59 
64 
66 {
67 //
68 // Constructeur avec un nom
69 //
70  initKVTrieur();
71  SetName(nom);
72  SetTitle(nom);
73 #ifdef DEBUG_KVTrieur
74  cout << nb << " crees...(nom) " << endl;
75 #endif
76 }
77 
78 
79 
84 
86 {
87 //
88 // Constructeur avec un nombre de cases et un nom
89 //
90  initKVTrieur();
91  SetName(nom);
92  SetTitle(nom);
93  if (nbcases > 0) {
94  Char_t nomc[80];
95  Char_t nomt[80];
96  nb_cases = nbcases;
97  noms_cases = new TClonesArray("TNamed", nbcases);
98  for (Int_t i = 0; i < nbcases; i++) {
99  sprintf(nomc, "%s_C%d", this->GetName(), i + 1);
100  sprintf(nomt, "Case numero %d", i + 1);
101  new ((*noms_cases)[i]) TNamed(nomc, nomt);
102  }
103  }
104 #ifdef DEBUG_KVTrieur
105  cout << nb << " crees...(nom) " << endl;
106 #endif
107 }
108 
109 
110 
115 
117 {
118 //
119 // Contructeur par Copie
120 //
121  initKVTrieur();
122 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
123  a.Copy(*this);
124 #else
125  ((KVTrieur&) a).Copy(*this);
126 #endif
127 #ifdef DEBUG_KVTrieur
128  cout << nb << " crees...(Copy) " << endl;
129 #endif
130 }
131 
132 
133 
138 
139 KVTrieur::~KVTrieur(void)
140 {
141 //
142 // Destructeur
143 //
144 #ifdef DEBUG_KVTrieur
145  cout << "Destruction de " << GetName() << "..." << endl;
146 #endif
147  nb--;
148 
149  if (noms_cases) { // Destuction du TClonesArray contenant les noms de cases
150  noms_cases->Clear();
151  delete noms_cases;
152  }
153 
154  nb_dest++;
155 }
156 
157 
158 
159 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
160 
162 
163 void KVTrieur::Copy(TObject& a) const
164 {
165 #else
166 void KVTrieur::Copy(TObject& a)
167 {
168 #endif
169 //
170 // Methode de Copy
171 //
172  Char_t nom[80];
173 
174 #ifdef DEBUG_KVTrieur
175  cout << "Copy de " << a.GetName() << "..." << endl;
176 #endif
177 #ifdef DEBUG_KVTrieur
178  sprintf(nom, "Copy de %s", a.GetName());
179 #else
180  sprintf(nom, "Copy_%s", a.GetName());
181 #endif
182  ((KVTrieur&) a).SetName(nom);
183  ((KVTrieur&) a).SetTitle(nom);
184 
185  ((KVTrieur&) a).nb_cases = this->nb_cases;
186  if (this->noms_cases) {
187  ((KVTrieur&) a).noms_cases =
188  new TClonesArray("TNamed", this->nb_cases);
189  TClonesArray* tca = ((KVTrieur&) a).noms_cases;
190  Char_t nomc[80];
191  for (Int_t i = 0; i < this->nb_cases; i++) {
192  TNamed* c = (TNamed*) this->noms_cases->At(i);
193  sprintf(nomc, "%s_C%d", this->GetName(), i + 1);
194  new ((*tca)[i]) TNamed(nomc, c->GetTitle());
195  }
196  }
197  else {
198  ((KVTrieur&) a).noms_cases = 0;
199  }
200 #ifdef DEBUG_KVTrieur
201  cout << "Nom de la Copy (arguement): " << nom << endl;
202  cout << "Nom de la Copy (resultat) : " << GetName() << endl;
203 #endif
204 }
205 
206 
207 
212 
214 {
215 //
216 // Operateur =
217 //
218 #ifdef DEBUG_KVTrieur
219  cout << "Copie par egalite de " << a.GetName() << "..." << endl;
220 #endif
221 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
222  a.Copy(*this);
223 #else
224  ((KVTrieur&) a).Copy(*this);
225 #endif
226 #ifdef DEBUG_KVTrieur
227  cout << "Nom de la Copie par egalite: " << GetName() << endl;
228 #endif
229  return *this;
230 }
231 
232 
233 
238 
240 {
241 //
242 // On retourne le nom d'une case
243 //
244  if (noms_cases) {
245  if (i > 0 && i <= nb_cases) {
246  return ((TNamed*) noms_cases->At(i - 1))->GetTitle();
247  }
248  else {
249  cout << "Le numero de case est incorrect..." << endl;
250  return 0;
251  }
252  }
253  else {
254  cout << "Les noms de cases n'ont pas etes definis..." << endl;
255  return 0;
256  }
257 }
258 
259 
260 
265 
267 {
268 //
269 // On impose le nom d'une case
270 //
271  if (noms_cases) {
272  if (i > 0 && i <= nb_cases) {
273  ((TNamed*) noms_cases->At(i - 1))->SetTitle(s);
274  }
275  else {
276  cout << "Le numero de case est incorrect..." << endl;
277  }
278  }
279  else {
280  cout << "Les noms de cases n'ont pas etes definis..." << endl;
281  }
282 }
283 
284 
285 
290 
292 {
293 //
294 // On retourne le nombre de cases
295 //
296  return nb_cases;
297 }
298 
299 
300 
305 
307 {
308 //
309 // On ajuste le nombre de cases
310 //
311  if (n != nb_cases) {
312  Char_t nomc[80];
313  Char_t nomt[80];
314  nb_cases = n;
315  if (noms_cases) {
316  noms_cases->Clear();
317  delete noms_cases;
318  }
319  noms_cases = new TClonesArray("TNamed", n);
320  for (Int_t i = 0; i < nb_cases; i++) {
321  sprintf(nomc, "%s_C%d", this->GetName(), i + 1);
322  sprintf(nomt, "Case numero %d", i + 1);
323  new ((*noms_cases)[i]) TNamed(nomc, nomt);
324  }
325  }
326 }
327 
328 
329 
334 
335 Int_t KVTrieur::GetNumCase(void* ...)
336 {
337 //
338 // On retourne le numero de case
339 //
340  cout << "Classe virtuelle, pas d'argument valables..." << endl;
341  return -1;
342 }
343 
344 
345 
350 
352 {
353 //
354 // On retourne le numero de case
355 //
356  cout << "Classe virtuelle, pas d'argument valables..." << endl;
357  return -1;
358 }
359 
360 
int Int_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
#define c(i)
char Char_t
double Double_t
Base class for KaliVeda framework.
Definition: KVBase.h:135
Base class for Sorting purposes.
Definition: KVTrieur.h:36
virtual void SetNbCases(Int_t n)
Retourne le nom d'une case.
Definition: KVTrieur.cpp:306
TClonesArray * noms_cases
Definition: KVTrieur.h:45
static Int_t nb_crea
Definition: KVTrieur.h:40
static Int_t nb
Champs Statiques:
Definition: KVTrieur.h:39
void initKVTrieur(void)
Methodes.
Definition: KVTrieur.cpp:21
virtual Int_t GetNbCases(void)
ajuste le nombre de cases.
Definition: KVTrieur.cpp:291
KVTrieur(void)
Definition: KVTrieur.cpp:41
KVTrieur & operator=(const KVTrieur &a)
Definition: KVTrieur.cpp:213
virtual void SetNomCase(Int_t i, Char_t *s)
Retourne le nom d'une case.
Definition: KVTrieur.cpp:266
virtual Int_t GetNumCase(Double_t x)=0
Retourne le nombre de cases.
Definition: KVTrieur.cpp:351
Int_t nb_cases
Champs publics:
Definition: KVTrieur.h:44
static Int_t nb_dest
Definition: KVTrieur.h:41
virtual const Char_t * GetNomCase(Int_t i)
Definition: KVTrieur.cpp:239
virtual void Copy(TObject &obj) const
Make a copy of this object.
Definition: KVTrieur.cpp:163
virtual void Clear(Option_t *option="")
virtual const char * GetName() const
virtual void SetTitle(const char *title="")
virtual void SetName(const char *name)
TObject * At(Int_t idx) const
friend friend class TClonesArray
const Int_t n
const long double s
Definition: KVUnits.h:94
auto * a