20 static const std::string routineName(
"GGSTClonesArrayService::~GGSTClonesArrayService");
21 if (_assignedArrays.size() != 0) {
22 COUT(WARNING) <<
"There are still " << _assignedArrays.size() <<
" currently assigned arrays for class "
23 << _className <<
"." <<
ENDL;
24 CCOUT(WARNING) <<
"These will not be deleted. The user routine must delete them." <<
ENDL;
25 for (ArrayList::iterator iArray = _assignedArrays.begin(); iArray != _assignedArrays.end(); iArray++) {
34 static const std::string routineName(
"GGSTClonesArrayService::ProvideArray");
39 for (ArrayList::iterator iArray = _availableArrays.begin(); iArray != _availableArrays.end(); iArray++) {
40 if (iArray->allocSize >= sizeHint) {
41 _assignedArrays.splice(_assignedArrays.end(), _availableArrays, iArray);
43 iArray->array->Clear(
"C");
45 iArray->array->Clear();
47 COUT(DEEPDEB) <<
"Assigned array at " << iArray->array <<
" for class " << _className <<
" with size " << sizeHint
53 if (_availableArrays.size() > 0) {
54 ArrayList::iterator lastAvailable = _availableArrays.end();
56 _assignedArrays.splice(_assignedArrays.end(), _availableArrays, lastAvailable);
58 _assignedArrays.back().array->Clear(
"C");
60 _assignedArrays.back().array->Clear();
62 COUT(DEEPDEB) <<
"Assigned array at " << _assignedArrays.back().array <<
" for class " << _className
63 <<
" with size " << sizeHint <<
ENDL;
64 return _assignedArrays.back().array;
67 _assignedArrays.push_back(ArrayDescriptor());
68 _assignedArrays.back().array =
new TClonesArray(_className.c_str(), sizeHint);
69 _assignedArrays.back().allocSize = sizeHint;
70 COUT(DEEPDEB) <<
"Created array at " << _assignedArrays.back().array <<
" for class " << _className <<
" with size "
72 return _assignedArrays.back().array;
78 static const std::string routineName(
"GGSTClonesArrayService::TakeBackArray");
80 int arraySize = array->GetEntries();
83 ArrayList::iterator iAvArray;
84 for (iAvArray = _availableArrays.begin(); iAvArray != _availableArrays.end(); iAvArray++) {
85 if (iAvArray->allocSize > arraySize) {
91 for (ArrayList::iterator iArray = _assignedArrays.begin(); iArray != _assignedArrays.end(); iArray++) {
92 if (array == iArray->array) {
93 _availableArrays.splice(iAvArray, _assignedArrays, iArray);
95 COUT(DEEPDEB) <<
"Took back array at " << iArray->array <<
" for class " << _className <<
" with size "
101 ArrayList::iterator newArray = _availableArrays.insert(iAvArray, ArrayDescriptor());
102 newArray->array = array;
103 newArray->allocSize = arraySize;
105 COUT(DEEPDEB) <<
"Adopted array at " << newArray->array <<
" for class " << _className <<
" with size " << arraySize
112 _availableArrays.resize(0);
117 void GGSTClonesArrayService::DumpMemInfo() {
118 const std::string routineName(
"GGSTClonesArrayService::DumpMemInfo");
119 COUT(DEBUG) <<
"Class: " << _className <<
", available: " << _availableArrays.size()
120 <<
", assigned: " << _assignedArrays.size() <<
ENDL;
122 size_t allocForAvaialble = 0;
123 for (
auto &arr : _availableArrays) {
124 nAvailable += arr.array->GetEntries();
125 allocForAvaialble += arr.array->GetSize();
128 size_t allocForAssigned = 0;
129 for (
auto &arr : _assignedArrays) {
130 nAssigned += arr.array->GetEntries();
131 allocForAssigned += arr.array->GetSize();
133 CCOUT(DEBUG) <<
"Available: nElemTot=" << nAvailable
134 <<
", <nElem>=" << (float)nAvailable / (
float)_availableArrays.size()
135 << ", allocated: " << allocForAvaialble <<
ENDL;
136 CCOUT(DEBUG) << "Assigned: nElemTot=" << nAssigned
137 << ", <nElem>=" << (
float)nAssigned / (
float)_assignedArrays.size()
138 << ", allocated: " << allocForAssigned << ENDL;
#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, bool clearElements=false)
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.