26 #include "TGo4LockGuard.h"
35 GO4TRACE((14,
"TGo4BufferQueue::TGo4BufferQueue()", __LINE__, __FILE__));
47 GO4TRACE((14,
"TGo4BufferQueue::TGo4BufferQueue(const char*)", __LINE__, __FILE__));
55 GO4TRACE((14,
"TGo4BufferQueue::InitBuffers()", __LINE__, __FILE__));
70 GO4TRACE((14,
"TGo4BufferQueue::~TTGo4BufferQueue()", __LINE__, __FILE__));
74 TCollection::EmptyGarbageCollection();
87 GO4TRACE((19,
"TGo4BufferQueue::WaitBuffer()", __LINE__, __FILE__));
89 return dynamic_cast<TBuffer*
> ( ob );
94 GO4TRACE((19,
"TGo4BufferQueue::WaitObjectFromBuffer()", __LINE__, __FILE__));
102 TDirectory* savdir=gDirectory;
104 buffer->SetReadMode();
111 TClass* cl = buffer->ReadClass();
113 if(cl == (TClass*) -1)
116 std::cout <<
" Could not receive object of unknown class on buffer queue "<<GetName() <<
" !!!" <<std::endl;
123 obj = buffer->ReadObject(cl);
125 if(savdir) savdir->cd();
135 GO4TRACE((19,
"TGo4BufferQueue::AddBuffer(TBuffer*, Bool_t)", __LINE__, __FILE__));
138 Bool_t entryisnew=kFALSE;
165 Int_t srcsize=buffer->BufferSize();
166 Int_t destsize=entry->BufferSize();
167 if (srcsize>destsize)
169 Realloc(entry,destsize,srcsize);
176 char* source= buffer->Buffer();
177 char* destination= entry->Buffer();
178 memcpy(destination,source,srcsize);
180 Int_t messlen = buffer->Length();
181 entry->SetBufferOffset(messlen);
182 entry->SetByteCount(0);
198 std::cout <<
"Buffer queue "<< GetName()<<
" is full, dropping new entry "<< entry <<
" !!!" << std::endl;
210 GO4TRACE((12,
"TGo4BufferQueue::AddBufferFromObject(TObject*)", __LINE__, __FILE__));
211 if(
object==0)
return;
216 TFile *filsav = gFile;
218 entry->WriteObject(
object);
249 std::cout <<
"Buffer queue "<< GetName()<<
" is full, dropping new entry "<< entry <<
" !!!" << std::endl;
256 GO4TRACE((19,
"TGo4BufferQueue::FreeBuffer(TBuffer*, Bool_t)", __LINE__, __FILE__));
263 Int_t memsize = buffer->BufferSize();
277 while((ob=
Next()) !=0) {
286 if(buffer==0)
return;
289 #if ROOT_VERSION_CODE > ROOT_VERSION(6,0,0)
291 buffer->Expand(newsize);
295 char* memfield = buffer->Buffer();
301 memfield = TStorage::ReAllocChar(memfield,
302 (newsize+extraspace),
303 (oldsize+extraspace));
305 buffer->ResetBit(TBuffer::kIsOwner);
307 buffer->SetBuffer(memfield, newsize);
309 buffer->SetBit(TBuffer::kIsOwner);
315 buffer->SetBufferOffset(newsize);
325 TNamed* dummy=
new TNamed(
"This is a default buffer filler",
"GO4 is fun!");
326 TFile *filsav = gFile;
328 buf->WriteObject(dummy);
337 char* field= buf->Buffer() +
sizeof(UInt_t);
339 buf->SetBufferOffset(
sizeof(UInt_t)+
sizeof(UInt_t) );
340 buf->SetByteCount(0);
347 if(buf==0)
return -1;
348 UInt_t len= buf->Length();
349 if(len != (
sizeof(UInt_t)+
sizeof(UInt_t)))
return -2;
352 char* field=buf->Buffer();
353 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 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,...)