24 ClassImp(TEveChunkManager);
25 ClassImp(TEveChunkManager::iterator);
30 void TEveChunkManager::ReleaseChunks()
32 for (Int_t i=0; i<fVecSize; ++i)
41 TEveChunkManager::TEveChunkManager() :
43 fSize(0), fVecSize(0), fCapacity(0)
50 TEveChunkManager::TEveChunkManager(Int_t atom_size, Int_t chunk_size) :
51 fS(atom_size), fN(chunk_size),
52 fSize(0), fVecSize(0), fCapacity(0)
59 TEveChunkManager::~TEveChunkManager()
67 void TEveChunkManager::Reset(Int_t atom_size, Int_t chunk_size)
72 fSize = fVecSize = fCapacity = 0;
79 void TEveChunkManager::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* TEveChunkManager::NewChunk()
103 fChunks.push_back(
new TArrayC(fS*fN));
106 return fChunks.back()->fArray;
112 Bool_t TEveChunkManager::iterator::next()
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);