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 51 of file IssueDeclarationMacro.hpp.

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

◆ __ERS_DEFINE_ISSUE_BASE__

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

Definition at line 89 of file IssueDeclarationMacro.hpp.

89#define __ERS_DEFINE_ISSUE_BASE__( INLINE, namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
90namespace namespace_name { \
91 INLINE class_name::class_name( const ers::Context & context \
92 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
93 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ) ) \
94 : base_class_name( context ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ) ) \
95 { \
96 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
97 BOOST_PP_EXPR_IF( BOOST_PP_NOT( ERS_IS_EMPTY( ERS_EMPTY message ) ), ERS_SET_MESSAGE( ERS_EMPTY message ) )\
98 } \
99 \
100 INLINE class_name::class_name( const ers::Context & context, \
101 const std::string & msg \
102 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
103 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ) ) \
104 : base_class_name( context, msg ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ) ) \
105 { \
106 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
107 } \
108 \
109 INLINE class_name::class_name( const ers::Context & context, \
110 const std::string & msg \
111 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
112 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ), \
113 const std::exception & cause ) \
114 : base_class_name( context, msg ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ), cause ) \
115 { \
116 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
117 } \
118 INLINE class_name::class_name( const ers::Context & context \
119 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY base_attributes ) \
120 ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME_TYPE, ERS_EMPTY attributes ), \
121 const std::exception & cause ) \
122 : base_class_name( context ERS_PRINT_LIST( ERS_ATTRIBUTE_NAME, ERS_EMPTY base_attributes ), cause ) \
123 { \
124 ERS_PRINT_LIST( ERS_ATTRIBUTE_SERIALIZATION, ERS_EMPTY attributes ) \
125 BOOST_PP_EXPR_IF( BOOST_PP_NOT( ERS_IS_EMPTY( ERS_EMPTY message ) ), ERS_SET_MESSAGE( ERS_EMPTY message ) )\
126 } \
127} \
128namespace { \
129 ers::IssueRegistrator<namespace_name::class_name> namespace_name##_##class_name##_instance; \
130}

◆ 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 35 of file IssueDeclarationMacro.hpp.

35#define ERS_ATTRIBUTE_ACCESSORS( _, __, tuple ) \
36 ERS_TYPE(tuple) \
37 BOOST_PP_CAT( get_, ERS_NAME(tuple) ) () { \
38 ERS_TYPE(tuple) val; \
39 ers::Issue::get_value( BOOST_PP_STRINGIZE(ERS_NAME(tuple)), val ); \
40 return val; \
41 }

◆ ERS_ATTRIBUTE_NAME

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

Definition at line 24 of file IssueDeclarationMacro.hpp.

24#define ERS_ATTRIBUTE_NAME( _, __, tuple ) \
25 , ERS_NAME(tuple)

◆ ERS_ATTRIBUTE_NAME_TYPE

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

Definition at line 27 of file IssueDeclarationMacro.hpp.

27#define ERS_ATTRIBUTE_NAME_TYPE( _, __, tuple ) \
28 , ERS_TYPE(tuple) \
29 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 31 of file IssueDeclarationMacro.hpp.

31#define ERS_ATTRIBUTE_SERIALIZATION( _, __, tuple ) \
32 set_value( BOOST_PP_STRINGIZE(ERS_NAME(tuple)), \
33 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:69

Definition at line 148 of file IssueDeclarationMacro.hpp.

148#define ERS_DECLARE_ISSUE( namespace_name, class_name, message, attributes ) \
149 __ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, ers::Issue, ERS_EMPTY message, ERS_EMPTY, attributes ) \
150 __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 144 of file IssueDeclarationMacro.hpp.

144#define ERS_DECLARE_ISSUE_BASE( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
145 __ERS_DECLARE_ISSUE_BASE__( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
146 __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 132 of file IssueDeclarationMacro.hpp.

132#define ERS_DECLARE_ISSUE_BASE_HPP( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
133 __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 138 of file IssueDeclarationMacro.hpp.

138#define ERS_DECLARE_ISSUE_HPP( namespace_name, class_name, message, attributes ) \
139 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 135 of file IssueDeclarationMacro.hpp.

135#define ERS_DEFINE_ISSUE_BASE_CXX( namespace_name, class_name, base_class_name, message, base_attributes, attributes ) \
136 __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 141 of file IssueDeclarationMacro.hpp.

141#define ERS_DEFINE_ISSUE_CXX( namespace_name, class_name, message, attributes ) \
142 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 11 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 13 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 19 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 18 of file IssueDeclarationMacro.hpp.

◆ ERS_IS_EMPTY_HELPER

#define ERS_IS_EMPTY_HELPER ( )
Value:
ERS_IS_EMPTY_TRUE

Definition at line 17 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 14 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 15 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 16 of file IssueDeclarationMacro.hpp.

◆ ERS_NAME

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

Definition at line 22 of file IssueDeclarationMacro.hpp.

◆ ERS_PRINT_LIST

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

Definition at line 48 of file IssueDeclarationMacro.hpp.

48#define ERS_PRINT_LIST( decl, attributes ) \
49 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 43 of file IssueDeclarationMacro.hpp.

43#define ERS_SET_MESSAGE( message ) \
44 std::ostringstream out;\
45 out << message;\
46 prepend_message( out.str() );

◆ ERS_TYPE

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

Definition at line 21 of file IssueDeclarationMacro.hpp.