1 #ifndef _det_VManager_h_
2 #define _det_VManager_h_
9 #include <boost/lexical_cast.hpp>
10 #include <utl/TabulatedFunction.h>
11 #include <utl/TabulatedFunctionComplexLgAmpPhase.h>
12 #include <utl/ErrorLogger.h>
13 #include <utl/AugerException.h>
14 #include <utl/Reader.h>
15 #include <utl/TypeId.h>
21 #define VMANAGER_GETDATA_DENIED(_T_...) \
25 const std::string& componentProperty, \
26 const std::string& componentName, \
27 const VManager::IndexMap&) \
30 ERROR(NotImplementedMessage(#_T_, componentProperty, componentName)); \
41 #define VMANAGER_GETDATA_NOTFOUND(_T_...) \
45 const std::string& componentProperty, \
46 const std::string& componentName, \
47 const VManager::IndexMap&) \
50 if (IsReportingErrors()) \
51 ERROR(NotImplementedMessage(#_T_, componentProperty, componentName)); \
59 #define VMANAGER_GETDATA_CALL(_GetData_, _T_...) \
60 Status GetData(_T_& returnData, \
61 const std::string& componentProperty, \
62 const std::string& componentName, \
63 const VManager::IndexMap& componentIndex) const \
64 { return _GetData_(returnData, componentProperty, componentName, componentIndex); }
69 #define VMANAGER_GETDATA_DECLARE(_T_...) \
70 Status GetData(_T_& returnData, \
71 const std::string& componentProperty, \
72 const std::string& componentName, \
73 const VManager::IndexMap& componentIndex) const;
75 #define VMANAGER_GETDATA_HANDLE_DENIED \
78 GenericGetData(VManager::Handle& returnData, \
79 const std::string& component, \
80 const std::string& property, \
81 const VManager::IndexMap&) \
84 ERROR(NotImplementedMessage(returnData.GetTypeIdName(), component, property)); \
133 typedef std::map<std::string, std::string>
IndexMap;
150 typename boost::add_reference<typename boost::remove_const<T>::type>::type
Get()
151 { Check<T>();
return *
static_cast<typename boost::add_pointer<typename boost::remove_const<T>::type
>::type>(fData); }
154 typename boost::add_reference<typename boost::add_const<T>::type>::type
Get()
const
155 { Check<T>();
return *
static_cast<typename boost::add_pointer<typename boost::add_const<T>::type
>::type>(fData); }
171 std::ostringstream os;
172 os <<
"cannot Handle(" <<
GetTypeIdName() <<
").Get<" << utl::TypeId::Name<T>() <<
">()";
178 void* fData =
nullptr;
212 virtual void Init(
const std::string& configLink);
233 #define VMANAGER_ABSTRACT_GETDATA(_T_...) \
234 virtual Status GetData(_T_& returnData, \
235 const std::string& componentProperty, \
236 const std::string& componentName, \
237 const IndexMap& componentIndex) const = 0
258 #undef VMANAGER_ABSTRACT_GETDATA
276 const std::string& component,
277 const std::string& property,
285 const std::string& component);
288 const std::string& component,
289 const std::string& property,
295 const std::string& componentName)
297 return std::string(
"('") + componentProperty +
"', '" + componentName +
"')";
301 const std::string& componentName,
309 const IndexMap::const_iterator it = componentIndex.find(componentName);
310 if (it == componentIndex.end()) {
311 std::ostringstream err;
312 err <<
"component " << componentName <<
" not found!";
316 return boost::lexical_cast<T>(it->second);
319 template<
typename T,
typename U>
325 const IndexMap::const_iterator it = componentIndex.find(componentName);
326 return (it == componentIndex.end()) ?
327 boost::lexical_cast<T>(defaultValue) : boost::lexical_cast<T>(it->second);
336 void FindConfig(
const std::string& configLink);
342 const std::string& componentProperty,
343 const std::string& componentName)
const;
368 bool CanAnswer(
const Handle& returnData,
const std::string& component)
const;
372 const std::string& component,
373 const std::string& property,
407 const std::string& component,
408 const std::string& property,
void SetName(const std::string &name)
void FindConfig(const std::string &configLink)
Locate the configuration file in CentralConfig and make a Reader for it.
#define VMANAGER_ABSTRACT_GETDATA(_T_...)
std::string fTypeIdMangledName
Class to hold collection (x,y) points and provide interpolation between them.
Handle & operator=(const Handle &h)
string Demangle(const string &mangledName)
Base class for exceptions trying to access non-existing components.
bool IsInitialized() const
Interface for detector managers.
void AddAvailability(const std::string &component)
virtual void Init(const std::string &configLink)
Manager Initialization. configLink is the CentralConfig hook for the configuration file...
std::set< std::string > fAvailableComponents
void AddAvailability(const std::string &typeIdName, const std::string &component)
Class representing a document branch.
std::string GetTypeIdName() const
Class to hold collection (x,y) points and provide interpolation between them, where y are complex num...
static std::string QueryInfoMessage(const Handle &returnData, const std::string &component)
void Check(const Iterator &i, const Iterator &e, const int id)
#define VMANAGER_GETDATA_DENIED(_T_...)
VManager(const std::string &name)
const std::string & GetName() const
#define WARNING(message)
Macro for logging warning messages.
static T FindComponent(const std::string &componentName, const U &defaultValue, const IndexMap &componentIndex)
Base class for inconsistency/illogicality exceptions.
bool CanAnswer(const Handle &returnData, const std::string &component) const
std::set< std::string > ComponentSet
boost::add_reference< typename boost::add_const< T >::type >::type Get() const
std::string NotImplementedMessage(const std::string &type, const std::string &componentProperty, const std::string &componentName) const
std::map< std::string, std::string > IndexMap
const std::string & GetTypeIdMangledName() const
Status GetData(Handle &returnData, const std::string &component, const std::string &property, const IndexMap &index=IndexMap()) const
new data accessor
bool IsReportingErrors() const
AvailabilityMap fAvailability
boost::add_reference< typename boost::remove_const< T >::type >::type Get()
std::string MangledName()
void SetReportingErrors(const bool flag=true)
Generic data accessors.
std::map< std::string, ComponentSet > AvailabilityMap
static std::string QueryInfoMessage(const std::string &componentProperty, const std::string &componentName)
static T FindComponent(const std::string &componentName, const IndexMap &componentIndex)
#define ERROR(message)
Macro for logging error messages.
Status CheckedGetData(Handle &returnData, const std::string &component, const std::string &property, const IndexMap &index) const
Status
Specifies success or (eventually) various possible failure modes.
virtual Status GenericGetData(Handle &returnData, const std::string &component, const std::string &property, const IndexMap &index) const =0