20 static const std::string routineName(
"GGSTClonesArrayService::~GGSTClonesArrayService");
21 if (_assignedArrays.size() != 0) {
22 GGSCOUT(WARNING) <<
"There are still " << _assignedArrays.size() <<
" currently assigned arrays for class "
23 << _className <<
"." <<
GGSENDL;
24 GGSCCOUT(WARNING) <<
"These will not be deleted. The user routine must delete them." <<
GGSENDL;
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 GGSCOUT(DEEPDEB) <<
"Assigned array at " << iArray->array <<
" for class " << _className <<
" with size "
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 GGSCOUT(DEEPDEB) <<
"Assigned array at " << _assignedArrays.back().array <<
" for class " << _className
63 <<
" with size " << sizeHint <<
GGSENDL;
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 GGSCOUT(DEEPDEB) <<
"Created array at " << _assignedArrays.back().array <<
" for class " << _className
71 <<
" with size " << sizeHint <<
GGSENDL;
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 GGSCOUT(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 GGSCOUT(DEEPDEB) <<
"Adopted array at " << newArray->array <<
" for class " << _className <<
" with size "
112 _availableArrays.resize(0);
117 void GGSTClonesArrayService::DumpMemInfo() {
118 const std::string routineName(
"GGSTClonesArrayService::DumpMemInfo");
119 GGSCOUT(DEBUG) <<
"Class: " << _className <<
", available: " << _availableArrays.size()
120 <<
", assigned: " << _assignedArrays.size() <<
GGSENDL;
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 GGSCCOUT(DEBUG) <<
"Available: nElemTot=" << nAvailable
134 <<
", <nElem>=" << (float)nAvailable / (
float)_availableArrays.size()
135 << ", allocated: " << allocForAvaialble <<
GGSENDL;
136 GGSCCOUT(DEBUG) << "Assigned: nElemTot=" << nAssigned
137 << ", <nElem>=" << (
float)nAssigned / (
float)_assignedArrays.size()
138 << ", allocated: " << allocForAssigned << GGSENDL;
#define GGSCCOUT(level)
Smart log utility which prints no header at the beginning of the line.
void DeleteAll()
Delete all unassigned arrays in storage.
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.