GSI Object Oriented Online Offline (Go4)  GO4-5.3.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
TGo4Slot.cxx
Go to the documentation of this file.
1 // $Id: TGo4Slot.cxx 1461 2015-05-29 11:12:14Z linev $
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum für Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #include "TGo4Slot.h"
15 
16 #include <stdio.h>
17 #include <string.h>
18 #include <stdlib.h>
19 #include "TROOT.h"
20 #include "TClass.h"
21 
22 #include "TGo4Iter.h"
23 #include "TGo4ObjectProxy.h"
24 
25 class TGo4SlotIter : public TGo4LevelIter {
26  public:
28 
29  TGo4SlotIter(const TGo4Slot* slot) : TGo4LevelIter(), fSlot(slot), fIndex(-1) {}
30 
31  virtual ~TGo4SlotIter() {}
32 
33  virtual Bool_t next()
34  { return (fSlot!=0) && (++fIndex<fSlot->NumChilds()); }
35 
36  virtual Bool_t isfolder() { return curSlot()->HasSubLevels(); }
37 
38  virtual Bool_t isslotsfolder() { return curSlot()->HasSlotsSubLevels(); }
39 
40  virtual TGo4LevelIter* subiterator() { return curSlot()->MakeLevelIter(); }
41 
42  virtual TGo4Slot* getslot() { return curSlot(); }
43 
44  virtual const char* name() { return curSlot()->GetName(); }
45 
46  virtual const char* info() { return curSlot()->GetInfo(); }
47 
48  virtual Int_t sizeinfo() { return curSlot()->GetSizeInfo(); }
49 
50  virtual Int_t GetKind() { return curSlot()->GetSlotKind(); }
51 
52  virtual const char* GetClassName() { return curSlot()->GetSlotClassName(); }
53 
54  protected:
55  TGo4Slot* curSlot() const { return fSlot->GetChild(fIndex); }
56 
57  const TGo4Slot* fSlot;
58  Int_t fIndex;
59 };
60 
61 // **********************************************************************************
62 
63 
65  TNamed(),
66  fParent(0),
67  fChilds(0),
68  fPars(),
69  fProxy(0),
70  fAssignFlag(-1),
71  fAssignCnt(0)
72 {
73  SetBit(kStartDelete, kFALSE);
74 }
75 
77  TNamed(),
78  fParent(parent),
79  fChilds(0),
80  fPars(),
81  fProxy(0),
82  fAssignFlag(-1),
83  fAssignCnt(0)
84 {
85  SetBit(kStartDelete, kFALSE);
86 
87  if (parent!=0)
88  parent->AddChild(this);
89 
90  Event(this, evCreate);
91 }
92 
93 TGo4Slot::TGo4Slot(TGo4Slot* parent, const char* name, const char* title) :
94  TNamed(name, title),
95  fParent(parent),
96  fChilds(0),
97  fPars(),
98  fProxy(0),
99  fAssignFlag(-1),
100  fAssignCnt(0)
101 {
102  SetBit(kStartDelete, kFALSE);
103 
104  if (parent!=0)
105  parent->AddChild(this);
106 
107  Event(this, evCreate);
108 }
109 
111 {
112  // sequence of calls here is very important
113  // First, we emit message from slot itself to inform all dependent slots
114  // that we intend to delete our objects. After that all depenedent slots
115  // are informed and we can remove object (with clean proxy), delete childs
116  // and remove parameters
117 
118  if (gDebug>1) Info("~TGo4Slot","%p Starting name = %s", this, GetFullName().Data());
119 
120  SetBit(kStartDelete, kTRUE);
121 
122  if (gDebug>1) Info("~TGo4Slot","%p CleanProxy()", this);
123  CleanProxy();
124 
125  if (gDebug>1) Info("~TGo4Slot","%p Event(this, evDelete)", this);
126  Event(this, evDelete);
127 
128  if (gDebug>1) Info("~TGo4Slot","%p DeleteChilds()", this);
129  DeleteChilds();
130 
131  if (gDebug>1) Info("~TGo4Slot","%p Detach from parent", this);
132  if (fParent!=0) {
133  fParent->RemoveChild(this);
134  fParent = 0;
135  }
136 
137  if (gDebug>1) Info("~TGo4Slot","%p fPars.Delete()", this);
138  fPars.Delete();
139 
140  if (fChilds!=0) {
141  if (gDebug>1) Info("~TGo4Slot","%p Detach rest children", this);
142  for (Int_t n=0;n<=fChilds->GetLast();n++) {
143  TGo4Slot* child = (TGo4Slot*) fChilds->At(n);
144  if (child==0) continue;
145  child->fParent = 0;
146  fChilds->Remove(child);
147  }
148 
149  delete fChilds;
150  fChilds = 0;
151  }
152 
153  if (gDebug>1) Info("~TGo4Slot","%p Finish", this);
154 
155 
156 // *********************************************************************
157 // This is new sequence, but also has a problems
158 // SetBit(kStartDelete, kTRUE);
159 
160 // Info("~TGo4Slot","DeleteChilds() %x", this);
161 // DeleteChilds();
162 
163 // Info("~TGo4Slot","Event(this, evDelete) %x %s", this, GetFullName().Data());
164 // Event(this, evDelete);
165 
166 // Info("~TGo4Slot","CleanProxy() %x", this);
167 // CleanProxy();
168 
169 // Info("~TGo4Slot","Dettach from parent %x", this);
170 // if (fParent!=0) {
171 // fParent->RemoveChild(this);
172 // fParent = 0;
173 // }
174 
175 // Info("~TGo4Slot","fPars.Delete() %x", this);
176 // fPars.Delete();
177 
178 
179 
180 
181 // *********************************************************************
182 // This is old sequence. CleanProxy() breaks all dependency and delete objects first
183 // before message can be distributed over dependent slots
184 // CleanProxy();
185 // DeleteChilds();
186 // Event(this, evDelete);
187 // fPars.Delete();
188 }
189 
190 void TGo4Slot::Delete(Option_t *)
191 {
192  if (DoingDelete()) return;
193 
194  delete this;
195 }
196 
197 Bool_t TGo4Slot::IsParent(const TGo4Slot* slot) const
198 {
199  TGo4Slot* parent = GetParent();
200  while (parent!=0) {
201  if (parent==slot) return kTRUE;
202  parent = parent->GetParent();
203  }
204  return kFALSE;
205 }
206 
207 void TGo4Slot::DeleteChild(const char* name)
208 {
209  TGo4Slot* child = FindChild(name);
210  if (child==0) return;
211 
212  if (!child->DoingDelete())
213  delete child;
214 
215  if ((NumChilds()==0) && (fChilds!=0)) {
216  delete fChilds;
217  fChilds = 0;
218  }
219 }
220 
221 void TGo4Slot::DeleteChilds(const char* startedwith)
222 {
223  UInt_t len = startedwith==0 ? 0 : strlen(startedwith);
224 
225  for(Int_t n = NumChilds()-1; n>=0; n--) {
226  TGo4Slot* child = GetChild(n);
227  if (child==0) continue;
228 
229  Bool_t flag = (len==0) ||
230  ((len<strlen(child->GetName())) &&
231  (strncmp(child->GetName(), startedwith, len)==0));
232 
233  if (!flag) continue;
234 
235  if (!child->DoingDelete())
236  delete child;
237  }
238 
239  if ((fChilds!=0) && (NumChilds()==0)) {
240  delete fChilds;
241  fChilds = 0;
242  }
243 }
244 
246 {
247  if (child==0) return -1;
248  for(int n=0;n<NumChilds();n++)
249  if (GetChild(n)==child) return n;
250  return -1;
251 }
252 
253 
255 {
256  if (child==0) return 0;
257  for(int n=0;n<NumChilds()-1;n++)
258  if (GetChild(n)==child) return GetChild(n+1);
259  return 0;
260 }
261 
262 TGo4Slot* TGo4Slot::FindChild(const char* name)
263 {
264  if ((name==0) || (*name==0)) return 0;
265  Int_t num = NumChilds();
266  for(Int_t n=0;n<num;n++) {
267  TGo4Slot* slot = GetChild(n);
268  if (strcmp(slot->GetName(), name)==0) return slot;
269  }
270  return 0;
271 }
272 
273 
275 {
276  TGo4Slot* parent = GetParent();
277  return (parent==0) ? 0 : parent->GetNextChild(this);
278 }
279 
280 void TGo4Slot::ProduceFullName(TString& name, TGo4Slot* toparent)
281 {
282  if ((GetParent()!=0) && (GetParent()!=toparent)) {
283  GetParent()->ProduceFullName(name, toparent);
284  if (name.Length()>0) name += "/";
285  name+=GetName();
286  } else
287  name = GetName();
288 }
289 
290 TString TGo4Slot::GetFullName(TGo4Slot* toparent)
291 {
292  TString res;
293  ProduceFullName(res, toparent);
294  return res;
295 }
296 
297 
299 {
300  return GetParent() ? GetParent()->GetOM() : 0;
301 }
302 
304 {
305  if (fProxy!=0) {
306 // Info("CleanProxy","Proxy %s", fProxy->ClassName());
307  fProxy->Finalize(this);
308  delete fProxy;
309  fProxy = 0;
310  }
311 }
312 
314 {
315  CleanProxy();
316 
317  fProxy = cont;
318 
319  const char* contclass = (fProxy!=0) ? fProxy->ClassName() : 0;
320 
321  SetPar("::ProxyClass", contclass);
322 
323  if (fProxy!=0) {
324  fProxy->Initialize(this);
325  Event(this, evContAssigned);
326  }
327 }
328 
329 const char* TGo4Slot::GetInfo()
330 {
331  const char* info = 0;
332  if (fProxy!=0)
333  info = fProxy->GetContainedObjectInfo();
334  if (info==0) info = GetTitle();
335  return info;
336 }
337 
339 {
340  Int_t sz = -1;
341  if (fProxy!=0)
342  sz = fProxy->GetObjectSizeInfo();
343  return sz;
344 }
345 
347 {
349 }
350 
351 const char* TGo4Slot::GetSlotClassName() const
352 {
353  return (fProxy!=0) ? fProxy->GetContainedClassName() : 0;
354 }
355 
356 Bool_t TGo4Slot::IsAcceptObject(TClass* cl)
357 {
358  return fProxy!=0 ? fProxy->IsAcceptObject(cl) : kFALSE;
359 }
360 
361 Bool_t TGo4Slot::AssignObject(TObject* obj, Bool_t owner)
362 {
363  fAssignCnt++;
364  fAssignFlag = kFALSE;
365  if (fProxy!=0)
366  fAssignFlag = fProxy->AssignObject(this, obj, owner);
367  else
368  if (owner) delete obj;
369 
370  return (fAssignFlag == (Int_t) kTRUE);
371 }
372 
374 {
375  if (fProxy==0) return 0;
376  return fProxy->GetAssignedObject();
377 }
378 
379 void TGo4Slot::Update(Bool_t strong)
380 {
381  if (fProxy!=0)
382  fProxy->Update(this, strong);
383 
384  for(int n=0;n<NumChilds();n++)
385  GetChild(n)->Update(strong);
386 }
387 
388 
390 {
391  if ((fProxy!=0) && fProxy->Use()) return fProxy->HasSublevels();
392 
393  return HasSlotsSubLevels();
394 }
395 
397 {
398  return NumChilds()>0;
399 }
400 
402 {
403  TGo4LevelIter* res = 0;
404 
405  if ((fProxy!=0) && fProxy->Use())
406  res = fProxy->MakeIter();
407 
408  if ((res==0) && (NumChilds() > 0)) res = new TGo4SlotIter(this);
409 
410  return res;
411 }
412 
414 {
415 // std::cout << " TGo4Slot::GetSlotProxy " << name << " slot = " << GetName()
416 // << " cont = " << (fProxy ? fProxy->ClassName() : "null") << std::endl;
417 
418  if ((fProxy!=0) && fProxy->Use())
419  return fProxy->ProvideAccess(name);
420 
421  if ((name==0) || (*name==0)) return new TGo4ObjectAccess(this);
422 
423  const char* subname = 0;
424 
425  TGo4Slot* subslot = DefineSubSlot(name, subname);
426 
427  return (subslot==0) ? 0 : subslot->ProvideSlotAccess(subname);
428 }
429 
430 void TGo4Slot::SaveData(TDirectory* dir, Bool_t onlyobjs)
431 {
432  if (fProxy!=0)
433  fProxy->WriteData(this, dir, onlyobjs);
434 }
435 
436 void TGo4Slot::ReadData(TDirectory* dir)
437 {
438  CleanProxy();
439 
440  const char* contclass = GetPar("::ProxyClass");
441  TClass* cl = (contclass==0) ? 0 : gROOT->GetClass(contclass);
442  if (cl==0) return;
443 
444  TGo4Proxy* cont = (TGo4Proxy*) cl->New();
445 
446  cont->ReadData(this, dir);
447 
448  SetProxy(cont);
449 }
450 
451 TGo4Slot* TGo4Slot::DefineSubSlot(const char* name, const char* &subname) const
452 {
453  Int_t len = 0;
454 
455  const char* spos = strchr(name,'/');
456 
457  if (spos==0) { len = strlen(name); subname=0; }
458  else { len = spos-name; subname=spos+1; }
459  UInt_t ulen = (UInt_t) len;
460 
461  Int_t num = NumChilds();
462  for(int n=0;n<num;n++) {
463  TGo4Slot* slot = GetChild(n);
464  const char* slotname = slot->GetName();
465  if ((strlen(slotname)==ulen) && (strncmp(slotname, name, len)==0)) return slot;
466  }
467 
468  return 0;
469 }
470 
471 TGo4Slot* TGo4Slot::GetSlot(const char* name, Bool_t force)
472 {
473  if ((name==0) || (*name==0)) return this;
474 
475  const char* subname = 0;
476 
477  TGo4Slot* subslot = DefineSubSlot(name, subname);
478 
479  if ((subslot==0) && force) {
480  TString newname;
481  if (subname==0) newname = name;
482  else newname.Append(name, subname-name-1);
483  subslot = new TGo4Slot(this, newname.Data(), "folder");
484  }
485 
486  return subslot==0 ? 0 : subslot->GetSlot(subname, force);
487 }
488 
489 TGo4Slot* TGo4Slot::FindSlot(const char* fullpath, const char** subname)
490 {
491  // exclude current dir and process parent dir
492  while ((fullpath!=0) && (strlen(fullpath)>2)) {
493  // ignore current dir
494  if (strncmp(fullpath, "./", 2) == 0) { fullpath += 2; continue; }
495  // process parent dir
496 
497  if ((strncmp(fullpath, "../", 3) == 0) && GetParent())
498  return GetParent()->FindSlot(fullpath + 3, subname);
499 
500  break;
501  }
502 
503  TGo4Slot* slot = GetSlot(fullpath);
504  if (slot!=0) {
505  if (subname!=0) *subname = 0;
506  return slot;
507  }
508 
509  const char* curname = fullpath;
510  TGo4Slot* curslot = this;
511 
512  while (curslot!=0) {
513  const char* nextname = 0;
514  TGo4Slot* nextslot = curslot->DefineSubSlot(curname, nextname);
515  if (nextslot==0) break;
516  curslot = nextslot;
517  curname = nextname;
518  }
519 
520  if (subname!=0) *subname = curname;
521  return curslot;
522 }
523 
524 
526 {
527  if (fChilds==0) return kFALSE;
528  Int_t indx1 = (before==0) ? -1 : fChilds->IndexOf(before);
529  Int_t indx2 = (slot==0) ? -1 : fChilds->IndexOf(slot);
530  if ((indx1<0) || (indx2<0) || (indx1>indx2)) return kFALSE;
531  if (indx1==indx2) return kTRUE;
532 
533  for (int n=indx2;n>indx1;n--)
534  (*fChilds)[n] = (*fChilds)[n-1];
535 
536  (*fChilds)[indx1] = slot;
537 
538  return kTRUE;
539 }
540 
542 {
543  if (fChilds==0) return kFALSE;
544  Int_t indx1 = (slot==0) ? -1 : fChilds->IndexOf(slot);
545  Int_t indx2 = (after==0) ? -1 : fChilds->IndexOf(after);
546  if ((indx1<0) || (indx2<0) || (indx1>indx2)) return kFALSE;
547 
548  if (indx1==indx2) return kTRUE;
549 
550  for (int n=indx1;n<indx2;n++)
551  (*fChilds)[n] = (*fChilds)[n+1];
552  (*fChilds)[indx2] = slot;
553 
554  return kTRUE;
555 }
556 
558 {
559  if (child==0) return;
560  if (fChilds==0) fChilds = new TObjArray;
561  fChilds->Add(child);
562 }
563 
565 {
566  if ((child==0) || (fChilds==0)) return;
567  fChilds->Remove(child);
568  fChilds->Compress();
569  if (fChilds->GetLast()<0) {
570  delete fChilds;
571  fChilds = 0;
572  }
573 }
574 
575 void TGo4Slot::Event(TGo4Slot* source, Int_t id, void* param)
576 {
577  Bool_t doforward = kTRUE;
578 
579  if (fProxy!=0)
580  doforward = fProxy->ProcessEvent(this, source, id, param);
581 
582  if (doforward) ForwardEvent(source, id, param);
583 }
584 
585 void TGo4Slot::ForwardEvent(TGo4Slot* source, Int_t id, void* param)
586 {
587 // std::cout << "ForwardEvent " << id <<" from " << GetName() << " to "
588 // << ((GetParent()!=0) ? GetParent()->GetName() : "null") << std::endl;
589 
590  if (GetParent()!=0)
591  GetParent()->Event(source, id, param);
592 }
593 
594 void TGo4Slot::RecursiveRemove(TObject* obj)
595 {
596  if (fProxy!=0)
597  if (fProxy->RemoveRegisteredObject(obj))
598  delete this;
599 }
600 
601 void TGo4Slot::Print(Option_t* option) const
602 {
603  TGo4Iter iter((TGo4Slot*) this);
604  while (iter.next()) {
605  printf("%*c%s%s - %s\n", (iter.level()+1)*2, ' ', iter.getname(), (iter.isfolder() ? "/" : ""), iter.getinfo());
606  }
607 }
608 
609 void TGo4Slot::SetPar(const char* name, const char* value)
610 {
611  if ((name==0) || (*name==0)) return;
612  if (value==0) { RemovePar(name); return; }
613 
614  TNamed* par = (TNamed*) fPars.FindObject(name);
615  if (par!=0)
616  par->SetTitle(value);
617  else
618  fPars.Add(new TNamed(name,value));
619 }
620 
621 const char* TGo4Slot::GetPar(const char* name) const
622 {
623  if ((name==0) || (*name==0)) return 0;
624  TNamed* par = (TNamed*) fPars.FindObject(name);
625  return (par!=0) ? par->GetTitle() : 0;
626 }
627 
628 void TGo4Slot::RemovePar(const char* name)
629 {
630  if ((name==0) || (*name==0)) return;
631  TNamed* par = (TNamed*) fPars.FindObject(name);
632  if (par!=0) {
633  fPars.Remove(par);
634  fPars.Compress();
635  delete par;
636  }
637 }
638 
639 void TGo4Slot::SetIntPar(const char* name, Int_t value)
640 {
641  TString buf;
642  buf.Form("%d",value);
643  SetPar(name, buf.Data());
644 }
645 
646 Bool_t TGo4Slot::GetIntPar(const char* name, Int_t& value)
647 {
648  const char* strvalue = GetPar(name);
649  if (strvalue==0) return kFALSE;
650  value = atoi(strvalue);
651  return kTRUE;
652 }
653 
654 void TGo4Slot::PrintPars(Int_t level)
655 {
656  for (int n=0;n<=fPars.GetLast();n++) {
657  TNamed* par = (TNamed*) fPars.At(n);
658  if (par!=0)
659  printf("%*c%s = %s\n", level, ' ', par->GetName(), par->GetTitle());
660  }
661 }
662 
663 const char* TGo4Slot::FindFolderSeparator(const char* name)
664 {
665  return name==0 ? 0 : strrchr(name,'/');
666 }
667 
668 void TGo4Slot::ProduceFolderAndName(const char* fullname, TString& foldername, TString& objectname)
669 {
670  const char* rslash = FindFolderSeparator(fullname);
671  foldername = "";
672 
673  if (rslash==0) {
674  objectname = fullname;
675  } else {
676  foldername.Append(fullname, rslash-fullname);
677  objectname = (rslash+1);
678  }
679 }
void CleanProxy()
Definition: TGo4Slot.cxx:303
TGo4Proxy * fProxy
Definition: TGo4Slot.h:40
Bool_t GetIntPar(const char *name, Int_t &value)
Definition: TGo4Slot.cxx:646
static const char * FindFolderSeparator(const char *name)
Definition: TGo4Slot.cxx:663
void SaveData(TDirectory *dir, Bool_t onlyobjs=kFALSE)
Definition: TGo4Slot.cxx:430
Bool_t HasSubLevels() const
Definition: TGo4Slot.cxx:389
virtual void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs)
Definition: TGo4Proxy.h:113
virtual Bool_t isslotsfolder()
Definition: TGo4Slot.cxx:38
virtual TGo4Access * ProvideAccess(const char *)
Definition: TGo4Proxy.h:105
void SetIntPar(const char *name, Int_t value)
Definition: TGo4Slot.cxx:639
TGo4SlotIter(const TGo4Slot *slot)
Definition: TGo4Slot.cxx:29
const char * getinfo()
Definition: TGo4Iter.cxx:121
virtual TGo4Slot * getslot()
Definition: TGo4Slot.cxx:42
void DeleteChild(const char *name)
Definition: TGo4Slot.cxx:207
Int_t level() const
Definition: TGo4Iter.cxx:157
void SetProxy(TGo4Proxy *cont)
Definition: TGo4Slot.cxx:313
Bool_t HasSlotsSubLevels() const
Definition: TGo4Slot.cxx:396
virtual ~TGo4SlotIter()
Definition: TGo4Slot.cxx:31
Int_t GetSlotKind() const
Definition: TGo4Slot.cxx:346
TGo4Slot * FindSlot(const char *fullpath, const char **subname=0)
Definition: TGo4Slot.cxx:489
Int_t GetIndexOf(TGo4Slot *child)
Definition: TGo4Slot.cxx:245
virtual const char * GetContainedClassName()
Definition: TGo4Proxy.h:109
Bool_t isfolder()
Definition: TGo4Iter.cxx:109
virtual TGo4LevelIter * MakeIter()
Definition: TGo4Proxy.h:106
TGo4LevelIter * MakeLevelIter() const
Definition: TGo4Slot.cxx:401
virtual Bool_t RemoveRegisteredObject(TObject *obj)
Definition: TGo4Proxy.h:100
void PrintPars(Int_t level=3)
Definition: TGo4Slot.cxx:654
virtual void ProduceFullName(TString &name, TGo4Slot *toparent=0)
Definition: TGo4Slot.cxx:280
const char * GetSlotClassName() const
Definition: TGo4Slot.cxx:351
const char * GetPar(const char *name) const
Definition: TGo4Slot.cxx:621
void DeleteChilds(const char *startedwith=0)
Definition: TGo4Slot.cxx:221
TGo4Slot()
Definition: TGo4Slot.cxx:64
virtual void Finalize(TGo4Slot *slot)
Definition: TGo4Proxy.h:99
void RemoveChild(TGo4Slot *child)
Definition: TGo4Slot.cxx:564
virtual void Event(TGo4Slot *source, Int_t id, void *param=0)
Definition: TGo4Slot.cxx:575
Bool_t ShiftSlotBefore(TGo4Slot *slot, TGo4Slot *before)
Definition: TGo4Slot.cxx:525
void AddChild(TGo4Slot *child)
Definition: TGo4Slot.cxx:557
virtual const char * name()
Definition: TGo4Slot.cxx:44
virtual TGo4LevelIter * subiterator()
Definition: TGo4Slot.cxx:40
virtual Bool_t isfolder()
Definition: TGo4Slot.cxx:36
TObject * GetAssignedObject()
Definition: TGo4Slot.cxx:373
virtual void RecursiveRemove(TObject *obj)
Definition: TGo4Slot.cxx:594
virtual Bool_t HasSublevels() const
Definition: TGo4Proxy.h:104
TObjArray * fChilds
Definition: TGo4Slot.h:38
virtual const char * info()
Definition: TGo4Slot.cxx:46
Bool_t IsParent(const TGo4Slot *slot) const
Definition: TGo4Slot.cxx:197
TObjArray fPars
Definition: TGo4Slot.h:39
TGo4Slot * FindChild(const char *name)
Definition: TGo4Slot.cxx:262
virtual const char * GetContainedObjectInfo()
Definition: TGo4Proxy.h:110
virtual void Initialize(TGo4Slot *slot)
Definition: TGo4Proxy.h:98
TGo4Slot * GetParent() const
Definition: TGo4Slot.h:58
virtual void Update(Bool_t strong=kFALSE)
Definition: TGo4Slot.cxx:379
virtual const char * GetClassName()
Definition: TGo4Slot.cxx:52
virtual Bool_t IsAcceptObject(TClass *cl)
Definition: TGo4Proxy.h:116
TGo4Slot * GetSlot(const char *name, Bool_t force=kFALSE)
Definition: TGo4Slot.cxx:471
Bool_t ShiftSlotAfter(TGo4Slot *slot, TGo4Slot *after)
Definition: TGo4Slot.cxx:541
virtual Int_t GetObjectKind()
Definition: TGo4Proxy.h:108
Int_t fAssignCnt
use in object manager to poll until object is assigned
Definition: TGo4Slot.h:42
void RemovePar(const char *name)
Definition: TGo4Slot.cxx:628
TGo4Slot * curSlot() const
Definition: TGo4Slot.cxx:55
virtual Int_t sizeinfo()
Definition: TGo4Slot.cxx:48
TGo4Slot * DefineSubSlot(const char *name, const char *&subname) const
Definition: TGo4Slot.cxx:451
const char * getname()
Definition: TGo4Iter.cxx:115
TGo4Slot * GetNextChild(TGo4Slot *child)
Definition: TGo4Slot.cxx:254
Bool_t DoingDelete() const
Definition: TGo4Slot.h:125
virtual void ReadData(TGo4Slot *slot, TDirectory *dir)
Definition: TGo4Proxy.h:114
const char * GetInfo()
Definition: TGo4Slot.cxx:329
virtual Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner)
Definition: TGo4Proxy.h:117
virtual ~TGo4Slot()
Definition: TGo4Slot.cxx:110
void ReadData(TDirectory *dir)
Definition: TGo4Slot.cxx:436
Int_t fIndex
Definition: TGo4Slot.cxx:58
virtual Int_t GetKind()
Definition: TGo4Slot.cxx:50
virtual TObject * GetAssignedObject()
Definition: TGo4Proxy.h:118
TGo4Slot * fParent
Definition: TGo4Slot.h:37
static void ProduceFolderAndName(const char *fullname, TString &foldername, TString &objectname)
Definition: TGo4Slot.cxx:668
virtual void Update(TGo4Slot *slot, Bool_t strong)
Definition: TGo4Proxy.h:119
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=0)
Definition: TGo4Slot.cxx:585
const TGo4Slot * fSlot
Definition: TGo4Slot.cxx:57
virtual void Delete(Option_t *opt="")
Definition: TGo4Slot.cxx:190
Int_t fAssignFlag
Definition: TGo4Slot.h:41
virtual Int_t GetObjectSizeInfo()
Definition: TGo4Proxy.h:111
virtual void Print(Option_t *option) const
Definition: TGo4Slot.cxx:601
Bool_t AssignObject(TObject *obj, Bool_t owner)
Definition: TGo4Slot.cxx:361
Int_t NumChilds() const
Definition: TGo4Slot.h:76
TString GetFullName(TGo4Slot *toparent=0)
Definition: TGo4Slot.cxx:290
virtual Bool_t Use() const
Definition: TGo4Proxy.h:102
Int_t GetSizeInfo()
Definition: TGo4Slot.cxx:338
virtual TGo4ObjectManager * GetOM() const
Definition: TGo4Slot.cxx:298
void SetPar(const char *name, const char *value)
Definition: TGo4Slot.cxx:609
TGo4Access * ProvideSlotAccess(const char *name)
Definition: TGo4Slot.cxx:413
TGo4Slot * GetChild(Int_t n) const
Definition: TGo4Slot.h:77
Bool_t IsAcceptObject(TClass *cl)
Definition: TGo4Slot.cxx:356
virtual Bool_t ProcessEvent(TGo4Slot *slot, TGo4Slot *source, Int_t id, void *param)
Definition: TGo4Proxy.h:121
TGo4Slot * GetNext()
Definition: TGo4Slot.cxx:274
Bool_t next(Bool_t goesinto=kTRUE)
Definition: TGo4Iter.cxx:45
virtual Bool_t next()
Definition: TGo4Slot.cxx:33