// @(#)root/io:$Id$
// Author: Rene Brun   19/05/2006

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TFileCacheWrite
#define ROOT_TFileCacheWrite

#include "TObject.h"

class TFile;

class TFileCacheWrite : public TObject {

protected:
   Long64_t      fSeekStart;      ///< Seek value of first block in cache
   Int_t         fBufferSize;     ///< Allocated size of fBuffer
   Int_t         fNtot;           ///< Total size of cached blocks
   TFile        *fFile;           ///< Pointer to file
   char         *fBuffer;         ///< [fBufferSize] buffer of contiguous prefetched blocks
   Bool_t        fRecursive;      ///< flag to avoid recursive calls

private:
   TFileCacheWrite(const TFileCacheWrite &) = delete;            //cannot be copied
   TFileCacheWrite& operator=(const TFileCacheWrite &) = delete;

public:
   TFileCacheWrite();
   TFileCacheWrite(TFile *file, Int_t bufsize);
   ~TFileCacheWrite() override;
   virtual Bool_t      Flush();
   virtual Int_t       GetBytesInCache() const { return fNtot; }
           void        Print(Option_t *option="") const override;
   virtual Int_t       ReadBuffer(char *buf, Long64_t pos, Int_t len);
   virtual Int_t       WriteBuffer(const char *buf, Long64_t pos, Int_t len);
   virtual void        SetFile(TFile *file);

   ClassDefOverride(TFileCacheWrite,1)  //TFile cache when writing
};

#endif
