EnsureOnlyOneSchedule.h
Go to the documentation of this file.
1 #ifndef larcore_CoreUtils_EnsureOnlyOneSchedule_h
2 #define larcore_CoreUtils_EnsureOnlyOneSchedule_h
3 
6 #include "cetlib_except/demangle.h"
7 
8 /**
9  * @file EnsureOnlyOneSchedule.h
10  * @brief Type whose constructor throws if more than one art schedule is configured
11  *
12  * This class is intended to be used in the context of an art job. It
13  * is helpful for services that have the notion of a "current event,"
14  * but are thread-safe within that event. The constructor of this
15  * class will throw an exception if more than one art schedule is
16  * configured. It should be used via private inheritance:
17  *
18  * class MyService : lar::EnsureOnlyOneSchedule<MyService> {
19  * ..
20  * };
21  *
22  */
23 
24 namespace lar {
25  template <typename T>
27  public:
29  {
30  if (auto const nschedules = art::Globals::instance()->nschedules(); nschedules > 1) {
32  << "This job uses " << nschedules << " schedules, but the type '" << cet::demangle_symbol(typeid(T).name()) << " supports\n"
33  << "processing only one event at a time. Please reconfigure your job to use only one schedule.\n";
34  }
35  }
36  };
37 }
38 
39 #endif /* larcore_CoreUtils_EnsureOnlyOneSchedule_h */
40 
41 // Local Variables:
42 // mode: c++
43 // End:
static QCString name
Definition: declinfo.cpp:673
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
LArSoft-specific namespace.
static Globals * instance()
Definition: Globals.cc:17