32 ClassImp(TFileCacheWrite);
37 TFileCacheWrite::TFileCacheWrite() : TObject()
53 TFileCacheWrite::TFileCacheWrite(TFile *file, Int_t buffersize)
56 if (buffersize < 10000) buffersize = 512000;
57 fBufferSize = buffersize;
62 fBuffer =
new char[fBufferSize];
63 if (file) file->SetCacheWrite(
this);
64 if (gDebug > 0) Info(
"TFileCacheWrite",
"Creating a write cache with buffersize=%d bytes",buffersize);
70 TFileCacheWrite::~TFileCacheWrite()
79 Bool_t TFileCacheWrite::Flush()
81 if (!fNtot)
return kFALSE;
82 fFile->Seek(fSeekStart);
85 Bool_t status = fFile->WriteBuffer(fBuffer, fNtot);
94 void TFileCacheWrite::Print(Option_t *option)
const
97 printf(
"Write cache for file %s\n",fFile->GetName());
98 printf(
"Size of write cache: %d bytes to be written at %lld\n",fNtot,fSeekStart);
108 Int_t TFileCacheWrite::ReadBuffer(
char *buf, Long64_t pos, Int_t len)
110 if (pos < fSeekStart || pos+len > fSeekStart+fNtot)
return -1;
111 memcpy(buf,fBuffer+pos-fSeekStart,len);
121 Int_t TFileCacheWrite::WriteBuffer(
const char *buf, Long64_t pos, Int_t len)
123 if (fRecursive)
return 0;
127 if (fSeekStart + fNtot != pos) {
129 if (Flush())
return -1;
131 if (fNtot + len >= fBufferSize) {
132 if (Flush())
return -1;
133 if (len >= fBufferSize) {
137 if (fFile->WriteBuffer(buf,len))
return -1;
142 if (!fNtot) fSeekStart = pos;
143 memcpy(fBuffer+fNtot,buf,len);
153 void TFileCacheWrite::SetFile(TFile *file)