GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4Queue.cxx
Go to the documentation of this file.
1// $Id$
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
14#include "TGo4Queue.h"
15
16#include "TList.h"
17#include "TMutex.h"
18#include "TCondition.h"
19
20#include "TGo4LockGuard.h"
22
23TGo4Queue::TGo4Queue(const char *name) :
24 TNamed(name ? name : "Default Queue", "This is a Go4 Queue"),
25 fiEntries(0),
26 fiMaxEntries(100),
27 fbWakeUpCall(kFALSE)
28{
29 fxMutex = new TMutex;
30 fxCondition = new TCondition;
31 fxList = new TList;
32}
33
35{
36 //printf ("JAM*************** DTOR of TGo4Queue %s BEGIN\n", GetName());
37 delete fxList; fxList = nullptr;
38 delete fxCondition; fxCondition = nullptr;
39 delete fxMutex; fxMutex = nullptr;
40 // printf ("JAM*************** DTOR of TGo4Queue %s END\n", GetName());
41}
42
43void TGo4Queue::Clear(Option_t *)
44{
45 TGo4LockGuard qguard(fxMutex);
46 fxList->Clear();
47}
48
50{
51 if (IsEmpty()) {
52 fxCondition->Wait();
53 if (fbWakeUpCall) {
54 fbWakeUpCall = kFALSE;
55 return nullptr; // signal by Wake(), give null back!
56 }
57 }
58 return Next();
59}
60
62{
63 TGo4LockGuard qguard(fxMutex);
64 return fxList->Remove(fxList->LastLink());
65}
66
67void TGo4Queue::Add(TObject *ob)
68{
69 {
70 TGo4LockGuard qguard(fxMutex);
71 if (fxList->GetSize() <= fiMaxEntries) {
72 fxList->AddFirst(ob);
73 } else {
75 }
76 }
77 fxCondition->Signal();
78}
79
80Bool_t TGo4Queue::IsEmpty() const
81{
82 TGo4LockGuard qguard(fxMutex);
83 return fxList->IsEmpty();
84}
85
87{
88 fbWakeUpCall = kTRUE;
89 fxCondition->Signal();
90}
#define TGo4LockGuard
TObject * Next()
Definition TGo4Queue.cxx:61
virtual ~TGo4Queue()
Definition TGo4Queue.cxx:34
TList * fxList
Definition TGo4Queue.h:55
Int_t fiEntries
Definition TGo4Queue.h:56
Int_t fiMaxEntries
Definition TGo4Queue.h:57
TMutex * fxMutex
Definition TGo4Queue.h:53
void Add(TObject *ob)
Definition TGo4Queue.cxx:67
void Clear(Option_t *opt="") override
Definition TGo4Queue.cxx:43
virtual void Wake()
Definition TGo4Queue.cxx:86
TGo4Queue(const char *name=nullptr)
Definition TGo4Queue.cxx:23
Bool_t IsEmpty() const
Definition TGo4Queue.cxx:80
TObject * Wait()
Definition TGo4Queue.cxx:49
TCondition * fxCondition
Definition TGo4Queue.h:54
Bool_t fbWakeUpCall
Definition TGo4Queue.h:58