ROOT logo
#ifndef __HCATEGORYMANAGER_H__
#define __HCATEGORYMANAGER_H__



#include "hades.h"
#include "hrecevent.h"
#include "hcategory.h"
#include "hlocation.h"

#include "TObject.h"
#include "TString.h"


class HCategoryManager: public TObject
{
private:
    static HLocation loc; //!

public:
    HCategoryManager ()  {;}
    ~HCategoryManager () {;}

    static HCategory *getCategory(Short_t num,Int_t warn = 0, TString name = "");
    static HCategory *addCategory(Short_t num,TString name = "",Int_t size = 1000,TString partev = "", Bool_t dynamicsize = kFALSE);

    template<class T> static T* getObject(T* pout,Short_t num = -1, Int_t index = -1,Bool_t silent=kFALSE)
    {
	// returns object with index index from category with number num.
        // In error case return 0.

	HCategory *cat = 0;
	pout = 0;
	if (index < 0 || num < 0) {  return pout; }
	HRecEvent *ev = (HRecEvent*) gHades->getCurrentEvent ();
	if (ev) {
	    cat = ev->getCategory(num);
	    if (!cat) {
		if(!silent) ::Error("getObject()", "Cannot get category cat num = %i", num);
		return pout;
	    } else {
		pout = (T*) cat->getObject(index);
		if (!pout) {
		    if(!silent) ::Error("getObject()", "ZERO pointer retrieved for object!");
		    return pout;
		}
	    }
	} else {
	    ::Error("getObject()", "ZERO pointer retrieved for event!");
	    return pout;
	}
	return pout;
    }

    template<class T> static T* getObject(T* pout,HCategory* cat = 0, Int_t index = -1,Bool_t silent=kFALSE)
    {
	// returns object with index index from category cat.
        // In error case return 0.
	pout = 0;
	if (index < 0 || cat == 0) {  return pout; }
	pout = (T*) cat->getObject(index);
	if (!pout) {
	    if(!silent) ::Error("getObject()", "ZERO pointer retrieved for object!");
	    return pout;
	}
	return pout;
    }

    template<class T> static T* newObject(T* pout,Short_t num , Int_t& index)
    {
	// returns new object with index index from category with number num.
        // In error case return 0.
	HCategory *cat = 0;
	pout = 0;
	if (num < 0) {  return pout; }
	HRecEvent *ev = (HRecEvent*) gHades->getCurrentEvent ();
	if (ev) {
	    cat = ev->getCategory(num);
	    if (!cat) {
		::Error("newObject()", "Cannot get category cat num = %i", num);
		return pout;
	    } else {
		pout = (T*) cat->getNewSlot(loc,&index);
		if (!pout) {
		    ::Error("newObject()", "ZERO pointer retrieved for object!");
		    return pout;
		}
		pout = new (pout) T;
	    }
	} else {
	    ::Error("newObject()", "ZERO pointer retrieved for event!");
	    return pout;
	}
	return pout;
    }

    template<class T> static T* newObject(T* pout,HCategory* cat, Int_t& index)
    {
	// returns new object with index index from category cat.
        // In error case return 0.
	pout = 0;
	if (cat == 0) {  return pout; }

	pout = (T*) cat->getNewSlot(loc,&index);
	if (!pout) {
	    ::Error("newObject()", "ZERO pointer retrieved for object!");
	    return pout;
	}
	pout = new (pout) T;

	return pout;
    }

    template<class T> static T* newObject(T* pout,const T* pin,Short_t num , Int_t& index)
    {
	// returns new object with index index from category with number num.
        // the new object is created via copy constructor
	// In error case return 0.
	HCategory *cat = 0;
	pout = 0;
	if (num < 0) {  return pout; }
	HRecEvent *ev = (HRecEvent*) gHades->getCurrentEvent ();
	if (ev) {
	    cat = ev->getCategory(num);
	    if (!cat) {
		::Error("newObject()", "Cannot get category cat num = %i", num);
		return pout;
	    } else {
		pout = (T*) cat->getNewSlot(loc,&index);
		if (!pout) {
		    ::Error("newObject()", "ZERO pointer retrieved for object!");
		    return pout;
		}
		pout = new (pout) T(*pin);
	    }
	} else {
	    ::Error("newObject()", "ZERO pointer retrieved for event!");
	    return pout;
	}
	return pout;
    }

    template<class T> static T* newObjectCopy(T* pout,T* pin,HCategory* cat, Int_t& index)
    {
	// returns new object with index index from category cat.
        // created via copy contructor!
	// In error case return 0.
	pout = 0;
	if (cat == 0) {  return pout; }

	pout = (T*) cat->getNewSlot(loc,&index);
	if (!pout) {
	    ::Error("newObject()", "ZERO pointer retrieved for object!");
	    return pout;
	}
	pout = new (pout) T(*pin);

	return pout;
    }


    template<class T> static T* newSlot(T* pout,Short_t num , Int_t& index)
    {
	// returns new object pointer (no object yet) with index index from category with number num.
        // In error case return 0.
	HCategory *cat = 0;
	pout = 0;
	if (num < 0) {  return pout; }
	HRecEvent *ev = (HRecEvent*) gHades->getCurrentEvent ();
	if (ev) {
	    cat = ev->getCategory(num);
	    if (!cat) {
		::Error("getObject()", "Cannot get category cat num = %i", num);
		return pout;
	    } else {
		pout = (T*) cat->getNewSlot(loc,&index);
		if (!pout) {
		    ::Error("getObject()", "ZERO pointer retrieved for object!");
		    return pout;
		}
		return pout;
	    }
	}
    }

    template<class T> static T* newSlot(T* pout,HCategory* cat , Int_t& index)
    {
	// returns new object pointer (no object yet) with index index from category cat.
        // In error case return 0.
	pout = 0;
	if (cat == 0) {  return pout; }
	pout = (T*) cat->getNewSlot(loc,&index);
	if (!pout) {
	    ::Error("newSlot()", "ZERO pointer retrieved for object!");
	    return pout;
	}
	return pout;
    }

    ClassDef(HCategoryManager, 0)	// A simple helper object
};


#endif // __HCATEGORYMANAGER_H__
 hcategorymanager.h:1
 hcategorymanager.h:2
 hcategorymanager.h:3
 hcategorymanager.h:4
 hcategorymanager.h:5
 hcategorymanager.h:6
 hcategorymanager.h:7
 hcategorymanager.h:8
 hcategorymanager.h:9
 hcategorymanager.h:10
 hcategorymanager.h:11
 hcategorymanager.h:12
 hcategorymanager.h:13
 hcategorymanager.h:14
 hcategorymanager.h:15
 hcategorymanager.h:16
 hcategorymanager.h:17
 hcategorymanager.h:18
 hcategorymanager.h:19
 hcategorymanager.h:20
 hcategorymanager.h:21
 hcategorymanager.h:22
 hcategorymanager.h:23
 hcategorymanager.h:24
 hcategorymanager.h:25
 hcategorymanager.h:26
 hcategorymanager.h:27
 hcategorymanager.h:28
 hcategorymanager.h:29
 hcategorymanager.h:30
 hcategorymanager.h:31
 hcategorymanager.h:32
 hcategorymanager.h:33
 hcategorymanager.h:34
 hcategorymanager.h:35
 hcategorymanager.h:36
 hcategorymanager.h:37
 hcategorymanager.h:38
 hcategorymanager.h:39
 hcategorymanager.h:40
 hcategorymanager.h:41
 hcategorymanager.h:42
 hcategorymanager.h:43
 hcategorymanager.h:44
 hcategorymanager.h:45
 hcategorymanager.h:46
 hcategorymanager.h:47
 hcategorymanager.h:48
 hcategorymanager.h:49
 hcategorymanager.h:50
 hcategorymanager.h:51
 hcategorymanager.h:52
 hcategorymanager.h:53
 hcategorymanager.h:54
 hcategorymanager.h:55
 hcategorymanager.h:56
 hcategorymanager.h:57
 hcategorymanager.h:58
 hcategorymanager.h:59
 hcategorymanager.h:60
 hcategorymanager.h:61
 hcategorymanager.h:62
 hcategorymanager.h:63
 hcategorymanager.h:64
 hcategorymanager.h:65
 hcategorymanager.h:66
 hcategorymanager.h:67
 hcategorymanager.h:68
 hcategorymanager.h:69
 hcategorymanager.h:70
 hcategorymanager.h:71
 hcategorymanager.h:72
 hcategorymanager.h:73
 hcategorymanager.h:74
 hcategorymanager.h:75
 hcategorymanager.h:76
 hcategorymanager.h:77
 hcategorymanager.h:78
 hcategorymanager.h:79
 hcategorymanager.h:80
 hcategorymanager.h:81
 hcategorymanager.h:82
 hcategorymanager.h:83
 hcategorymanager.h:84
 hcategorymanager.h:85
 hcategorymanager.h:86
 hcategorymanager.h:87
 hcategorymanager.h:88
 hcategorymanager.h:89
 hcategorymanager.h:90
 hcategorymanager.h:91
 hcategorymanager.h:92
 hcategorymanager.h:93
 hcategorymanager.h:94
 hcategorymanager.h:95
 hcategorymanager.h:96
 hcategorymanager.h:97
 hcategorymanager.h:98
 hcategorymanager.h:99
 hcategorymanager.h:100
 hcategorymanager.h:101
 hcategorymanager.h:102
 hcategorymanager.h:103
 hcategorymanager.h:104
 hcategorymanager.h:105
 hcategorymanager.h:106
 hcategorymanager.h:107
 hcategorymanager.h:108
 hcategorymanager.h:109
 hcategorymanager.h:110
 hcategorymanager.h:111
 hcategorymanager.h:112
 hcategorymanager.h:113
 hcategorymanager.h:114
 hcategorymanager.h:115
 hcategorymanager.h:116
 hcategorymanager.h:117
 hcategorymanager.h:118
 hcategorymanager.h:119
 hcategorymanager.h:120
 hcategorymanager.h:121
 hcategorymanager.h:122
 hcategorymanager.h:123
 hcategorymanager.h:124
 hcategorymanager.h:125
 hcategorymanager.h:126
 hcategorymanager.h:127
 hcategorymanager.h:128
 hcategorymanager.h:129
 hcategorymanager.h:130
 hcategorymanager.h:131
 hcategorymanager.h:132
 hcategorymanager.h:133
 hcategorymanager.h:134
 hcategorymanager.h:135
 hcategorymanager.h:136
 hcategorymanager.h:137
 hcategorymanager.h:138
 hcategorymanager.h:139
 hcategorymanager.h:140
 hcategorymanager.h:141
 hcategorymanager.h:142
 hcategorymanager.h:143
 hcategorymanager.h:144
 hcategorymanager.h:145
 hcategorymanager.h:146
 hcategorymanager.h:147
 hcategorymanager.h:148
 hcategorymanager.h:149
 hcategorymanager.h:150
 hcategorymanager.h:151
 hcategorymanager.h:152
 hcategorymanager.h:153
 hcategorymanager.h:154
 hcategorymanager.h:155
 hcategorymanager.h:156
 hcategorymanager.h:157
 hcategorymanager.h:158
 hcategorymanager.h:159
 hcategorymanager.h:160
 hcategorymanager.h:161
 hcategorymanager.h:162
 hcategorymanager.h:163
 hcategorymanager.h:164
 hcategorymanager.h:165
 hcategorymanager.h:166
 hcategorymanager.h:167
 hcategorymanager.h:168
 hcategorymanager.h:169
 hcategorymanager.h:170
 hcategorymanager.h:171
 hcategorymanager.h:172
 hcategorymanager.h:173
 hcategorymanager.h:174
 hcategorymanager.h:175
 hcategorymanager.h:176
 hcategorymanager.h:177
 hcategorymanager.h:178
 hcategorymanager.h:179
 hcategorymanager.h:180
 hcategorymanager.h:181
 hcategorymanager.h:182
 hcategorymanager.h:183
 hcategorymanager.h:184
 hcategorymanager.h:185
 hcategorymanager.h:186
 hcategorymanager.h:187
 hcategorymanager.h:188
 hcategorymanager.h:189
 hcategorymanager.h:190
 hcategorymanager.h:191
 hcategorymanager.h:192
 hcategorymanager.h:193
 hcategorymanager.h:194
 hcategorymanager.h:195
 hcategorymanager.h:196
 hcategorymanager.h:197
 hcategorymanager.h:198
 hcategorymanager.h:199
 hcategorymanager.h:200
 hcategorymanager.h:201
 hcategorymanager.h:202
 hcategorymanager.h:203
 hcategorymanager.h:204