14 using namespace ROOT::Experimental;
30 void REveChunkManager::ReleaseChunks()
32 for (Int_t i=0; i<fVecSize; ++i)
41 REveChunkManager::REveChunkManager() :
43 fSize(0), fVecSize(0), fCapacity(0)
50 REveChunkManager::REveChunkManager(Int_t atom_size, Int_t chunk_size) :
51 fS(atom_size), fN(chunk_size),
52 fSize(0), fVecSize(0), fCapacity(0)
59 REveChunkManager::~REveChunkManager()
67 void REveChunkManager::Reset(Int_t atom_size, Int_t chunk_size)
72 fSize = fVecSize = fCapacity = 0;
79 void REveChunkManager::Refit()
81 if (fSize == 0 || (fVecSize == 1 && fSize == fCapacity))
84 TArrayC* one =
new TArrayC(fS*fSize);
85 Char_t* pos = one->fArray;
86 for (Int_t i=0; i<fVecSize; ++i)
88 Int_t size = fS * NAtoms(i);
89 memcpy(pos, fChunks[i]->fArray, size);
93 fN = fCapacity = fSize;
95 fChunks.push_back(one);
101 Char_t* REveChunkManager::NewChunk()
103 fChunks.push_back(
new TArrayC(fS*fN));
106 return fChunks.back()->fArray;
112 Bool_t REveChunkManager::iterator::next()
114 if (fSelection ==
nullptr)
118 if (fNextChunk < fPlex.VecSize())
120 fCurrent = fPlex.Chunk(fNextChunk);
121 fAtomsToGo = fPlex.NAtoms(fNextChunk);
131 fCurrent += fPlex.S();
139 if (fAtomIndex == -1)
140 fSelectionIterator = fSelection->begin();
142 ++fSelectionIterator;
144 if (fSelectionIterator != fSelection->end())
146 fAtomIndex = *fSelectionIterator;
147 fCurrent = fPlex.Atom(fAtomIndex);