DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
IssueDeclarationMacro.hpp File Reference
#include <boost/preprocessor/if.hpp>
#include <boost/preprocessor/seq.hpp>
#include <boost/preprocessor/tuple.hpp>
#include <boost/preprocessor/logical.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/comparison.hpp>
Include dependency graph for IssueDeclarationMacro.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define ERS_EMPTY
#define ERS_IS_EMPTY(x)
#define ERS_IS_EMPTY_I(contents)
#define ERS_IS_EMPTY_II(contents)
#define ERS_IS_EMPTY_III(contents)
#define ERS_IS_EMPTY_HELPER()
#define ERS_IS_EMPTY_DEF_ERS_IS_EMPTY_TRUE   1 ,
#define ERS_IS_EMPTY_DEF_ERS_IS_EMPTY_HELPER   0 ,
#define ERS_TYPE(tuple)
#define ERS_NAME(tuple)
#define ERS_ATTRIBUTE_NAME(_, __, tuple)
#define ERS_ATTRIBUTE_NAME_TYPE(_, __, tuple)
#define ERS_ATTRIBUTE_SERIALIZATION(_, __, tuple)
#define ERS_ATTRIBUTE_ACCESSORS(_, __, tuple)
#define ERS_SET_MESSAGE(message)
#define ERS_PRINT_LIST(decl, attributes)
#define __ERS_DECLARE_ISSUE_BASE__(namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define __ERS_DEFINE_ISSUE_BASE__(INLINE, namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define ERS_DECLARE_ISSUE_BASE_HPP(namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define ERS_DEFINE_ISSUE_BASE_CXX(namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define ERS_DECLARE_ISSUE_HPP(namespace_name, class_name, message, attributes)
#define ERS_DEFINE_ISSUE_CXX(namespace_name, class_name, message, attributes)
#define ERS_DECLARE_ISSUE_BASE(namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define ERS_DECLARE_ISSUE(namespace_name, class_name, message, attributes)

Macro Definition Documentation

◆ __ERS_DECLARE_ISSUE_BASE__

#define __ERS_DECLARE_ISSUE_BASE__ ( namespace_name,
class_name,
base_class_name,
message,
base_attributes,
attributes )

Definition at line 62 of file IssueDeclarationMacro.hpp.

62#define __ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
63namespace namespace_name { \
64 class class_name : public base_class_name { \
65 template <class> friend class ::ers::IssueRegistrator; \
66 protected: \
67 BOOST_PP_EXPR_IF( BOOST_PP_NOT_EQUAL( BOOST_PP_SEQ_SIZE( base_attributes attributes ), 0 ), \
68 class_name( const ers::Context & context ) : base_class_name( context ) { ; } )\
69 static std::list<std::string> _get_inheritance() { \
70 auto chain = base_class_name::_get_inheritance(); \
71 chain.push_back( get_uid() ); \
72 return chain; \
73 } \
74 public: \
75 static const char * get_uid() { return BOOST_PP_STRINGIZE( namespace_name::class_name ); } \
76 class_name( const ers::Context & context \
77 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
78 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ) ); \
79 class_name( const ers::Context & context, \
80 const std::string & msg \
81 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
82 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ) ); \
83 class_name( const ers::Context & context, \
84 const std::string & msg \
85 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
86 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ), \
87 const std::exception & cause ); \
88 class_name( const ers::Context & context \
89 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
90 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ), \
91 const std::exception & cause ); \
92 void raise() const { throw class_name(*this); } \
93 const char * get_class_name() const { return get_uid(); } \
94 virtual std::list<std::string> get_class_inheritance() const override { return _get_inheritance() ; } \
95 base_class_name * clone() const { return new namespace_name::class_name( *this ); } \
96 ERS_PRINT_LIST( ERS_ATTRIBUTE_ACCESSORS, ERS_EMPTY attributes ) \
97 }; \
98}

◆ __ERS_DEFINE_ISSUE_BASE__

#define __ERS_DEFINE_ISSUE_BASE__ ( INLINE,
namespace_name,
class_name,
base_class_name,
message,
base_attributes,
attributes )

Definition at line 100 of file IssueDeclarationMacro.hpp.

100#define __ERS_DEFINE_ISSUE_BASE__( INLINE, namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
101namespace namespace_name { \
102 INLINE class_name::class_name( const ers::Context & context \
103 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
104 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ) ) \
105 : base_class_name( context ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ) ) \
106 { \
107 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
108 BOOST_PP_EXPR_IF( BOOST_PP_NOT( ERS_IS_EMPTY( ERS_EMPTY message ) ), ERS_SET_MESSAGE( ERS_EMPTY message ) )\
109 } \
110 \
111 INLINE class_name::class_name( const ers::Context & context, \
112 const std::string & msg \
113 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
114 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ) ) \
115 : base_class_name( context, msg ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ) ) \
116 { \
117 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
118 } \
119 \
120 INLINE class_name::class_name( const ers::Context & context, \
121 const std::string & msg \
122 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
123 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ), \
124 const std::exception & cause ) \
125 : base_class_name( context, msg ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ), cause ) \
126 { \
127 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
128 } \
129 INLINE class_name::class_name( const ers::Context & context \
130 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
131 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ), \
132 const std::exception & cause ) \
133 : base_class_name( context ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ), cause ) \
134 { \
135 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
136 BOOST_PP_EXPR_IF( BOOST_PP_NOT( ERS_IS_EMPTY( ERS_EMPTY message ) ), ERS_SET_MESSAGE( ERS_EMPTY message ) )\
137 } \
138} \
139namespace { \
140 ers::IssueRegistrator<namespace_name::class_name> namespace_name##_##class_name##_instance; \
141}

◆ ERS_ATTRIBUTE_ACCESSORS

#define ERS_ATTRIBUTE_ACCESSORS ( _,
__,
tuple )
Value:
ERS_TYPE(tuple) \
BOOST_PP_CAT( get_, ERS_NAME(tuple) ) () { \
ERS_TYPE(tuple) val; \
ers::Issue::get_value( BOOST_PP_STRINGIZE(ERS_NAME(tuple)), val ); \
return val; \
}
#define ERS_TYPE(tuple)
#define ERS_NAME(tuple)

Definition at line 46 of file IssueDeclarationMacro.hpp.

46#define ERS_ATTRIBUTE_ACCESSORS( _, __, tuple ) \
47 ERS_TYPE(tuple) \
48 BOOST_PP_CAT( get_, ERS_NAME(tuple) ) () { \
49 ERS_TYPE(tuple) val; \
50 ers::Issue::get_value( BOOST_PP_STRINGIZE(ERS_NAME(tuple)), val ); \
51 return val; \
52 }

◆ ERS_ATTRIBUTE_NAME

#define ERS_ATTRIBUTE_NAME ( _,
__,
tuple )
Value:
, ERS_NAME(tuple)

Definition at line 35 of file IssueDeclarationMacro.hpp.

35#define ERS_ATTRIBUTE_NAME( _, __, tuple ) \
36 , ERS_NAME(tuple)

◆ ERS_ATTRIBUTE_NAME_TYPE

#define ERS_ATTRIBUTE_NAME_TYPE ( _,
__,
tuple )
Value:
, ERS_TYPE(tuple) \
ERS_NAME(tuple)

Definition at line 38 of file IssueDeclarationMacro.hpp.

38#define ERS_ATTRIBUTE_NAME_TYPE( _, __, tuple ) \
39 , ERS_TYPE(tuple) \
40 ERS_NAME(tuple)

◆ ERS_ATTRIBUTE_SERIALIZATION

#define ERS_ATTRIBUTE_SERIALIZATION ( _,
__,
tuple )
Value:
set_value( BOOST_PP_STRINGIZE(ERS_NAME(tuple)), \
ERS_NAME(tuple) );

Definition at line 42 of file IssueDeclarationMacro.hpp.

42#define ERS_ATTRIBUTE_SERIALIZATION( _, __, tuple ) \
43 set_value( BOOST_PP_STRINGIZE(ERS_NAME(tuple)), \
44 ERS_NAME(tuple) );

◆ ERS_DECLARE_ISSUE

#define ERS_DECLARE_ISSUE ( namespace_name,
class_name,
message,
attributes )
Value:
__ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, attributes ) \
__ERS_DEFINE_ISSUE_BASE__( inline, namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, attributes )
#define __ERS_DECLARE_ISSUE_BASE__(namespace_name, class_name, base_class_name, message, base_attributes, attributes)
#define ERS_EMPTY
Base class for any user define issue.
Definition Issue.hpp:80

Definition at line 159 of file IssueDeclarationMacro.hpp.

159#define ERS_DECLARE_ISSUE( namespace_name, class_name, message, attributes ) \
160 __ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, attributes ) \
161 __ERS_DEFINE_ISSUE_BASE__( inline, namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, attributes )

◆ ERS_DECLARE_ISSUE_BASE

#define ERS_DECLARE_ISSUE_BASE ( namespace_name,
class_name,
base_class_name,
message,
base_attributes,
attributes )
Value:
__ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
__ERS_DEFINE_ISSUE_BASE__( inline, namespace_name, class_name, base_class_name, message, base_attributes, attributes )

Definition at line 155 of file IssueDeclarationMacro.hpp.

155#define ERS_DECLARE_ISSUE_BASE( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
156 __ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
157 __ERS_DEFINE_ISSUE_BASE__( inline, namespace_name, class_name, base_class_name, message, base_attributes, attributes )

◆ ERS_DECLARE_ISSUE_BASE_HPP

#define ERS_DECLARE_ISSUE_BASE_HPP ( namespace_name,
class_name,
base_class_name,
message,
base_attributes,
attributes )
Value:
__ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, base_class_name, ERS_EMPTY message, ERS_EMPTY base_attributes, ERS_EMPTY attributes )

Definition at line 143 of file IssueDeclarationMacro.hpp.

143#define ERS_DECLARE_ISSUE_BASE_HPP( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
144 __ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, base_class_name, ERS_EMPTY message, ERS_EMPTY base_attributes, ERS_EMPTY attributes )

◆ ERS_DECLARE_ISSUE_HPP

#define ERS_DECLARE_ISSUE_HPP ( namespace_name,
class_name,
message,
attributes )
Value:
ERS_DECLARE_ISSUE_BASE_HPP( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, ERS_EMPTY attributes )
#define ERS_DECLARE_ISSUE_BASE_HPP(namespace_name, class_name, base_class_name, message, base_attributes, attributes)

Definition at line 149 of file IssueDeclarationMacro.hpp.

149#define ERS_DECLARE_ISSUE_HPP( namespace_name, class_name, message, attributes ) \
150 ERS_DECLARE_ISSUE_BASE_HPP( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, ERS_EMPTY attributes )

◆ ERS_DEFINE_ISSUE_BASE_CXX

#define ERS_DEFINE_ISSUE_BASE_CXX ( namespace_name,
class_name,
base_class_name,
message,
base_attributes,
attributes )
Value:
__ERS_DEFINE_ISSUE_BASE__( ERS_EMPTY, namespace_name, class_name, base_class_name, ERS_EMPTY message, ERS_EMPTY base_attributes, ERS_EMPTY attributes )
#define __ERS_DEFINE_ISSUE_BASE__(INLINE, namespace_name, class_name, base_class_name, message, base_attributes, attributes)

Definition at line 146 of file IssueDeclarationMacro.hpp.

146#define ERS_DEFINE_ISSUE_BASE_CXX( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
147 __ERS_DEFINE_ISSUE_BASE__( ERS_EMPTY, namespace_name, class_name, base_class_name, ERS_EMPTY message, ERS_EMPTY base_attributes, ERS_EMPTY attributes )

◆ ERS_DEFINE_ISSUE_CXX

#define ERS_DEFINE_ISSUE_CXX ( namespace_name,
class_name,
message,
attributes )
Value:
ERS_DEFINE_ISSUE_BASE_CXX( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, ERS_EMPTY attributes )
#define ERS_DEFINE_ISSUE_BASE_CXX(namespace_name, class_name, base_class_name, message, base_attributes, attributes)

Definition at line 152 of file IssueDeclarationMacro.hpp.

152#define ERS_DEFINE_ISSUE_CXX( namespace_name, class_name, message, attributes ) \
153 ERS_DEFINE_ISSUE_BASE_CXX( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, ERS_EMPTY attributes )

◆ ERS_EMPTY

#define ERS_EMPTY

Definition at line 22 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY

#define ERS_IS_EMPTY ( x)
Value:
#define ERS_IS_EMPTY_HELPER()
#define ERS_IS_EMPTY_I(contents)

Definition at line 24 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_DEF_ERS_IS_EMPTY_HELPER

#define ERS_IS_EMPTY_DEF_ERS_IS_EMPTY_HELPER   0 ,

Definition at line 30 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_DEF_ERS_IS_EMPTY_TRUE

#define ERS_IS_EMPTY_DEF_ERS_IS_EMPTY_TRUE   1 ,

Definition at line 29 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_HELPER

#define ERS_IS_EMPTY_HELPER ( )
Value:
ERS_IS_EMPTY_TRUE

Definition at line 28 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_I

#define ERS_IS_EMPTY_I ( contents)
Value:
ERS_IS_EMPTY_II( contents() )
#define ERS_IS_EMPTY_II(contents)

Definition at line 25 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_II

#define ERS_IS_EMPTY_II ( contents)
Value:
ERS_IS_EMPTY_III( contents )
#define ERS_IS_EMPTY_III(contents)

Definition at line 26 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_III

#define ERS_IS_EMPTY_III ( contents)
Value:
BOOST_PP_TUPLE_ELEM( 2, 0, ( ERS_IS_EMPTY_DEF_ ## contents ) )

Definition at line 27 of file IssueDeclarationMacro.hpp.

◆ ERS_NAME

#define ERS_NAME ( tuple)
Value:
BOOST_PP_SEQ_TAIL(tuple)

Definition at line 33 of file IssueDeclarationMacro.hpp.

◆ ERS_PRINT_LIST

#define ERS_PRINT_LIST ( decl,
attributes )
Value:
BOOST_PP_SEQ_FOR_EACH( decl, _, attributes )

Definition at line 59 of file IssueDeclarationMacro.hpp.

59#define ERS_PRINT_LIST( decl, attributes ) \
60 BOOST_PP_SEQ_FOR_EACH( decl, _, attributes )

◆ ERS_SET_MESSAGE

#define ERS_SET_MESSAGE ( message)
Value:
std::ostringstream out;\
out << message;\
prepend_message( out.str() );

Definition at line 54 of file IssueDeclarationMacro.hpp.

54#define ERS_SET_MESSAGE( message ) \
55 std::ostringstream out;\
56 out << message;\
57 prepend_message( out.str() );

◆ ERS_TYPE

#define ERS_TYPE ( tuple)
Value:
BOOST_PP_SEQ_HEAD(tuple)

Definition at line 32 of file IssueDeclarationMacro.hpp.