16 #include <JANA/jerror.h>
17 #include <JANA/JObject.h>
18 #include <JANA/JEventLoop.h>
79 X(Df250PulseIntegral) \
80 X(Df250StreamingRawData) \
82 X(Df250PulseRawData) \
85 X(Df250PulsePedestal) \
87 X(Df250WindowRawData) \
90 X(Df125PulseIntegral) \
92 X(Df125PulsePedestal) \
93 X(Df125PulseRawData) \
94 X(Df125WindowRawData) \
99 X(DF1TDCTriggerTime) \
100 X(DCAEN1290TDCConfig) \
103 X(DCODAControlEvent) \
109 X(DDIRCTriggerTime) \
116 #define MyDerivedTypes(X) \
128 #define MyNoPoolTypes(X) \
129 X(Df250WindowRawData) \
130 X(Df125WindowRawData)
155 #define makevector(A) vector<A*> v##A;
164 #define makepoolvector(A) vector<A*> v##A##_pool;
172 #define returntopool(A) if(!v##A.empty()){ v##A##_pool.insert(v##A##_pool.end(), v##A.begin(), v##A.end()); }
173 #define clearvectors(A) v##A.clear();
174 #define deletepool(A) for(auto p : v##A##_pool) delete p;
175 #define clearpoolvectors(A) v##A##_pool.clear();
188 #define deletevector(A) for(auto p : v##A ) delete p;
214 #define makefactoryptr(A) JFactory<A> *fac_##A;
215 #define copyfactoryptr(A) fac_##A = (JFactory<A>*)loop->GetFactory(#A);
240 #define copytofactory(A) facptrs.fac_##A->CopyTo(v##A);
241 #define copybortofactory(A) facptrs.fac_##A->CopyTo(borptrs->v##A);
242 #define setevntcalled(A) facptrs.fac_##A->Set_evnt_called();
243 #define keepownership(A) facptrs.fac_##A->SetFactoryFlag(JFactory_base::NOT_OBJECT_OWNER);
244 #define copytofactorynonempty(A) if(!v##A.empty()) facptrs.fac_##A->CopyTo(v##A);
245 #define setevntcallednonempty(A) if(!v##A.empty()) facptrs.fac_##A->Set_evnt_called();
246 #define keepownershipnonempty(A) if(!v##A.empty()) facptrs.fac_##A->SetFactoryFlag(JFactory_base::NOT_OBJECT_OWNER);
250 if(facptrs.
loop == NULL) facptrs.
Init(loop);
264 copied_to_factories=
true;
269 #define checkclassname(A) if(classname==#A) return true;
280 #define checknonemptyderivedclassname(A) if((classname==#A)&&(!v##A.empty())) return true;
288 #define addclassname(A) if(include_all || !v##A.empty())classnames.push_back(#A);
323 #define makeallocator(A) template<typename... Args> \
324 A* NEW_##A(Args&&... args){ \
326 if(v##A##_pool.empty()){ \
327 t = new A(std::forward<Args>(args)...); \
329 t = v##A##_pool.back(); \
330 v##A##_pool.pop_back(); \
331 t->ClearAssociatedObjects(); \
332 new(t) A(std::forward<Args>(args)...); \
341 DParsedEvent(uint64_t MAX_OBJECT_RECYCLES=1000):in_use(false),Nrecycled(0),MAX_RECYCLES(MAX_OBJECT_RECYCLES),borptrs(NULL){}
342 #define printcounts(A) if(!v##A.empty()) cout << v##A.size() << " : " << #A << endl;
343 #define printpoolcounts(A) if(!v##A##_pool.empty()) cout << v##A##_pool.size() << " : " << #A << "_pool" << endl;
360 #undef MyDerivedTypes
362 #undef makepoolvector
367 #undef clearpoolvectors
368 #undef makefactoryptr
369 #undef copyfactoryptr
371 #undef copybortofactory
374 #undef copytofactorynonempty
375 #undef setevntcallednonempty
376 #undef keepownershipnonempty
377 #undef checkclassname
378 #undef checknonemptyderivedclassname
382 #undef printpoolcounts
385 #endif // _DParsedEvent_
DParsedEvent(uint64_t MAX_OBJECT_RECYCLES=1000)
bool IsParsedDataType(string &classname) const
#define setevntcallednonempty(A)
void GetParsedDataTypes(vector< string > &classnames, bool include_all=false) const
uint64_t event_status_bits
#define clearpoolvectors(A)
#define copytofactorynonempty(A)
#define makepoolvector(A)
#define makefactoryptr(A)
#define checkclassname(A)
#define copyfactoryptr(A)
bool IsNonEmptyDerivedDataType(string &classname) const
#define MyDerivedTypes(X)
#define copybortofactory(A)
#define keepownershipnonempty(A)
void Init(JEventLoop *loop)
map< JEventLoop *, DFactoryPointers > factory_pointers
void CopyToFactories(JEventLoop *loop)
#define checknonemptyderivedclassname(A)