Diana Software
QEventAssembler.cc
Go to the documentation of this file.
1 #include "QEventAssembler.hh"
2 
4 
6 {
7  fEvent.Clear();
8 }
9 
11 {
12  fEvent = other.fEvent;
13 }
15 {
16  fEvent = other.fEvent;
17  return *this;
18 }
19 
20 std::vector<QEventLabel> QEventAssembler::GetWriteLabels() const
21 {
22  std::vector<QEventLabel> write;
23  std::vector<QEventLabel> all = fEvent.GetLabels();
24  std::vector<QEventLabel>::const_iterator evLabelIter = all.begin();
25  while(evLabelIter!=all.end()) {
26  QEventLabel label = *evLabelIter;
27  QObject** peventData = Get(label.owner.c_str(),label.name.c_str());
28  QObject* eventData = (*peventData);
29  if(eventData->GetWrite()) write.push_back(label);
30  evLabelIter++;
31  }
32  return write;
33 }
34 
35 std::vector<QEventLabel> QEventAssembler::GetRequiredLabels(const std::string& owner) const
36 {
37  std::vector<QEventLabel> required;
38  std::vector<QEventLabel> all = fEvent.GetLabels();
39  std::vector<QEventLabel>::const_iterator evLabelIter = all.begin();
40  while(evLabelIter!=all.end()) {
41  QEventLabel label = *evLabelIter;
42  if(owner == "all" || label.owner == owner ) {
43  QObject** peventData = Get(label.owner.c_str(),label.name.c_str());
44  QObject* eventData = (*peventData);
45  if(eventData->IsRequired()) required.push_back(label);
46  }
47  evLabelIter++;
48  }
49  return required;
50 }
51 
52 void QEventAssembler::SetRequiredLabels(const std::vector<QEventLabel>& labels, bool incremental)
53 {
54  std::vector<QEventLabel> required;
55  std::vector<QEventLabel> all = fEvent.GetLabels();
56  std::vector<QEventLabel>::const_iterator evLabelIter = all.begin();
57  while(evLabelIter!=all.end()) {
58  QEventLabel label = *evLabelIter;
59  QObject** peventData = Get(label.owner.c_str(),label.name.c_str());
60  QObject* eventData = (*peventData);
61  if(find(labels.begin(),labels.end(),label) != labels.end()) {
62  eventData->SetIsRequired(true);
63  } else if(!incremental){
64  eventData->SetIsRequired(false);
65  }
66  evLabelIter++;
67  }
68 }
69 
70 
71 
72 
73 
74 
#define Q_END_NAMESPACE
Definition: QDiana.hh:22
#define Q_BEGIN_NAMESPACE
Definition: QDiana.hh:20
Visitor class of QEvent that provides full handling of QEvent.
QEvent fEvent
the QEvent object.
void Get(const char *owner, WriteHandle< Q > &handle)
Get QObject from the event in write mode. This method has to be called in the event loop,...
void SetRequiredLabels(const std::vector< QEventLabel > &labels, bool incremental=true)
set which QObjects are required. If incremental = false, labels not in the vector are set to not requ...
std::vector< QEventLabel > GetWriteLabels() const
Get the list of all writable QObject labels.
QEventAssembler()
constructor
std::vector< QEventLabel > GetRequiredLabels(const std::string &owner="all") const
Get the list of all required QObject labels.
const QEventAssembler & operator=(const QEventAssembler &)
operator= (copies also the underlying QEvent)
label for QObject in the QEvent
Definition: QEventLabel.hh:23
std::string owner
owner of the QObject
Definition: QEventLabel.hh:60
std::string name
name of the QObject
Definition: QEventLabel.hh:62
void Clear()
reset members to default values
Definition: QEvent.cc:74
std::vector< QEventLabel > GetLabels() const
Get all object labels.
Definition: QEvent.cc:156
base class for objects handled by QEvent and QGlobalDataManager.
Definition: QObject.hh:76
bool GetWrite() const
check wheter write or not this object
Definition: QObject.hh:120
bool IsRequired() const
check wheter this object is required by some module
Definition: QObject.hh:123
void SetIsRequired(bool required=true)
set that this object is required
Definition: QObject.hh:126