12 #ifndef ROOT_TBufferMerger
13 #define ROOT_TBufferMerger
24 namespace Experimental {
26 class TBufferMergerFile;
48 TBufferMerger(
const char *name, Option_t *option =
"RECREATE", Int_t compress = ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault);
53 TBufferMerger(std::unique_ptr<TFile> output);
56 virtual ~TBufferMerger();
68 std::shared_ptr<TBufferMergerFile> GetFile();
71 size_t GetQueueSize()
const;
74 size_t GetAutoSave()
const;
77 const char* GetMergeOptions();
87 void SetAutoSave(
size_t size);
94 void SetMergeOptions(
const TString& options);
96 friend class TBufferMergerFile;
103 TBufferMerger(
const TBufferMerger &);
106 TBufferMerger &operator=(
const TBufferMerger &);
108 void Init(std::unique_ptr<TFile>);
111 void Push(TBufferFile *buffer);
115 TFileMerger fMerger{
false,
false};
116 std::mutex fMergeMutex;
117 std::mutex fQueueMutex;
118 std::queue<TBufferFile *> fQueue;
119 std::vector<std::weak_ptr<TBufferMergerFile>> fAttachedFiles;
131 class TBufferMergerFile :
public TMemFile {
133 TBufferMerger &fMerger;
137 TBufferMergerFile(TBufferMerger &m);
143 TBufferMergerFile(
const TBufferMergerFile &);
146 TBufferMergerFile &operator=(
const TBufferMergerFile &);
148 friend class TBufferMerger;
152 ~TBufferMergerFile();
154 using TMemFile::Write;
163 virtual Int_t Write(
const char *name =
nullptr, Int_t opt = 0, Int_t bufsize = 0)
override;
165 ClassDefOverride(TBufferMergerFile, 0);