ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TAM/interface/TAMOutput.h
Revision: 1.3
Committed: Mon Jul 13 19:19:44 2009 UTC (15 years, 9 months ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.2: +12 -7 lines
Log Message:
Added WriteCol to write out collections checking if names clash.

File Contents

# User Rev Content
1 loizides 1.1 //
2 loizides 1.3 // $Id: TAMOutput.h,v 1.2 2009/04/27 08:11:27 loizides Exp $
3 loizides 1.1 //
4    
5     #ifndef ROOT_TAMOutput
6     #define ROOT_TAMOutput
7    
8     // keep this for compatibility
9     #define TAM_TAMOutput
10    
11    
12     #include <vector>
13     using std::vector;
14    
15    
16     #ifndef ROOT_TList
17     #include "TList.h"
18     #endif
19     #ifndef ROOT_TObject
20     #include "TObject.h"
21     #endif
22     #ifndef ROOT_TMemberInspector
23     #include "TMemberInspector.h"
24     #endif
25     #ifndef ROOT_TNamed
26     #include "TNamed.h"
27     #endif
28     #ifndef ROOT_THashTable
29     #include "THashTable.h"
30     #endif
31     #ifndef ROOT_TClass
32     #include "TClass.h"
33     #endif
34    
35    
36     class TBrowser;
37     class TAModule;
38    
39    
40     class TAMOutput : public TList {
41     private:
42     static const UInt_t kParentStrLen = 1028;
43    
44     public:
45     struct TAMModInspector : public TMemberInspector {
46     struct TAMModMember : public TNamed {
47     // name = name of output object itself (in the output list)
48     // title = name of member storing the output object
49     void *fAddr; //!address of member
50     TClass *fMClass; //module class
51    
52     TAMModMember(const Char_t* objectname=0,
53     const Char_t* membername=0,
54     void* addr=0,
55     TClass* cl=0) :
56     TNamed(objectname, membername),
57     fAddr(addr),
58     fMClass(cl) {}
59     virtual ~TAMModMember() {}
60     ClassDef(TAMModMember,1)
61     };
62    
63 loizides 1.3 THashTable fOutputMembers; //stores the members
64     //pointing to output objects
65 loizides 1.1
66     TAMModInspector();
67     virtual ~TAMModInspector();
68    
69     void AddOutput(TObject* obj, const void* adr);
70     virtual void Inspect(TClass* cl, const Char_t* parent,
71     const Char_t* name, const void* addr);
72     TAMModMember *FindModMemberWithAddr(const void* addr);
73     TAMModMember *FindModMemberWithMemberName(const Char_t* mn);
74     void RemoveOutput(TObject* obj);
75     void SetMemberAddrFor(TObject* obj, const UInt_t verbose);
76    
77     ClassDef(TAMModInspector,1)
78     };
79    
80     private:
81 loizides 1.3 TAMModInspector fInspector; //stores info about module's output members
82     TList fOutput; //list of this module's output (NOT owner)
83     mutable TList fCurOutput; //list of this module's output objects
84     // moved to fOutput after Merge (NOT owner)
85 loizides 1.1 TAModule *fMod; //!pointer to the module whose output this is
86    
87     void CallMerge(TObject* obj, TList& list);
88     void DeleteIterators(vector<TIterator*>& iters);
89     TList *GetCurOutputList() { return &fCurOutput; }
90     using TList::FindObject;
91     void MergeOutput(TCollection* list);
92     void NullObjInAddOutput() const;
93     void NullClassFor(void* adr, const Char_t* tid) const;
94     void WarnNameDuplicate(const TObject* obj) const;
95    
96     public:
97     TAMOutput();
98     TAMOutput(TAModule* mod);
99     virtual ~TAMOutput();
100    
101     template <class OC>
102     void AddOutput(OC* const & obj);
103     virtual void Browse(TBrowser* b);
104     static void CheckHistDir(TObject* obj);
105     TAMOutput *FindModOutput(const TAModule* mod);
106     TAMOutput *FindModOutput(const Char_t* name);
107     TObject *FindOutput(const Char_t* obj);
108     TObject *FindOutput(const TObject* obj);
109     TObject *FindOutput(const Char_t* module, const Char_t* obj);
110     const TAModule *GetMod() const { return fMod; }
111     TAModule *GetMod() { return fMod; }
112     const TList *GetOutputList() const { return &fOutput; }
113     TList *GetOutputList() { return &fOutput; }
114     virtual void Merge(TCollection* list);
115     virtual void ls(Option_t* option="") const;
116 loizides 1.2 using TCollection::Print;
117 loizides 1.1 virtual void Print(Option_t* wildcard="") const;
118     void RemoveOutput(TObject* obj);
119     void SetAllOutputMembers(const Bool_t setAddresses);
120     void SetMod(TAModule* mod) { fMod = mod; }
121     void SetOutputMembers(const Bool_t setAddresses);
122     void StoreAllOutputObjs();
123     void StoreOutputObjs();
124 loizides 1.3 virtual Int_t Write(const char* name=0, Int_t option=0, Int_t bsize=0);
125     virtual Int_t Write(const char* name=0, Int_t option=0,
126 loizides 1.1 Int_t bsize=0) const;
127 loizides 1.3 Int_t WriteCol(const TCollection *col, const char* name=0,
128     Int_t option=0, Int_t bsize=0) const;
129    
130 loizides 1.1 ClassDef(TAMOutput, 2)
131     };
132    
133    
134     //______________________________________________________________________________
135     template <class OC>
136     inline void TAMOutput::AddOutput(OC* const & obj)
137     {
138     // Adds the object to the list of output objects of this module.
139     // Stores the address of the pointer, for automatic module member pointer
140     // setting.
141    
142     if (obj!=0) {
143     TClass* cl = TClass::GetClass(typeid(OC));
144     if (cl!=0) {
145     if (cl->InheritsFrom(TObject::Class())) {
146     TObject* o = dynamic_cast<TObject*>(obj);
147     CheckHistDir(o);
148     fInspector.AddOutput(o, &obj);
149     if (fCurOutput.FindObject(o->GetName())!=0) WarnNameDuplicate(o);
150     fCurOutput.Add(o);
151     }
152     } else NullClassFor(obj, typeid(OC).name());
153     } else NullObjInAddOutput();
154     }
155    
156     #endif //ROOT_TAMOutput