12 #ifndef ROOT_REveChunkManager
13 #define ROOT_REveChunkManager
22 namespace Experimental {
28 class REveChunkManager
31 REveChunkManager(
const REveChunkManager&);
32 REveChunkManager& operator=(
const REveChunkManager&);
42 std::vector<TArrayC*> fChunks;
48 REveChunkManager(Int_t atom_size, Int_t chunk_size);
49 virtual ~REveChunkManager();
51 void Reset(Int_t atom_size, Int_t chunk_size);
54 Int_t S()
const {
return fS; }
55 Int_t N()
const {
return fN; }
57 Int_t Size()
const {
return fSize; }
58 Int_t VecSize()
const {
return fVecSize; }
59 Int_t Capacity()
const {
return fCapacity; }
61 Char_t* Atom(Int_t idx)
const {
return fChunks[idx/fN]->fArray + idx%fN*fS; }
62 Char_t* Chunk(Int_t chk)
const {
return fChunks[chk]->fArray; }
63 Int_t NAtoms(Int_t chk)
const {
return (chk < fVecSize-1) ? fN : (fSize-1)%fN + 1; }
73 REveChunkManager &fPlex;
74 Char_t *fCurrent{
nullptr};
79 const std::set<Int_t> *fSelection{
nullptr};
80 std::set<Int_t>::const_iterator fSelectionIterator;
82 iterator(REveChunkManager &p) : fPlex(p) {}
98 void reset() { fCurrent =
nullptr; fAtomIndex = -1; fNextChunk = fAtomsToGo = 0; }
100 Char_t* operator()() {
return fCurrent; }
101 Char_t* operator*() {
return fCurrent; }
102 Int_t index() {
return fAtomIndex; }
109 inline Char_t* REveChunkManager::NewAtom()
111 Char_t *a = (fSize >= fCapacity) ? NewChunk() : Atom(fSize);
122 class REveChunkVector :
public REveChunkManager
125 REveChunkVector(
const REveChunkVector&);
126 REveChunkVector& operator=(
const REveChunkVector&);
129 REveChunkVector() =
default;
130 REveChunkVector(Int_t chunk_size) : REveChunkManager(sizeof(T), chunk_size) {}
131 virtual ~REveChunkVector() {}
133 void Reset(Int_t chunk_size) { Reset(
sizeof(T), chunk_size); }
135 T *At(Int_t idx) {
return reinterpret_cast<T*
>(Atom(idx)); }
136 T &Ref(Int_t idx) {
return *At(idx); }