CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator > Class Template Reference

#include <CallbackBase.h>

Inheritance diagram for edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >:
edm::eventsetup::Callback< T, TProduceFunc, TReturn, TRecord, TDecorator >

Public Member Functions

 CallbackBase (T *iProd, std::shared_ptr< TProduceFunc > iProduceFunc, unsigned int iID, const TDecorator &iDec)
 
 CallbackBase (const CallbackBase &)=delete
 
 CallbackBase (CallbackBase &&)=delete
 
ESModuleCallingContextcallingContext ()
 
TDecorator const & decorator () const
 
ESResolverIndex const * getTokenIndices () const
 
template<class DataT >
void holdOntoPointer (DataT *iData)
 
template<typename ProduceFunctor >
WaitingTaskHolder makeProduceTask (oneapi::tbb::task_group *group, ServiceWeakToken const &serviceToken, EventSetupRecordImpl const *record, EventSetupImpl const *eventSetupImpl, bool emitPostPrefetchingSignal, ProduceFunctor &&produceFunctor)
 
void newRecordComing ()
 
CallbackBaseoperator= (const CallbackBase &)=delete
 
CallbackBaseoperator= (CallbackBase &&)=delete
 
std::optional< std::vector< ESResolverIndex > > const & postMayGetResolvers () const
 
template<typename RunModuleFnctr >
void prefetchAsyncImpl (RunModuleFnctr &&runModuleFnctr, WaitingTaskHolder iTask, EventSetupRecordImpl const *iRecord, EventSetupImpl const *iEventSetupImpl, ServiceToken const &token, ESParentContext const &iParent)
 
std::shared_ptr< TProduceFunc > const & produceFunction ()
 
Tproducer ()
 
SerialTaskQueueChainqueue ()
 
template<class RemainingContainerT , class DataT , class ProductsT >
void setData (ProductsT &iProducts)
 
WaitingTaskListtaskList ()
 
unsigned int transitionID () const
 

Protected Member Functions

 ~CallbackBase ()=default
 

Private Member Functions

bool handleMayGet (EventSetupRecordImpl const *iRecord, EventSetupImpl const *iEventSetupImpl)
 
void prefetchNeededDataAsync (WaitingTaskHolder task, EventSetupImpl const *iImpl, ESResolverIndex const *proxies, ServiceToken const &token) const
 
void storeReturnedValues (TReturn iReturn)
 

Private Attributes

ESModuleCallingContext callingContext_
 
TDecorator decorator_
 
const unsigned int id_
 
std::optional< std::vector< ESResolverIndex > > postMayGetResolvers_
 
std::shared_ptr< TProduceFunc > produceFunction_
 
propagate_const< T * > producer_
 
std::array< void *, produce::size< TReturn >::value > proxyData_
 
WaitingTaskList taskList_
 
std::atomic< bool > wasCalledForThisRecord_
 

Detailed Description

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
class edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >

Description: Functional object used as the 'callback' for the CallbackESProductResolver

Usage: Produces data objects for ESProducers in EventSetup system

Definition at line 68 of file CallbackBase.h.

Constructor & Destructor Documentation

◆ CallbackBase() [1/3]

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::CallbackBase ( T iProd,
std::shared_ptr< TProduceFunc >  iProduceFunc,
unsigned int  iID,
const TDecorator &  iDec 
)
inline

Definition at line 70 of file CallbackBase.h.

71  : proxyData_{},
72  producer_(iProd),
73  callingContext_(&iProd->description()),
74  produceFunction_(std::move(iProduceFunc)),
75  id_(iID),
77  decorator_(iDec) {}
propagate_const< T * > producer_
Definition: CallbackBase.h:269
std::atomic< bool > wasCalledForThisRecord_
Definition: CallbackBase.h:277
std::shared_ptr< TProduceFunc > produceFunction_
Definition: CallbackBase.h:274
std::array< void *, produce::size< TReturn >::value > proxyData_
Definition: CallbackBase.h:267
ESModuleCallingContext callingContext_
Definition: CallbackBase.h:270
def move(src, dest)
Definition: eostools.py:511

◆ CallbackBase() [2/3]

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::CallbackBase ( const CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator > &  )
delete

◆ CallbackBase() [3/3]

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::CallbackBase ( CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator > &&  )
delete

◆ ~CallbackBase()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::~CallbackBase ( )
protecteddefault

Member Function Documentation

◆ callingContext()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
ESModuleCallingContext& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::callingContext ( )
inline

Definition at line 229 of file CallbackBase.h.

229 { return callingContext_; }
ESModuleCallingContext callingContext_
Definition: CallbackBase.h:270

◆ decorator()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
TDecorator const& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::decorator ( ) const
inline

◆ getTokenIndices()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
ESResolverIndex const* edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::getTokenIndices ( ) const
inline

◆ handleMayGet()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
bool edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::handleMayGet ( EventSetupRecordImpl const *  iRecord,
EventSetupImpl const *  iEventSetupImpl 
)
inlineprivate

Definition at line 258 of file CallbackBase.h.

Referenced by edm::eventsetup::CallbackBase< T, TProduceFunc, TProduceReturn, TRecord, TDecorator >::prefetchAsyncImpl().

258  {
259  //Handle mayGets
260  TRecord rec;
261  ESParentContext pc{&callingContext_};
262  rec.setImpl(iRecord, transitionID(), getTokenIndices(), iEventSetupImpl, &pc);
263  postMayGetResolvers_ = producer_->updateFromMayConsumes(id_, rec);
264  return static_cast<bool>(postMayGetResolvers_);
265  }
propagate_const< T * > producer_
Definition: CallbackBase.h:269
unsigned int transitionID() const
Definition: CallbackBase.h:224
std::optional< std::vector< ESResolverIndex > > postMayGetResolvers_
Definition: CallbackBase.h:268
ESResolverIndex const * getTokenIndices() const
Definition: CallbackBase.h:225
ESModuleCallingContext callingContext_
Definition: CallbackBase.h:270

◆ holdOntoPointer()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
template<class DataT >
void edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::holdOntoPointer ( DataT *  iData)
inline

Definition at line 204 of file CallbackBase.h.

204  {
206  }
std::array< void *, produce::size< TReturn >::value > proxyData_
Definition: CallbackBase.h:267

◆ makeProduceTask()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
template<typename ProduceFunctor >
WaitingTaskHolder edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::makeProduceTask ( oneapi::tbb::task_group *  group,
ServiceWeakToken const &  serviceToken,
EventSetupRecordImpl const *  record,
EventSetupImpl const *  eventSetupImpl,
bool  emitPostPrefetchingSignal,
ProduceFunctor &&  produceFunctor 
)
inline

Definition at line 85 of file CallbackBase.h.

Referenced by edm::eventsetup::Callback< T, TProduceFunc, TReturn, TRecord, TDecorator >::prefetchAsync().

90  {
91  return WaitingTaskHolder(
92  *group,
93  make_waiting_task([this,
94  group,
95  serviceToken,
96  record,
97  eventSetupImpl,
98  emitPostPrefetchingSignal,
99  produceFunctor =
100  std::forward<ProduceFunctor>(produceFunctor)](std::exception_ptr const* iException) {
101  std::exception_ptr excptr;
102  if (iException) {
103  excptr = *iException;
104  }
105  if (emitPostPrefetchingSignal) {
106  try {
107  convertException::wrap([this, &serviceToken, &record] {
108  ServiceRegistry::Operate guard(serviceToken.lock());
109  record->activityRegistry()->postESModulePrefetchingSignal_.emit(record->key(), callingContext_);
110  });
111  } catch (cms::Exception& caughtException) {
112  if (not excptr) {
113  exceptionContext(caughtException, callingContext_);
114  excptr = std::current_exception();
115  }
116  }
117  }
118  if (excptr) {
119  taskList_.doneWaiting(excptr);
120  return;
121  }
122 
123  producer_->queue().push(
124  *group, [this, serviceToken, record, eventSetupImpl, produceFunctor = std::move(produceFunctor)]() {
126  std::exception_ptr exceptPtr;
127  try {
128  convertException::wrap([this, &serviceToken, &record, &eventSetupImpl, &produceFunctor] {
129  ESModuleCallingContext const& context = callingContext_;
130  auto proxies = getTokenIndices();
131  if (postMayGetResolvers_) {
132  proxies = &((*postMayGetResolvers_).front());
133  }
134  TRecord rec;
135  ESParentContext pc{&context};
136  rec.setImpl(record, transitionID(), proxies, eventSetupImpl, &pc);
137  ServiceRegistry::Operate operate(serviceToken.lock());
138  record->activityRegistry()->preESModuleSignal_.emit(record->key(), context);
139  struct EndGuard {
140  EndGuard(EventSetupRecordImpl const* iRecord, ESModuleCallingContext const& iContext)
141  : record_{iRecord}, context_{iContext} {}
142  ~EndGuard() {
143  record_->activityRegistry()->postESModuleSignal_.emit(record_->key(), context_);
144  }
145  EventSetupRecordImpl const* record_;
146  ESModuleCallingContext const& context_;
147  };
148  EndGuard guard(record, context);
149  decorator_.pre(rec);
150  storeReturnedValues(produceFunctor(rec));
151  decorator_.post(rec);
152  });
153  } catch (cms::Exception& iException) {
154  exceptionContext(iException, callingContext_);
155  exceptPtr = std::current_exception();
156  }
157  taskList_.doneWaiting(exceptPtr);
158  });
159  }));
160  }
void exceptionContext(cms::Exception &, ESModuleCallingContext const &)
void storeReturnedValues(TReturn iReturn)
Definition: CallbackBase.h:239
propagate_const< T * > producer_
Definition: CallbackBase.h:269
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
FunctorWaitingTask< F > * make_waiting_task(F f)
Definition: WaitingTask.h:92
unsigned int transitionID() const
Definition: CallbackBase.h:224
std::optional< std::vector< ESResolverIndex > > postMayGetResolvers_
Definition: CallbackBase.h:268
ESResolverIndex const * getTokenIndices() const
Definition: CallbackBase.h:225
auto wrap(F iFunc) -> decltype(iFunc())
ESModuleCallingContext callingContext_
Definition: CallbackBase.h:270
def move(src, dest)
Definition: eostools.py:511

◆ newRecordComing()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
void edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::newRecordComing ( )
inline

Definition at line 219 of file CallbackBase.h.

219  {
220  wasCalledForThisRecord_ = false;
221  taskList_.reset();
222  }
void reset()
Resets access to the resource so that added tasks will wait.
std::atomic< bool > wasCalledForThisRecord_
Definition: CallbackBase.h:277

◆ operator=() [1/2]

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
CallbackBase& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::operator= ( const CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator > &  )
delete

◆ operator=() [2/2]

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
CallbackBase& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::operator= ( CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator > &&  )
delete

◆ postMayGetResolvers()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
std::optional<std::vector<ESResolverIndex> > const& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::postMayGetResolvers ( ) const
inline

Definition at line 227 of file CallbackBase.h.

227 { return postMayGetResolvers_; }
std::optional< std::vector< ESResolverIndex > > postMayGetResolvers_
Definition: CallbackBase.h:268

◆ prefetchAsyncImpl()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
template<typename RunModuleFnctr >
void edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::prefetchAsyncImpl ( RunModuleFnctr &&  runModuleFnctr,
WaitingTaskHolder  iTask,
EventSetupRecordImpl const *  iRecord,
EventSetupImpl const *  iEventSetupImpl,
ServiceToken const &  token,
ESParentContext const &  iParent 
)
inline

Definition at line 163 of file CallbackBase.h.

Referenced by edm::eventsetup::Callback< T, TProduceFunc, TReturn, TRecord, TDecorator >::prefetchAsync().

168  {
169  bool expected = false;
170  auto doPrefetch = wasCalledForThisRecord_.compare_exchange_strong(expected, true);
171  taskList_.add(iTask);
172  if (doPrefetch) {
173  auto group = iTask.group();
174  ServiceWeakToken weakToken(token);
175  WaitingTaskHolder runModuleTaskHolder = runModuleFnctr(group, weakToken, iRecord, iEventSetupImpl);
177  iRecord->activityRegistry()->preESModulePrefetchingSignal_.emit(iRecord->key(), callingContext_);
178  if UNLIKELY (producer_->hasMayConsumes()) {
179  //after prefetching need to do the mayGet
180  auto mayGetTask = make_waiting_task(
181  [this, iRecord, iEventSetupImpl, weakToken, runModuleTaskHolder = std::move(runModuleTaskHolder)](
182  std::exception_ptr const* iExcept) mutable {
183  if (iExcept) {
184  runModuleTaskHolder.doneWaiting(*iExcept);
185  return;
186  }
187  if (handleMayGet(iRecord, iEventSetupImpl)) {
189  runModuleTaskHolder, iEventSetupImpl, &((*postMayGetResolvers_).front()), weakToken.lock());
190  } else {
191  runModuleTaskHolder.doneWaiting(std::exception_ptr{});
192  }
193  });
194 
195  //Get everything we can before knowing about the mayGets
196  prefetchNeededDataAsync(WaitingTaskHolder(*group, mayGetTask), iEventSetupImpl, getTokenIndices(), token);
197  } else {
198  prefetchNeededDataAsync(runModuleTaskHolder, iEventSetupImpl, getTokenIndices(), token);
199  }
200  }
201  }
bool handleMayGet(EventSetupRecordImpl const *iRecord, EventSetupImpl const *iEventSetupImpl)
Definition: CallbackBase.h:258
propagate_const< T * > producer_
Definition: CallbackBase.h:269
void prefetchNeededDataAsync(WaitingTaskHolder task, EventSetupImpl const *iImpl, ESResolverIndex const *proxies, ServiceToken const &token) const
Definition: CallbackBase.h:244
void add(oneapi::tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
FunctorWaitingTask< F > * make_waiting_task(F f)
Definition: WaitingTask.h:92
std::atomic< bool > wasCalledForThisRecord_
Definition: CallbackBase.h:277
ESResolverIndex const * getTokenIndices() const
Definition: CallbackBase.h:225
void setContext(State state, ESParentContext const &parent)
#define UNLIKELY(x)
Definition: Likely.h:21
ESModuleCallingContext callingContext_
Definition: CallbackBase.h:270
def move(src, dest)
Definition: eostools.py:511

◆ prefetchNeededDataAsync()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
void edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::prefetchNeededDataAsync ( WaitingTaskHolder  task,
EventSetupImpl const *  iImpl,
ESResolverIndex const *  proxies,
ServiceToken const &  token 
) const
inlineprivate

Definition at line 244 of file CallbackBase.h.

Referenced by edm::eventsetup::CallbackBase< T, TProduceFunc, TProduceReturn, TRecord, TDecorator >::prefetchAsyncImpl().

247  {
248  auto recs = producer_->getTokenRecordIndices(id_);
249  auto n = producer_->numberOfTokenIndices(id_);
250  for (size_t i = 0; i != n; ++i) {
251  auto rec = iImpl->findImpl(recs[i]);
252  if (rec) {
253  rec->prefetchAsync(task, proxies[i], iImpl, token, ESParentContext{&callingContext_});
254  }
255  }
256  }
propagate_const< T * > producer_
Definition: CallbackBase.h:269
ESModuleCallingContext callingContext_
Definition: CallbackBase.h:270

◆ produceFunction()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
std::shared_ptr<TProduceFunc> const& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::produceFunction ( )
inline

◆ producer()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
T* edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::producer ( )
inline

Definition at line 228 of file CallbackBase.h.

Referenced by edm::eventsetup::Callback< T, TProduceFunc, TReturn, TRecord, TDecorator >::clone().

228 { return producer_.get(); }
constexpr element_type const * get() const
propagate_const< T * > producer_
Definition: CallbackBase.h:269

◆ queue()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
SerialTaskQueueChain& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::queue ( )
inline

Definition at line 233 of file CallbackBase.h.

233 { return producer_->queue(); }
propagate_const< T * > producer_
Definition: CallbackBase.h:269

◆ setData()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
template<class RemainingContainerT , class DataT , class ProductsT >
void edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::setData ( ProductsT &  iProducts)
inline

Definition at line 209 of file CallbackBase.h.

209  {
210  DataT* temp = reinterpret_cast<DataT*>(proxyData_[produce::find_index<TReturn, DataT>::value]);
211  if (nullptr != temp) {
212  moveFromTo(iProducts, *temp);
213  }
214  if constexpr (not std::is_same_v<produce::Null, RemainingContainerT>) {
215  setData<typename RemainingContainerT::head_type, typename RemainingContainerT::tail_type>(iProducts);
216  }
217  }
void moveFromTo(FromT &iFrom, ToT &iTo)
std::array< void *, produce::size< TReturn >::value > proxyData_
Definition: CallbackBase.h:267

◆ storeReturnedValues()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
void edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::storeReturnedValues ( TReturn  iReturn)
inlineprivate

Definition at line 239 of file CallbackBase.h.

Referenced by edm::eventsetup::CallbackBase< T, TProduceFunc, TProduceReturn, TRecord, TDecorator >::makeProduceTask().

239  {
241  setData<typename type::head_type, typename type::tail_type>(iReturn);
242  }

◆ taskList()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
WaitingTaskList& edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::taskList ( )
inline

Definition at line 230 of file CallbackBase.h.

230 { return taskList_; }

◆ transitionID()

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
unsigned int edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::transitionID ( ) const
inline

Member Data Documentation

◆ callingContext_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
ESModuleCallingContext edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::callingContext_
private

◆ decorator_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
TDecorator edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::decorator_
private

◆ id_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
const unsigned int edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::id_
private

◆ postMayGetResolvers_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
std::optional<std::vector<ESResolverIndex> > edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::postMayGetResolvers_
private

◆ produceFunction_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
std::shared_ptr<TProduceFunc> edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::produceFunction_
private

◆ producer_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
propagate_const<T*> edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::producer_
private

◆ proxyData_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
std::array<void*, produce::size<TReturn>::value> edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::proxyData_
private

◆ taskList_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
WaitingTaskList edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::taskList_
private

◆ wasCalledForThisRecord_

template<typename T, typename TProduceFunc, typename TReturn, typename TRecord, typename TDecorator>
std::atomic<bool> edm::eventsetup::CallbackBase< T, TProduceFunc, TReturn, TRecord, TDecorator >::wasCalledForThisRecord_
private