22 #include "Riostream.h"
28 #include "TGo4LockGuard.h"
30 #if ROOT_VERSION_CODE > ROOT_VERSION(4,3,2)
46 GO4TRACE((14,
"TGo4BufferQueue::TGo4BufferQueue()", __LINE__, __FILE__));
59 GO4TRACE((14,
"TGo4BufferQueue::TGo4BufferQueue(const char*)", __LINE__, __FILE__));
67 GO4TRACE((14,
"TGo4BufferQueue::InitBuffers()", __LINE__, __FILE__));
81 GO4TRACE((14,
"TGo4BufferQueue::~TTGo4BufferQueue()", __LINE__, __FILE__));
84 TCollection::EmptyGarbageCollection();
93 GO4TRACE((19,
"TGo4BufferQueue::WaitBuffer()", __LINE__, __FILE__));
95 return dynamic_cast<TBuffer*
> ( ob );
100 GO4TRACE((19,
"TGo4BufferQueue::WaitObjectFromBuffer()", __LINE__, __FILE__));
108 TDirectory* savdir=gDirectory;
110 buffer->SetReadMode();
117 TClass* cl = buffer->ReadClass();
119 if(cl == (TClass*) -1)
122 std::cout <<
" Could not receive object of unknown class on buffer queue "<<GetName() <<
" !!!" <<std::endl;
129 obj = buffer->ReadObject(cl);
131 if(savdir) savdir->cd();
141 GO4TRACE((19,
"TGo4BufferQueue::AddBuffer(TBuffer*, Bool_t)", __LINE__, __FILE__));
144 Bool_t entryisnew=kFALSE;
171 Int_t srcsize=buffer->BufferSize();
172 Int_t destsize=entry->BufferSize();
173 if (srcsize>destsize)
175 Realloc(entry,destsize,srcsize);
182 char* source= buffer->Buffer();
183 char* destination= entry->Buffer();
184 memcpy(destination,source,destsize);
186 Int_t messlen = buffer->Length();
187 entry->SetBufferOffset(messlen);
188 entry->SetByteCount(0);
204 std::cout <<
"Buffer queue "<< GetName()<<
" is full, dropping new entry "<< entry <<
" !!!" << std::endl;
216 GO4TRACE((12,
"TGo4BufferQueue::AddBufferFromObject(TObject*)", __LINE__, __FILE__));
217 if(
object==0)
return;
222 TFile *filsav = gFile;
224 entry->WriteObject(
object);
255 std::cout <<
"Buffer queue "<< GetName()<<
" is full, dropping new entry "<< entry <<
" !!!" << std::endl;
263 GO4TRACE((19,
"TGo4BufferQueue::FreeBuffer(TBuffer*, Bool_t)", __LINE__, __FILE__));
273 Int_t memsize=buffer->BufferSize();
300 while((ob=
Next()) !=0) {
309 if(buffer==0)
return;
312 char* memfield = buffer->Buffer();
320 memfield = TStorage::ReAllocChar(memfield,
321 (newsize+extraspace),
322 (oldsize+extraspace));
328 buffer->SetBuffer(memfield, newsize);
336 buffer->SetBufferOffset(newsize);
345 TNamed* dummy=
new TNamed(
"This is a default buffer filler",
"GO4 is fun!");
346 TFile *filsav = gFile;
348 buf->WriteObject(dummy);
357 char* field= buf->Buffer() +
sizeof(UInt_t);
359 buf->SetBufferOffset(
sizeof(UInt_t)+
sizeof(UInt_t) );
360 buf->SetByteCount(0);
367 if(buf==0)
return -1;
368 UInt_t len= buf->Length();
369 if(len != (
sizeof(UInt_t)+
sizeof(UInt_t)))
return -2;
372 char* field=buf->Buffer();
373 char* temp= field +
sizeof(UInt_t);
TObject * WaitObjectFromBuffer()
virtual void Clear(Option_t *opt="")
void Realloc(TBuffer *buffer, Int_t oldsize, Int_t newsize)
static const Int_t fgiBUFINITSIZE
void AddBuffer(TBuffer *buffer, Bool_t clone=kFALSE)
static Int_t DecodeValueBuffer(TBuffer *buf)
static const Int_t fgiISOWNER
static TBuffer * CreateValueBuffer(UInt_t val)
static const Int_t fgiBUFEXTRASPACE
void FreeBuffer(TBuffer *buffer)
void AddBufferFromObject(TObject *object)
virtual ~TGo4BufferQueue()
static void Debug(const char *text,...)