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)