Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TBufferIO.h
Go to the documentation of this file.
1// @(#)root/io:$Id$
2// Author: Sergey Linev 21/02/2018
3
4/*************************************************************************
5 * Copyright (C) 1995-2018, 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_TBufferIO
13#define ROOT_TBufferIO
14
15//////////////////////////////////////////////////////////////////////////
16// //
17// TBufferIO //
18// //
19// Direct subclass of TBuffer, implements common methods for //
20// TBufferFile and TBufferText classes //
21// //
22//////////////////////////////////////////////////////////////////////////
23
24#include "TBuffer.h"
25
26#include "TString.h"
27
28class TExMap;
29
30class TBufferIO : public TBuffer {
31
32protected:
33 enum { kNullTag = 0 }; ///< tag value for nullptr in objects map
34
35 Int_t fMapCount{0}; ///< Number of objects or classes in map
36 Int_t fMapSize{0}; ///< Default size of map
37 Int_t fDisplacement{0}; ///< Value to be added to the map offsets
38 UShort_t fPidOffset{0}; ///< Offset to be added to the pid index in this key/buffer.
39 TExMap *fMap{nullptr}; ///< Map containing object,offset pairs for reading/writing
40 TExMap *fClassMap{nullptr}; ///< Map containing object,class pairs for reading
41
42 static Int_t fgMapSize; ///< Default map size for all TBuffer objects
43
44 TBufferIO() {} // NOLINT: not allowed to use = default because of TObject::kIsOnHeap detection, see ROOT-10300
45
47 TBufferIO(TBuffer::EMode mode, Int_t bufsiz);
48 TBufferIO(TBuffer::EMode mode, Int_t bufsiz, void *buf, Bool_t adopt = kTRUE,
49 ReAllocCharFun_t reallocfunc = nullptr);
50
51 ////////////////////////////////////////////////////////////////////////////////
52 /// Return hash value for provided object.
53 static R__ALWAYS_INLINE ULong_t Void_Hash(const void *ptr) { return TString::Hash(&ptr, sizeof(void *)); }
54
55 // method used in TBufferFile, keep here for full compatibility
56 virtual void CheckCount(UInt_t) {}
57
58 Long64_t GetObjectTag(const void *obj);
59
60 virtual void WriteObjectClass(const void *actualObjStart, const TClass *actualClass, Bool_t cacheReuse) = 0;
61
62public:
63 enum { kMapSize = 503 }; ///< default objects map size
64
66 kNotDecompressed = BIT(15), // indicates a weird buffer, used by TBasket
67 kTextBasedStreaming = BIT(18), // indicates if buffer used for XML/SQL object streaming
68
69 kUser1 = BIT(21), // free for user
70 kUser2 = BIT(22), // free for user
71 kUser3 = BIT(23) // free for user
72 };
73
74 virtual ~TBufferIO();
75
76 Int_t GetVersionOwner() const override;
77
78 // See comment in TBuffer::SetPidOffset
79 UShort_t GetPidOffset() const override { return fPidOffset; }
80 void SetPidOffset(UShort_t offset) override;
81 Int_t GetBufferDisplacement() const override { return fDisplacement; }
82 void SetBufferDisplacement() override { fDisplacement = 0; }
83 void SetBufferDisplacement(Int_t skipped) override { fDisplacement = (Int_t)(Length() - skipped); }
84
85 // Utilities for objects map
86 void SetReadParam(Int_t mapsize) override;
87 void SetWriteParam(Int_t mapsize) override;
88 void InitMap() override;
89 void ResetMap() override;
90 void Reset() override;
91 Int_t GetMapCount() const override { return fMapCount; }
92 void MapObject(const TObject *obj, UInt_t offset = 1) override;
93 void MapObject(const void *obj, const TClass *cl, UInt_t offset = 1) override;
94 Bool_t CheckObject(const TObject *obj) override;
95 Bool_t CheckObject(const void *obj, const TClass *ptrClass) override;
96 void GetMappedObject(UInt_t tag, void *&ptr, TClass *&ClassPtr) const override;
97
98 // Utilities for TStreamerInfo
99 void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force) override;
100 void ForceWriteInfoClones(TClonesArray *a) override;
101 Int_t ReadClones(TClonesArray *a, Int_t nobjects, Version_t objvers) override;
102 Int_t WriteClones(TClonesArray *a, Int_t nobjects) override;
103 void TagStreamerInfo(TVirtualStreamerInfo *info) override;
104
105 // Special basic ROOT objects and collections
106 TProcessID *GetLastProcessID(TRefTable *reftable) const override;
107 UInt_t GetTRefExecId() override;
108 TProcessID *ReadProcessID(UShort_t pidf) override;
109 UShort_t WriteProcessID(TProcessID *pid) override;
110
111 Int_t WriteObjectAny(const void *obj, const TClass *ptrClass, Bool_t cacheReuse = kTRUE) override;
112 void WriteObject(const TObject *obj, Bool_t cacheReuse = kTRUE) override;
114
115 static void SetGlobalReadParam(Int_t mapsize);
116 static void SetGlobalWriteParam(Int_t mapsize);
117 static Int_t GetGlobalReadParam();
118 static Int_t GetGlobalWriteParam();
119
120 ClassDefOverride(TBufferIO, 0) // base class, share methods for TBufferFile and TBufferText
121};
122
123#endif
#define R__ALWAYS_INLINE
Definition RConfig.hxx:564
#define a(i)
Definition RSha256.hxx:99
unsigned short UShort_t
Definition RtypesCore.h:40
int Int_t
Definition RtypesCore.h:45
short Version_t
Definition RtypesCore.h:65
unsigned int UInt_t
Definition RtypesCore.h:46
unsigned long ULong_t
Definition RtypesCore.h:55
bool Bool_t
Definition RtypesCore.h:63
long long Long64_t
Definition RtypesCore.h:80
const Bool_t kTRUE
Definition RtypesCore.h:100
#define BIT(n)
Definition Rtypes.h:85
#define ClassDefOverride(name, id)
Definition Rtypes.h:329
char *(* ReAllocCharFun_t)(char *, size_t, size_t)
Definition TStorage.h:30
Direct subclass of TBuffer, implements common methods for TBufferFile and TBufferText classes.
Definition TBufferIO.h:30
void SetWriteParam(Int_t mapsize) override
Set the initial size of the hashtable used to store object and class references during writing.
static void SetGlobalReadParam(Int_t mapsize)
Set the initial size of the map used to store object and class references during reading.
void Reset() override
Reset buffer object. Resets map and buffer offset.
void InitMap() override
Create the fMap container and initialize them with the null object.
Int_t GetVersionOwner() const override
Return the version number of the owner file.
Definition TBufferIO.cxx:77
static void SetGlobalWriteParam(Int_t mapsize)
Set the initial size of the map used to store object and class references during reading.
TProcessID * GetLastProcessID(TRefTable *reftable) const override
Return the last TProcessID in the file.
void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force) override
force writing the TStreamerInfo to the file
void ForceWriteInfoClones(TClonesArray *a) override
Make sure TStreamerInfo is not optimized, otherwise it will not be possible to support schema evoluti...
UShort_t GetPidOffset() const override
Definition TBufferIO.h:79
virtual void WriteObjectClass(const void *actualObjStart, const TClass *actualClass, Bool_t cacheReuse)=0
TExMap * fMap
Map containing object,offset pairs for reading/writing.
Definition TBufferIO.h:39
@ kTextBasedStreaming
Definition TBufferIO.h:67
@ kNotDecompressed
Definition TBufferIO.h:66
void SetReadParam(Int_t mapsize) override
Set the initial size of the map used to store object and class references during reading.
Definition TBufferIO.cxx:97
Bool_t CheckObject(const TObject *obj) override
Check if the specified object is already in the buffer.
void WriteObject(const TObject *obj, Bool_t cacheReuse=kTRUE) override
Write object to I/O buffer.
void MapObject(const TObject *obj, UInt_t offset=1) override
Add object to the fMap container.
Long64_t GetObjectTag(const void *obj)
Returns tag for specified object from objects map (if exists) Returns 0 if object not included into o...
Int_t WriteClones(TClonesArray *a, Int_t nobjects) override
Interface to TStreamerInfo::WriteBufferClones.
UShort_t WriteProcessID(TProcessID *pid) override
Check if the ProcessID pid is already in the file.
TExMap * fClassMap
Map containing object,class pairs for reading.
Definition TBufferIO.h:40
Int_t fDisplacement
Value to be added to the map offsets.
Definition TBufferIO.h:37
static R__ALWAYS_INLINE ULong_t Void_Hash(const void *ptr)
Return hash value for provided object.
Definition TBufferIO.h:53
virtual ~TBufferIO()
destructor
Definition TBufferIO.cxx:68
virtual void CheckCount(UInt_t)
Definition TBufferIO.h:56
Int_t fMapCount
Number of objects or classes in map.
Definition TBufferIO.h:35
void SetBufferDisplacement(Int_t skipped) override
Definition TBufferIO.h:83
static Int_t GetGlobalReadParam()
Get default read map size.
void TagStreamerInfo(TVirtualStreamerInfo *info) override
Mark the classindex of the current file as using this TStreamerInfo.
static Int_t fgMapSize
Default map size for all TBuffer objects.
Definition TBufferIO.h:42
void ResetMap() override
Delete existing fMap and reset map counter.
TProcessID * ReadProcessID(UShort_t pidf) override
The TProcessID with number pidf is read from file.
UShort_t fPidOffset
Offset to be added to the pid index in this key/buffer.
Definition TBufferIO.h:38
Int_t ReadClones(TClonesArray *a, Int_t nobjects, Version_t objvers) override
Interface to TStreamerInfo::ReadBufferClones.
void SetBufferDisplacement() override
Definition TBufferIO.h:82
void GetMappedObject(UInt_t tag, void *&ptr, TClass *&ClassPtr) const override
Retrieve the object stored in the buffer's object map at 'tag' Set ptr and ClassPtr respectively to t...
Int_t WriteObjectAny(const void *obj, const TClass *ptrClass, Bool_t cacheReuse=kTRUE) override
Write object to I/O buffer.
Int_t GetMapCount() const override
Definition TBufferIO.h:91
void SetPidOffset(UShort_t offset) override
This offset is used when a key (or basket) is transfered from one file to the other.
Int_t GetBufferDisplacement() const override
Definition TBufferIO.h:81
Int_t fMapSize
Default size of map.
Definition TBufferIO.h:36
static Int_t GetGlobalWriteParam()
Get default write map size.
UInt_t GetTRefExecId() override
Return the exec id stored in the current TStreamerInfo element.
Buffer base class used for serializing objects.
Definition TBuffer.h:43
virtual void WriteObject(const TObject *obj, Bool_t cacheReuse)=0
Int_t Length() const
Definition TBuffer.h:100
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:80
An array of clone (identical) objects.
This class stores a (key,value) pair using an external hash.
Definition TExMap.h:33
Mother of all ROOT objects.
Definition TObject.h:41
A TProcessID identifies a ROOT job in a unique way in time and space.
Definition TProcessID.h:74
A TRefTable maintains the association between a referenced object and the parent object supporting th...
Definition TRefTable.h:35
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.
Definition TString.cxx:662
Abstract Interface class describing Streamer information for one class.