16 _className(className) {
22 static const std::string routineName(
"GGSTClonesArrayService::~GGSTClonesArrayService");
23 if (_assignedArrays.size() != 0) {
24 COUT(WARNING) <<
"There are still " << _assignedArrays.size() <<
" currently assigned arrays for class "
25 << _className <<
"." <<
ENDL;
26 CCOUT(WARNING) <<
"These will not be deleted. The user routine must delete them." <<
ENDL;
27 for (ArrayList::iterator iArray = _assignedArrays.begin(); iArray != _assignedArrays.end(); iArray++) {
36 static const std::string routineName(
"GGSTClonesArrayService::ProvideArray");
40 for (ArrayList::iterator iArray = _availableArrays.begin(); iArray != _availableArrays.end(); iArray++) {
41 if (iArray->allocSize >= sizeHint) {
42 _assignedArrays.splice(_assignedArrays.end(), _availableArrays, iArray);
43 iArray->array->Clear(
"C");
44 COUT(DEEPDEB) <<
"Assigned array at " << iArray->array <<
" for class " << _className <<
" with size " << sizeHint
50 if (_availableArrays.size() > 0) {
51 ArrayList::iterator lastAvailable = _availableArrays.end();
53 _assignedArrays.splice(_assignedArrays.end(), _availableArrays, lastAvailable);
54 _assignedArrays.back().array->Clear(
"C");
55 COUT(DEEPDEB) <<
"Assigned array at " << _assignedArrays.back().array <<
" for class " << _className
56 <<
" with size " << sizeHint <<
ENDL;
57 return _assignedArrays.back().array;
60 _assignedArrays.push_back(ArrayDescriptor());
61 _assignedArrays.back().array =
new TClonesArray(_className, sizeHint);
62 _assignedArrays.back().allocSize = sizeHint;
63 COUT(DEEPDEB) <<
"Created array at " << _assignedArrays.back().array <<
" for class " << _className <<
" with size "
65 return _assignedArrays.back().array;
72 static const std::string routineName(
"GGSTClonesArrayService::TakeBackArray");
74 int arraySize = array->GetEntries();
77 ArrayList::iterator iAvArray;
78 for (iAvArray = _availableArrays.begin(); iAvArray != _availableArrays.end(); iAvArray++) {
79 if (iAvArray->allocSize > arraySize) {
85 for (ArrayList::iterator iArray = _assignedArrays.begin(); iArray != _assignedArrays.end(); iArray++) {
86 if (array == iArray->array) {
87 _availableArrays.splice(iAvArray, _assignedArrays, iArray);
89 COUT(DEEPDEB) <<
"Took back array at " << iArray->array <<
" for class " << _className <<
" with size "
95 ArrayList::iterator newArray = _availableArrays.insert(iAvArray, ArrayDescriptor());
96 newArray->array = array;
97 newArray->allocSize = arraySize;
99 COUT(DEEPDEB) <<
"Adopted array at " << newArray->array <<
" for class " << _className <<
" with size " << arraySize
107 _availableArrays.resize(0);
#define COUT(level)
Smart log macro. It writes on stdout only if the specified verbosity level is lesser than the maximum...
void DeleteAll()
Delete all unassigned arrays in storage.
#define CCOUT(level)
Smart log utility which prints no header at the beginning of the line.
TClonesArray * ProvideArray(int sizeHint=0)
Method to obtain an array from the service.
void TakeBackArray(TClonesArray *&array)
Gives an array back to the service.
GGSTClonesArrayService(const char *className)
Constructor.
~GGSTClonesArrayService()
Destructor.