Logo ROOT   6.16/01
Reference Guide
TMemFile.h
Go to the documentation of this file.
1// @(#)root/io:$Id$
2// Author: Philippe Canal, May 2011
3
4/*************************************************************************
5 * Copyright (C) 1995-2009, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TMemFile
13#define ROOT_TMemFile
14
15#include "TFile.h"
16#include <vector>
17#include <memory>
18
19class TMemFile : public TFile {
20public:
21 using ExternalDataPtr_t = std::shared_ptr<const std::vector<char>>;
22
23private:
24 struct TMemBlock {
25 private:
26 TMemBlock(const TMemBlock&); // Not implemented
27 TMemBlock &operator=(const TMemBlock&); // Not implemented.
28 public:
29 TMemBlock();
30 TMemBlock(Long64_t size, TMemBlock *previous = 0);
31 TMemBlock(UChar_t* externalBuffer, Long64_t size);
32 ~TMemBlock();
33
34 void CreateNext(Long64_t size);
35
40 };
41 TMemBlock fBlockList; ///< Collection of memory blocks of size fgDefaultBlockSize
42 const ExternalDataPtr_t fExternalData; ///< shared file data / content
43 Long64_t fSize; ///< Total file size (sum of the size of the chunks)
44 Long64_t fSysOffset; ///< Seek offset in file
45 TMemBlock *fBlockSeek; ///< Pointer to the block we seeked to.
46 Long64_t fBlockOffset; ///< Seek offset within the block
47
49
50 Long64_t MemRead(Int_t fd, void *buf, Long64_t len) const;
51
52 // Overload TFile interfaces.
53 Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode);
55 Int_t SysReadImpl(Int_t fd, void *buf, Long64_t len);
56 Int_t SysWriteImpl(Int_t fd, const void *buf, Long64_t len);
57 Int_t SysRead(Int_t fd, void *buf, Int_t len);
58 Int_t SysWrite(Int_t fd, const void *buf, Int_t len);
59 Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence);
60 Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime);
62
64
65 enum class EMode {
66 kCreate,
68 kUpdate,
69 kRead
70 };
71
72 bool NeedsToWrite(EMode mode) const { return mode != EMode::kRead; }
73 bool NeedsExistingFile(EMode mode) const { return mode == EMode::kUpdate || mode == EMode::kRead; }
74
75 EMode ParseOption(Option_t *option);
76
77 TMemFile &operator=(const TMemFile&); // Not implemented.
78
79public:
80 TMemFile(const char *name, Option_t *option="", const char *ftitle="", Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose);
81 TMemFile(const char *name, char *buffer, Long64_t size, Option_t *option="", const char *ftitle="", Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose);
82 TMemFile(const char *name, ExternalDataPtr_t data);
83 TMemFile(const TMemFile &orig);
84 virtual ~TMemFile();
85
86 virtual Long64_t CopyTo(void *to, Long64_t maxsize) const;
87 virtual void CopyTo(TBuffer &tobuf) const;
88 virtual Long64_t GetSize() const;
89
91 void ResetErrno() const;
92
93 virtual void Print(Option_t *option="") const;
94
95 ClassDef(TMemFile, 0) // A ROOT file that reads/writes on a chunk of memory
96};
97
98#endif
void tobuf(char *&buf, Bool_t x)
Definition: Bytes.h:57
int Int_t
Definition: RtypesCore.h:41
unsigned char UChar_t
Definition: RtypesCore.h:34
unsigned int UInt_t
Definition: RtypesCore.h:42
long Long_t
Definition: RtypesCore.h:50
long long Long64_t
Definition: RtypesCore.h:69
const char Option_t
Definition: RtypesCore.h:62
#define ClassDef(name, id)
Definition: Rtypes.h:324
Buffer base class used for serializing objects.
Definition: TBuffer.h:40
A ROOT file is structured in Directories (like a file system).
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:48
A TMemFile is like a normal TFile except that it reads and writes only from memory.
Definition: TMemFile.h:19
const ExternalDataPtr_t fExternalData
shared file data / content
Definition: TMemFile.h:42
bool NeedsExistingFile(EMode mode) const
Definition: TMemFile.h:73
TMemFile & operator=(const TMemFile &)
Int_t SysRead(Int_t fd, void *buf, Int_t len)
Read specified number of bytes from current offset into the buffer.
Definition: TMemFile.cxx:466
Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime)
Perform a stat on the HDFS file; see TFile::SysStat().
Definition: TMemFile.cxx:648
Int_t SysClose(Int_t fd)
Close the mem file.
Definition: TMemFile.cxx:568
Long64_t fBlockOffset
Seek offset within the block.
Definition: TMemFile.h:46
EMode ParseOption(Option_t *option)
Parse option strings and set fOption.
Definition: TMemFile.cxx:96
TMemBlock * fBlockSeek
Pointer to the block we seeked to.
Definition: TMemFile.h:45
Long64_t fSize
Total file size (sum of the size of the chunks)
Definition: TMemFile.h:43
TMemBlock fBlockList
Collection of memory blocks of size fgDefaultBlockSize.
Definition: TMemFile.h:41
Long64_t MemRead(Int_t fd, void *buf, Long64_t len) const
std::shared_ptr< const std::vector< char > > ExternalDataPtr_t
Definition: TMemFile.h:21
TMemFile(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose)
Usual Constructor. See the TFile constructor for details.
Definition: TMemFile.cxx:142
Long64_t fSysOffset
Seek offset in file.
Definition: TMemFile.h:44
bool NeedsToWrite(EMode mode) const
Definition: TMemFile.h:72
Int_t SysSync(Int_t fd)
Sync remaining data to disk.
Definition: TMemFile.cxx:658
Int_t SysWriteImpl(Int_t fd, const void *buf, Long64_t len)
Write a buffer into the file.
Definition: TMemFile.cxx:576
Int_t SysWrite(Int_t fd, const void *buf, Int_t len)
Write a buffer into the file.
Definition: TMemFile.cxx:640
virtual void Print(Option_t *option="") const
Print all objects in the file.
Definition: TMemFile.cxx:276
static Long64_t fgDefaultBlockSize
Definition: TMemFile.h:48
void ResetErrno() const
Simply calls TSystem::ResetErrno().
Definition: TMemFile.cxx:666
Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode)
Open a file in 'MemFile'.
Definition: TMemFile.cxx:551
virtual Long64_t GetSize() const
Return the current size of the memory file.
Definition: TMemFile.cxx:268
void ResetObjects(TDirectoryFile *, TFileMergeInfo *) const
Wipe all the data from the permanent buffer but keep, the in-memory object alive.
Definition: TMemFile.cxx:365
void ResetAfterMerge(TFileMergeInfo *)
Wipe all the data from the permanent buffer but keep, the in-memory object alive.
Definition: TMemFile.cxx:298
virtual ~TMemFile()
Close and clean-up file.
Definition: TMemFile.cxx:214
Int_t SysReadImpl(Int_t fd, void *buf, Long64_t len)
Read specified number of bytes from current offset into the buffer.
Definition: TMemFile.cxx:408
virtual Long64_t CopyTo(void *to, Long64_t maxsize) const
Copy the binary representation of the TMemFile into the memory area starting at 'to' and of length at...
Definition: TMemFile.cxx:233
Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)
Seek to a specified position in the file.
Definition: TMemFile.cxx:475
@ kUseGeneralPurpose
Use the recommended general-purpose setting; moderate read / write speed and compression ratio.
Definition: Compression.h:53
UChar_t * fBuffer
Definition: TMemFile.h:38
~TMemBlock()
Usual destructors. Delete the block memory.
Definition: TMemFile.cxx:80
TMemBlock * fNext
Definition: TMemFile.h:37
TMemBlock(const TMemBlock &)
void CreateNext(Long64_t size)
Definition: TMemFile.cxx:88
TMemBlock()
Default constructor.
Definition: TMemFile.cxx:48
TMemBlock * fPrevious
Definition: TMemFile.h:36
TMemBlock & operator=(const TMemBlock &)
Long64_t fSize
Definition: TMemFile.h:39