diff --git a/io/io/inc/TMemFile.h b/io/io/inc/TMemFile.h index 110dcacc0b14c6b87eb88a5e97fdeae89d8656cd..642096a35a229a111a35bf38c5815eb07b92df3b 100644 --- a/io/io/inc/TMemFile.h +++ b/io/io/inc/TMemFile.h @@ -45,7 +45,8 @@ private: TMemBlock *fBlockSeek; ///< Pointer to the block we seeked to. Long64_t fBlockOffset; ///< Seek offset within the block - static Long64_t fgDefaultBlockSize; + constexpr static Long64_t fgDefaultBlockSize = 2 * 1024 * 1024; + Long64_t fDefaultBlockSize = fgDefaultBlockSize; Long64_t MemRead(Int_t fd, void *buf, Long64_t len) const; @@ -77,7 +78,8 @@ private: TMemFile &operator=(const TMemFile&); // Not implemented. public: - TMemFile(const char *name, Option_t *option="", const char *ftitle="", Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose); + TMemFile(const char *name, Option_t *option = "", const char *ftitle = "", + Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose, Long64_t defBlockSize = 0LL); TMemFile(const char *name, char *buffer, Long64_t size, Option_t *option="", const char *ftitle="", Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose); TMemFile(const char *name, ExternalDataPtr_t data); TMemFile(const TMemFile &orig); diff --git a/io/io/src/TMemFile.cxx b/io/io/src/TMemFile.cxx index ac1ce8420605f419aa1561708d22c664e7b37032..b6cac80b4eec4c483234df1f18232e5df36bb32d 100644 --- a/io/io/src/TMemFile.cxx +++ b/io/io/src/TMemFile.cxx @@ -40,8 +40,6 @@ only from memory. ClassImp(TMemFile); -Long64_t TMemFile::fgDefaultBlockSize = 2*1024*1024; - //////////////////////////////////////////////////////////////////////////////// /// Default constructor. @@ -137,19 +135,24 @@ TMemFile::TMemFile(const char *path, ExternalDataPtr_t data) : } //////////////////////////////////////////////////////////////////////////////// -/// Usual Constructor. See the TFile constructor for details. - -TMemFile::TMemFile(const char *path, Option_t *option, - const char *ftitle, Int_t compress) : - TMemFile(path, nullptr, -1, option, ftitle, compress) {} +/// \brief Usual Constructor. +/// The defBlockSize parameter defines the size of the blocks of memory allocated +/// when expanding the underlying TMemFileBuffer. If the value 0 is passed, the +/// default block size, fgDefaultBlockSize, is adopted. +/// See the TFile constructor for details. + +TMemFile::TMemFile(const char *path, Option_t *option, const char *ftitle, Int_t compress, Long64_t defBlockSize) + : TMemFile(path, nullptr, -1, option, ftitle, compress) +{ + fDefaultBlockSize = defBlockSize == 0LL ? fgDefaultBlockSize : defBlockSize; +} //////////////////////////////////////////////////////////////////////////////// /// Usual Constructor. See the TFile constructor for details. Copy data from buffer. -TMemFile::TMemFile(const char *path, char *buffer, Long64_t size, Option_t *option, - const char *ftitle, Int_t compress): - TFile(path, "WEB", ftitle, compress), fBlockList(size), - fSize(size), fSysOffset(0), fBlockSeek(&(fBlockList)), fBlockOffset(0) +TMemFile::TMemFile(const char *path, char *buffer, Long64_t size, Option_t *option, const char *ftitle, Int_t compress) + : TFile(path, "WEB", ftitle, compress), fBlockList(size), fSize(size), fSysOffset(0), fBlockSeek(&(fBlockList)), + fBlockOffset(0) { EMode optmode = ParseOption(option); @@ -551,9 +554,9 @@ Long64_t TMemFile::SysSeek(Int_t, Long64_t offset, Int_t whence) Int_t TMemFile::SysOpen(const char * /* pathname */, Int_t /* flags */, UInt_t /* mode */) { if (!fBlockList.fBuffer) { - fBlockList.fBuffer = new UChar_t[fgDefaultBlockSize]; - fBlockList.fSize = fgDefaultBlockSize; - fSize = fgDefaultBlockSize; + fBlockList.fBuffer = new UChar_t[fDefaultBlockSize]; + fBlockList.fSize = fDefaultBlockSize; + fSize = fDefaultBlockSize; } if (fBlockList.fBuffer) { return 0; @@ -604,8 +607,8 @@ Int_t TMemFile::SysWriteImpl(Int_t /* fd */, const void *buf, Long64_t len) buf = (char*)buf + sublen; Int_t len_left = len - sublen; if (!fBlockSeek->fNext) { - fBlockSeek->CreateNext(fgDefaultBlockSize); - fSize += fgDefaultBlockSize; + fBlockSeek->CreateNext(fDefaultBlockSize); + fSize += fDefaultBlockSize; } fBlockSeek = fBlockSeek->fNext; @@ -617,8 +620,8 @@ Int_t TMemFile::SysWriteImpl(Int_t /* fd */, const void *buf, Long64_t len) buf = (char*)buf + fBlockSeek->fSize; len_left -= fBlockSeek->fSize; if (!fBlockSeek->fNext) { - fBlockSeek->CreateNext(fgDefaultBlockSize); - fSize += fgDefaultBlockSize; + fBlockSeek->CreateNext(fDefaultBlockSize); + fSize += fDefaultBlockSize; } fBlockSeek = fBlockSeek->fNext; }