19 class TMemFile :
public TFile {
21 using ExternalDataPtr_t = std::shared_ptr<const std::vector<char>>;
23 struct ZeroCopyView_t {
26 explicit ZeroCopyView_t(
const char * start,
const size_t size) : fStart(start), fSize(size) {}
32 TMemBlock(
const TMemBlock&) =
delete;
33 TMemBlock &operator=(
const TMemBlock&) =
delete;
35 TMemBlock() =
default;
36 TMemBlock(Long64_t size, TMemBlock *previous =
nullptr);
37 TMemBlock(UChar_t* externalBuffer, Long64_t size);
40 void CreateNext(Long64_t size);
42 TMemBlock *fPrevious{
nullptr};
43 TMemBlock *fNext{
nullptr};
44 UChar_t *fBuffer{
nullptr};
48 ExternalDataPtr_t fExternalData;
49 Bool_t fIsOwnedByROOT{kFALSE};
51 Long64_t fSysOffset{0};
52 TMemBlock *fBlockSeek{
nullptr};
53 Long64_t fBlockOffset{0};
55 constexpr
static Long64_t fgDefaultBlockSize = 2 * 1024 * 1024;
56 Long64_t fDefaultBlockSize = fgDefaultBlockSize;
58 Bool_t IsExternalData()
const {
return !fIsOwnedByROOT; }
60 Long64_t MemRead(Int_t fd,
void *buf, Long64_t len)
const;
63 Int_t SysOpen(
const char *pathname, Int_t flags, UInt_t mode)
override;
64 Int_t SysClose(Int_t fd)
override;
65 Int_t SysReadImpl(Int_t fd,
void *buf, Long64_t len);
66 Int_t SysWriteImpl(Int_t fd,
const void *buf, Long64_t len);
67 Int_t SysRead(Int_t fd,
void *buf, Int_t len)
override;
68 Int_t SysWrite(Int_t fd,
const void *buf, Int_t len)
override;
69 Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)
override;
70 Int_t SysStat(Int_t fd, Long_t *
id, Long64_t *size, Long_t *flags, Long_t *modtime)
override;
71 Int_t SysSync(Int_t fd)
override;
73 void ResetObjects(TDirectoryFile *, TFileMergeInfo *)
const;
82 bool NeedsToWrite(EMode mode)
const {
return mode != EMode::kRead; }
83 bool NeedsExistingFile(EMode mode)
const {
return mode == EMode::kUpdate || mode == EMode::kRead; }
85 EMode ParseOption(Option_t *option);
87 TMemFile &operator=(
const TMemFile&) =
delete;
90 TMemFile(
const char *name, Option_t *option =
"",
const char *ftitle =
"",
91 Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Long64_t defBlockSize = 0LL);
92 TMemFile(
const char *name,
char *buffer, Long64_t size, Option_t *option =
"",
const char *ftitle =
"",
93 Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Long64_t defBlockSize = 0LL);
94 TMemFile(
const char *name, ExternalDataPtr_t data);
95 TMemFile(
const char *name,
const ZeroCopyView_t &datarange);
96 TMemFile(
const char *name, std::unique_ptr<TBufferFile> buffer);
97 TMemFile(
const TMemFile &orig);
100 virtual Long64_t CopyTo(
void *to, Long64_t maxsize)
const;
101 virtual void CopyTo(TBuffer &tobuf)
const;
102 Long64_t GetSize()
const override;
104 void ResetAfterMerge(TFileMergeInfo *)
override;
105 void ResetErrno()
const override;
107 void Print(Option_t *option=
"")
const override;
109 ClassDefOverride(TMemFile, 0)