/* $Id: TSubBlockIO.cc 5116 2016-01-04 19:09:04Z darko $ */ #include using namespace crsRead; #include #include #include #include TSubBlockIO::TSubBlockIO () : TSubBlock (), //0,false) { fBlockSize (0), fNBlockSizeInfo (0), fSubBlockCounter (0), fBlockSizeInfo (0), fOwnBuffer (false) { } /** AdditionalCharacters the number of extra CHARs after each CORSIKA Block (21 SubBlocks) */ TSubBlockIO::TSubBlockIO (bool thinned, unsigned int AdditionalCharacters) : fNBlockSizeInfo (AdditionalCharacters), fSubBlockCounter (0), fBlockSizeInfo (new char [AdditionalCharacters]), fOwnBuffer (true) { fBlockSize = (thinned ? crs::TBlock::fgNParticles * crs::TBlock::fgNEntriesThinned : crs::TBlock::fgNParticles * crs::TBlock::fgNEntriesNotThinned); // and also init the TSubBlock fSubBlockData = new CREAL [fBlockSize]; fThinned = thinned; //TSubBlock (new CREAL [fBlockSize], thinned); InitBlockSizeInfo(); } TSubBlockIO::~TSubBlockIO () { delete [] fBlockSizeInfo; if (fSubBlockData && fOwnBuffer) delete [] fSubBlockData; } void TSubBlockIO::SetBuffer(const CREAL* buffer) { // get rid of the allocated buffer if (fSubBlockData && fOwnBuffer) delete [] fSubBlockData; // class does not own the buffer, so it should not delete it fOwnBuffer = false; fSubBlockData = buffer; } void TSubBlockIO::SetBuffer(const crs::TSubBlock& sb) { // get rid of the allocated buffer if (fSubBlockData && fOwnBuffer) delete [] fSubBlockData; // class does not own the buffer, so it should not delete it fOwnBuffer = false; fSubBlockData = sb.GetData(); } /* to overtake foreign data buffer void TSubBlockIO::Grab() { if (fOwnBuffer) return; CREAL* data = fSubBlockData; fOwnBuffer = true; fSubBlockData = new CREAL[fBlockSize]; for (int i=0; i