COVISE Core
Classes | Namespaces | Macros | Enumerations | Functions
message_macros.h File Reference
#include "message_types.h"
#include <cassert>
#include <cstring>
#include <memory>
#include <string>
#include <util/tryPrint.h>
Include dependency graph for message_macros.h:

Go to the source code of this file.

Classes

struct  covise::detail::Dummy
 
struct  covise::detail::ValueOrRef< T, Enable >
 
struct  covise::detail::ValueOrRef< T, typename std::enable_if< std::is_arithmetic< T >::value||std::is_pointer< T >::value >::type >
 

Namespaces

namespace  covise
 list of all chemical elements
 
namespace  covise::detail
 

Macros

#define EXPAND(x)   x
 
#define STOP_RECURSION()
 
#define CAT(A, B)   A##B
 
#define SELECT(NAME, NUM)   CAT(NAME##_, NUM)
 
#define GET_COUNT(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, COUNT, ...)   COUNT
 
#define VA_SIZE(...)   EXPAND(GET_COUNT(__VA_ARGS__, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 09, 08, 07, 06, 05, 04, 03, 02, 01))
 
#define VA_SELECT(NAME, ...)
 
#define MY_OVERLOADED(...)   EXPAND(VA_SELECT(MY_OVERLOADED, __VA_ARGS__))
 
#define MY_OVERLOADED_01(ClassName, MacroName, MacroNameLast, _1)   STOP_RECURSION()
 
#define MY_OVERLOADED_03(ClassName, MacroName, MacroNameLast, _1, _2, _3)   STOP_RECURSION()
 
#define MY_OVERLOADED_05(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5)   STOP_RECURSION()
 
#define MY_OVERLOADED_07(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7)   STOP_RECURSION()
 
#define MY_OVERLOADED_09(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9)   STOP_RECURSION()
 
#define MY_OVERLOADED_11(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11)   STOP_RECURSION()
 
#define MY_OVERLOADED_13(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13)   STOP_RECURSION()
 
#define MY_OVERLOADED_15(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15)   STOP_RECURSION()
 
#define MY_OVERLOADED_17(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17)   STOP_RECURSION()
 
#define MY_OVERLOADED_19(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19)   STOP_RECURSION()
 
#define MY_OVERLOADED_21(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21)   STOP_RECURSION()
 
#define MY_OVERLOADED_23(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23)   STOP_RECURSION()
 
#define MY_OVERLOADED_25(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25)   STOP_RECURSION()
 
#define MY_OVERLOADED_27(ClassName, MacroName, MacroNameLast, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27)   STOP_RECURSION()
 
#define MY_OVERLOADED_02(MacroName, MacroNameLast, T00, N00)   MacroNameLast(T00, N00)
 
#define MY_OVERLOADED_04(MacroName, MacroNameLast, T00, N00, T01, N01)   MacroName(T00, N00) MY_OVERLOADED_02(MacroName, MacroNameLast, T01, N01)
 
#define MY_OVERLOADED_06(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02)   MacroName(T00, N00) MY_OVERLOADED_04(MacroName, MacroNameLast, T01, N01, T02, N02)
 
#define MY_OVERLOADED_08(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03)   MacroName(T00, N00) MY_OVERLOADED_06(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03)
 
#define MY_OVERLOADED_10(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04)   MacroName(T00, N00) MY_OVERLOADED_08(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04)
 
#define MY_OVERLOADED_12(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05)   MacroName(T00, N00) MY_OVERLOADED_10(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05)
 
#define MY_OVERLOADED_14(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06)   MacroName(T00, N00) MY_OVERLOADED_12(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06)
 
#define MY_OVERLOADED_16(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07)   MacroName(T00, N00) MY_OVERLOADED_14(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07)
 
#define MY_OVERLOADED_18(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08)   MacroName(T00, N00) MY_OVERLOADED_16(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08)
 
#define MY_OVERLOADED_20(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09)   MacroName(T00, N00) MY_OVERLOADED_18(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09)
 
#define MY_OVERLOADED_22(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10)   MacroName(T00, N00) MY_OVERLOADED_20(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10)
 
#define MY_OVERLOADED_24(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10, T11, N11)   MacroName(T00, N00) MY_OVERLOADED_22(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10, T11, N11)
 
#define MY_OVERLOADED_26(MacroName, MacroNameLast, T00, N00, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10, T11, N11, T12, N12)   MacroName(T00, N00) MY_OVERLOADED_24(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10, T11, N11, T12, N12)
 
#define ACCESSOR(type, name)    typename covise::detail::ValueOrRef<type>::RetVal name() const { return CAT(m_, name); }\
 
#define DECLARATION(type, name)    type CAT(m_, name);
 
#define CONSTRUCTOR_ELEMENT_LAST(type, name)    typename covise::detail::ValueOrRef<type>::RetVal name
 
#define CONSTRUCTOR_ELEMENT(type, name)    CONSTRUCTOR_ELEMENT_LAST(type, name),
 
#define CONSTRUCTOR_INITIALIZER_ELEM_LAST(type, name)    CAT(m_, name)(name)
 
#define CONSTRUCTOR_INITIALIZER_ELEM(type, name)    CONSTRUCTOR_INITIALIZER_ELEM_LAST(type, name),
 
#define CONSTRUCTOR_INITIALIZER_TB_LAST(type, name)    CAT(m_, name)(covise::detail::get<type>(tb))
 
#define CONSTRUCTOR_INITIALIZER_TB(type, name)    CONSTRUCTOR_INITIALIZER_TB_LAST(type, name),
 
#define FILL_TOKENBUFFER(type, name)    << msg.name()
 
#define TAKE_FROM_TOKENBUFFER(type, name)    >> msg.CAT(m_, name)
 
#define PRINT_CLASS(type, name)
 
#define CHECK_EQUALITY(type, name)    covise::detail::equals(c1.name(), c2.name()) &&
 
#define DECL_TB_SERIALIZABLE_STRUCT(ClassName, export, ...)
 
#define IMPL_TB_SERIALIZABLE_STRUCT(ClassName, ...)
 
#define DECL_MESSAGE_CLASS(ClassName, export, ...)
 
#define IMPL_MESSAGE_CLASS(ClassName, ...)
 
#define DECL_SUB_MESSAGE_CLASS_DETAIL(ClassName, FullClassName, EnumClass, EnumType, export, ...)
 
#define DECL_SUB_MESSAGE_CLASS(ClassName, EnumClass, EnumType, export, ...)    DECL_SUB_MESSAGE_CLASS_DETAIL(ClassName, ClassName##_##EnumType, EnumClass, EnumType, export, __VA_ARGS__)
 
#define IMPL_SUB_MESSAGE_CLASS_DETAIL(ClassName, FullClassName, EnumClass, EnumType, ...)
 
#define IMPL_SUB_MESSAGE_CLASS(ClassName, EnumClass, EnumType, ...)    IMPL_SUB_MESSAGE_CLASS_DETAIL(ClassName, ClassName##_##EnumType, EnumClass, EnumType, __VA_ARGS__)
 
#define DECL_MESSAGE_WITH_SUB_CLASSES(ClassName, EnumClass, export)
 
#define IMPL_MESSAGE_WITH_SUB_CLASSES(ClassName, EnumClass)
 

Enumerations

enum class  covise::detail::MessageSyle { covise::detail::Primary , covise::detail::SubMessage }
 

Functions

template<typename T >
bool covise::detail::equals (const T &t1, const T &t2)
 
template<>
bool covise::detail::equals< char const * > (const char *const &t1, const char *const &t2)
 
Dummy covise::detail::typeCheck (int msgType, int classType)
 

Macro Definition Documentation

◆ ACCESSOR

#define ACCESSOR (   type,
  name 
)     typename covise::detail::ValueOrRef<type>::RetVal name() const { return CAT(m_, name); }\

◆ CAT

#define CAT (   A,
 
)    A##B

◆ CHECK_EQUALITY

#define CHECK_EQUALITY (   type,
  name 
)     covise::detail::equals(c1.name(), c2.name()) &&

◆ CONSTRUCTOR_ELEMENT

#define CONSTRUCTOR_ELEMENT (   type,
  name 
)     CONSTRUCTOR_ELEMENT_LAST(type, name),

◆ CONSTRUCTOR_ELEMENT_LAST

#define CONSTRUCTOR_ELEMENT_LAST (   type,
  name 
)     typename covise::detail::ValueOrRef<type>::RetVal name

◆ CONSTRUCTOR_INITIALIZER_ELEM

#define CONSTRUCTOR_INITIALIZER_ELEM (   type,
  name 
)     CONSTRUCTOR_INITIALIZER_ELEM_LAST(type, name),

◆ CONSTRUCTOR_INITIALIZER_ELEM_LAST

#define CONSTRUCTOR_INITIALIZER_ELEM_LAST (   type,
  name 
)     CAT(m_, name)(name)

◆ CONSTRUCTOR_INITIALIZER_TB

#define CONSTRUCTOR_INITIALIZER_TB (   type,
  name 
)     CONSTRUCTOR_INITIALIZER_TB_LAST(type, name),

◆ CONSTRUCTOR_INITIALIZER_TB_LAST

#define CONSTRUCTOR_INITIALIZER_TB_LAST (   type,
  name 
)     CAT(m_, name)(covise::detail::get<type>(tb))

◆ DECL_MESSAGE_CLASS

#define DECL_MESSAGE_CLASS (   ClassName,
  export,
  ... 
)
Value:
struct export ClassName \
{ \
explicit ClassName(const covise::Message &msg); \
covise::Message createMessage() const; \
EXPAND(MY_OVERLOADED(ACCESSOR, ACCESSOR, __VA_ARGS__)) \
\
private: \
EXPAND(MY_OVERLOADED(DECLARATION, DECLARATION, __VA_ARGS__)) \
}; \
export covise::TokenBuffer &operator<<(covise::TokenBuffer &tb, const ClassName &msg); \
export std::ostream &operator<<(std::ostream &tb, const ClassName &exe); \
export bool sendCoviseMessage(const ClassName &msg, const covise::MessageSenderInterface &sender); \
export bool operator==(const ClassName &c1, const ClassName &c2);
#define DECLARATION(type, name)
Definition: message_macros.h:121
#define MY_OVERLOADED(...)
Definition: message_macros.h:87
#define CONSTRUCTOR_ELEMENT_LAST(type, name)
Definition: message_macros.h:124
#define CONSTRUCTOR_ELEMENT(type, name)
Definition: message_macros.h:127
#define EXPAND(x)
Definition: message_macros.h:73
#define ACCESSOR(type, name)
Definition: message_macros.h:118
QTextStream & operator<<(QTextStream &out, const coConfigEntryStringList list)
Definition: coConfigEntryString.cpp:159
INLINE bool operator==(const coObjID &a, const coObjID &b)
Definition: coObjID.h:166
MessageSyle
Definition: message_macros.h:62
Definition: message.h:76
Definition: message_macros.h:39
Definition: message_sender_interface.h:20
Definition: tokenbuffer.h:79

◆ DECL_MESSAGE_WITH_SUB_CLASSES

#define DECL_MESSAGE_WITH_SUB_CLASSES (   ClassName,
  EnumClass,
  export 
)

◆ DECL_SUB_MESSAGE_CLASS

#define DECL_SUB_MESSAGE_CLASS (   ClassName,
  EnumClass,
  EnumType,
  export,
  ... 
)     DECL_SUB_MESSAGE_CLASS_DETAIL(ClassName, ClassName##_##EnumType, EnumClass, EnumType, export, __VA_ARGS__)

◆ DECL_SUB_MESSAGE_CLASS_DETAIL

#define DECL_SUB_MESSAGE_CLASS_DETAIL (   ClassName,
  FullClassName,
  EnumClass,
  EnumType,
  export,
  ... 
)
Value:
struct export FullClassName : public ClassName \
{ \
friend struct ClassName; \
typedef ClassName Base; \
explicit FullClassName(EXPAND(MY_OVERLOADED(CONSTRUCTOR_ELEMENT, CONSTRUCTOR_ELEMENT_LAST, __VA_ARGS__))); \
FullClassName(const FullClassName &) = delete; \
FullClassName(FullClassName &&) = default; \
FullClassName &operator=(const FullClassName &) = delete; \
FullClassName &operator=(FullClassName &&) = default; \
~FullClassName() = default; \
covise::Message createMessage() const; \
EXPAND(MY_OVERLOADED(ACCESSOR, ACCESSOR, __VA_ARGS__)) \
\
static const EnumClass subType = EnumClass::EnumType; \
private: \
EXPAND(MY_OVERLOADED(DECLARATION, DECLARATION, __VA_ARGS__)) \
explicit FullClassName(const covise::Message &msg); \
explicit FullClassName(covise::detail::Dummy, covise::TokenBuffer &&tb); \
}; \
export covise::TokenBuffer &operator<<(covise::TokenBuffer &tb, const FullClassName &msg); \
export std::ostream &operator<<(std::ostream &tb, const FullClassName &exe); \
export bool sendCoviseMessage(const FullClassName &msg, const covise::MessageSenderInterface &sender);

◆ DECL_TB_SERIALIZABLE_STRUCT

#define DECL_TB_SERIALIZABLE_STRUCT (   ClassName,
  export,
  ... 
)
Value:
struct export ClassName{ \
EXPAND(MY_OVERLOADED(DECLARATION, DECLARATION, __VA_ARGS__)) \
EXPAND(MY_OVERLOADED(ACCESSOR, ACCESSOR, __VA_ARGS__))}; \
export covise::TokenBuffer &operator<<(covise::TokenBuffer &tb, const ClassName &msg); \
export covise::TokenBuffer &operator>>(covise::TokenBuffer &tb, ClassName &msg); \
export std::ostream &operator<<(std::ostream &os, const ClassName &msg);
NETEXPORT covise::TokenBuffer & operator>>(covise::TokenBuffer &tb, covise::Program &userType)
Definition: program_type.cpp:34

◆ DECLARATION

#define DECLARATION (   type,
  name 
)     type CAT(m_, name);

◆ EXPAND

#define EXPAND (   x)    x

◆ FILL_TOKENBUFFER

#define FILL_TOKENBUFFER (   type,
  name 
)     << msg.name()

◆ GET_COUNT

#define GET_COUNT (   _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19,
  _20,
  _21,
  _22,
  _23,
  _24,
  _25,
  _26,
  _27,
  _28,
  COUNT,
  ... 
)    COUNT

◆ IMPL_MESSAGE_CLASS

#define IMPL_MESSAGE_CLASS (   ClassName,
  ... 
)

◆ IMPL_MESSAGE_WITH_SUB_CLASSES

#define IMPL_MESSAGE_WITH_SUB_CLASSES (   ClassName,
  EnumClass 
)
Value:
ClassName::ClassName(const covise::Message &msg) : ClassName(covise::detail::typeCheck(msg.type, covise::CAT(COVISE_MESSAGE_, ClassName)), covise::TokenBuffer(&msg), msg) {} \
ClassName::ClassName(covise::detail::Dummy, covise::TokenBuffer &&tb, const covise::Message &msg) \
: type(static_cast<EnumClass>(covise::detail::get<int>(tb))), m_msg(&msg) {} \
ClassName::ClassName(EnumClass t) \
: type(t) \
{ \
}
GLdouble GLdouble t
Definition: khronos-glext.h:6449
GLenum type
Definition: khronos-glext.h:6279
#define CAT(A, B)
Definition: message_macros.h:77
list of all chemical elements
Definition: coConfig.h:27
Dummy typeCheck(int msgType, int classType)
Definition: message_macros.h:42

◆ IMPL_SUB_MESSAGE_CLASS

#define IMPL_SUB_MESSAGE_CLASS (   ClassName,
  EnumClass,
  EnumType,
  ... 
)     IMPL_SUB_MESSAGE_CLASS_DETAIL(ClassName, ClassName##_##EnumType, EnumClass, EnumType, __VA_ARGS__)

◆ IMPL_SUB_MESSAGE_CLASS_DETAIL

#define IMPL_SUB_MESSAGE_CLASS_DETAIL (   ClassName,
  FullClassName,
  EnumClass,
  EnumType,
  ... 
)
Value:
FullClassName::FullClassName(EXPAND(MY_OVERLOADED(CONSTRUCTOR_ELEMENT, CONSTRUCTOR_ELEMENT_LAST, __VA_ARGS__))) \
: ClassName(EnumClass::EnumType), EXPAND(MY_OVERLOADED(CONSTRUCTOR_INITIALIZER_ELEM, CONSTRUCTOR_INITIALIZER_ELEM_LAST, __VA_ARGS__)) {} \
FullClassName::FullClassName(const covise::Message &msg) : FullClassName(covise::detail::typeCheck(msg.type, covise::CAT(COVISE_MESSAGE_, ClassName)), covise::TokenBuffer{&msg}) {} \
FullClassName::FullClassName(covise::detail::Dummy, covise::TokenBuffer &&tb) \
: ClassName(static_cast<EnumClass>(covise::detail::get<int>(tb))), EXPAND(MY_OVERLOADED(CONSTRUCTOR_INITIALIZER_TB, CONSTRUCTOR_INITIALIZER_TB_LAST, __VA_ARGS__)) {} \
covise::Message FullClassName::createMessage() const \
{ \
covise::TokenBuffer tb; \
tb << *this; \
covise::Message m{tb}; \
m.type = covise::CAT(COVISE_MESSAGE_, ClassName); \
return m; \
} \
covise::TokenBuffer &operator<<(covise::TokenBuffer &tb, const FullClassName &msg) \
{ \
tb << static_cast<int>(msg.type) EXPAND(MY_OVERLOADED(FILL_TOKENBUFFER, FILL_TOKENBUFFER, __VA_ARGS__)); \
return tb; \
} \
bool sendCoviseMessage(const FullClassName &msg, const covise::MessageSenderInterface &sender) \
{ \
auto m = msg.createMessage(); \
return sender.send(&m); \
} \
std::ostream &operator<<(std::ostream &os, const FullClassName &msg) \
{ \
os << #FullClassName << ":" << std::endl; \
EXPAND(MY_OVERLOADED(PRINT_CLASS, PRINT_CLASS, __VA_ARGS__)); \
os << std::endl; \
return os; \
}
const GLfloat * m
Definition: khronos-glext.h:12117
#define CONSTRUCTOR_INITIALIZER_ELEM_LAST(type, name)
Definition: message_macros.h:130
#define FILL_TOKENBUFFER(type, name)
Definition: message_macros.h:143
#define PRINT_CLASS(type, name)
Definition: message_macros.h:149
#define CONSTRUCTOR_INITIALIZER_TB(type, name)
Definition: message_macros.h:140
#define CONSTRUCTOR_INITIALIZER_TB_LAST(type, name)
Definition: message_macros.h:137
#define CONSTRUCTOR_INITIALIZER_ELEM(type, name)
Definition: message_macros.h:133

◆ IMPL_TB_SERIALIZABLE_STRUCT

#define IMPL_TB_SERIALIZABLE_STRUCT (   ClassName,
  ... 
)
Value:
covise::TokenBuffer &operator<<(covise::TokenBuffer &tb, const ClassName &msg) \
{ \
return tb; \
} \
covise::TokenBuffer &operator>>(covise::TokenBuffer &tb, ClassName &msg) \
{ \
return tb; \
} \
std::ostream &operator<<(std::ostream &os, const ClassName &msg) \
{ \
os << #ClassName << ":" << std::endl; \
EXPAND(MY_OVERLOADED(PRINT_CLASS, PRINT_CLASS, __VA_ARGS__)); \
os << std::endl; \
return os; \
}
#define TAKE_FROM_TOKENBUFFER(type, name)
Definition: message_macros.h:146

◆ MY_OVERLOADED

#define MY_OVERLOADED (   ...)    EXPAND(VA_SELECT(MY_OVERLOADED, __VA_ARGS__))

◆ MY_OVERLOADED_01

#define MY_OVERLOADED_01 (   ClassName,
  MacroName,
  MacroNameLast,
  _1 
)    STOP_RECURSION()

◆ MY_OVERLOADED_02

#define MY_OVERLOADED_02 (   MacroName,
  MacroNameLast,
  T00,
  N00 
)    MacroNameLast(T00, N00)

◆ MY_OVERLOADED_03

#define MY_OVERLOADED_03 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3 
)    STOP_RECURSION()

◆ MY_OVERLOADED_04

#define MY_OVERLOADED_04 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01 
)    MacroName(T00, N00) MY_OVERLOADED_02(MacroName, MacroNameLast, T01, N01)

◆ MY_OVERLOADED_05

#define MY_OVERLOADED_05 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5 
)    STOP_RECURSION()

◆ MY_OVERLOADED_06

#define MY_OVERLOADED_06 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02 
)    MacroName(T00, N00) MY_OVERLOADED_04(MacroName, MacroNameLast, T01, N01, T02, N02)

◆ MY_OVERLOADED_07

#define MY_OVERLOADED_07 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7 
)    STOP_RECURSION()

◆ MY_OVERLOADED_08

#define MY_OVERLOADED_08 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03 
)    MacroName(T00, N00) MY_OVERLOADED_06(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03)

◆ MY_OVERLOADED_09

#define MY_OVERLOADED_09 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9 
)    STOP_RECURSION()

◆ MY_OVERLOADED_10

#define MY_OVERLOADED_10 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04 
)    MacroName(T00, N00) MY_OVERLOADED_08(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04)

◆ MY_OVERLOADED_11

#define MY_OVERLOADED_11 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11 
)    STOP_RECURSION()

◆ MY_OVERLOADED_12

#define MY_OVERLOADED_12 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05 
)    MacroName(T00, N00) MY_OVERLOADED_10(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05)

◆ MY_OVERLOADED_13

#define MY_OVERLOADED_13 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13 
)    STOP_RECURSION()

◆ MY_OVERLOADED_14

#define MY_OVERLOADED_14 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06 
)    MacroName(T00, N00) MY_OVERLOADED_12(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06)

◆ MY_OVERLOADED_15

#define MY_OVERLOADED_15 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15 
)    STOP_RECURSION()

◆ MY_OVERLOADED_16

#define MY_OVERLOADED_16 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06,
  T07,
  N07 
)    MacroName(T00, N00) MY_OVERLOADED_14(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07)

◆ MY_OVERLOADED_17

#define MY_OVERLOADED_17 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17 
)    STOP_RECURSION()

◆ MY_OVERLOADED_18

#define MY_OVERLOADED_18 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06,
  T07,
  N07,
  T08,
  N08 
)    MacroName(T00, N00) MY_OVERLOADED_16(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08)

◆ MY_OVERLOADED_19

#define MY_OVERLOADED_19 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19 
)    STOP_RECURSION()

◆ MY_OVERLOADED_20

#define MY_OVERLOADED_20 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06,
  T07,
  N07,
  T08,
  N08,
  T09,
  N09 
)    MacroName(T00, N00) MY_OVERLOADED_18(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09)

◆ MY_OVERLOADED_21

#define MY_OVERLOADED_21 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19,
  _20,
  _21 
)    STOP_RECURSION()

◆ MY_OVERLOADED_22

#define MY_OVERLOADED_22 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06,
  T07,
  N07,
  T08,
  N08,
  T09,
  N09,
  T10,
  N10 
)    MacroName(T00, N00) MY_OVERLOADED_20(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10)

◆ MY_OVERLOADED_23

#define MY_OVERLOADED_23 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19,
  _20,
  _21,
  _22,
  _23 
)    STOP_RECURSION()

◆ MY_OVERLOADED_24

#define MY_OVERLOADED_24 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06,
  T07,
  N07,
  T08,
  N08,
  T09,
  N09,
  T10,
  N10,
  T11,
  N11 
)    MacroName(T00, N00) MY_OVERLOADED_22(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10, T11, N11)

◆ MY_OVERLOADED_25

#define MY_OVERLOADED_25 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19,
  _20,
  _21,
  _22,
  _23,
  _24,
  _25 
)    STOP_RECURSION()

◆ MY_OVERLOADED_26

#define MY_OVERLOADED_26 (   MacroName,
  MacroNameLast,
  T00,
  N00,
  T01,
  N01,
  T02,
  N02,
  T03,
  N03,
  N04,
  T04,
  T05,
  N05,
  T06,
  N06,
  T07,
  N07,
  T08,
  N08,
  T09,
  N09,
  T10,
  N10,
  T11,
  N11,
  T12,
  N12 
)    MacroName(T00, N00) MY_OVERLOADED_24(MacroName, MacroNameLast, T01, N01, T02, N02, T03, N03, N04, T04, T05, N05, T06, N06, T07, N07, T08, N08, T09, N09, T10, N10, T11, N11, T12, N12)

◆ MY_OVERLOADED_27

#define MY_OVERLOADED_27 (   ClassName,
  MacroName,
  MacroNameLast,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19,
  _20,
  _21,
  _22,
  _23,
  _24,
  _25,
  _26,
  _27 
)    STOP_RECURSION()

◆ PRINT_CLASS

#define PRINT_CLASS (   type,
  name 
)
Value:
os << #name << ": "; \
covise::tryPrintWithError(os, msg.name(), #type, " is not printable"); \
os << ", ";
GLuint const GLchar * name
Definition: khronos-glext.h:6722
std::enable_if< HasPrintMethod< T >::value >::type tryPrintWithError(std::ostream &os, const T &t, const char *className, const char *errorMsg)
Definition: tryPrint.h:22

◆ SELECT

#define SELECT (   NAME,
  NUM 
)    CAT(NAME##_, NUM)

◆ STOP_RECURSION

#define STOP_RECURSION ( )

◆ TAKE_FROM_TOKENBUFFER

#define TAKE_FROM_TOKENBUFFER (   type,
  name 
)     >> msg.CAT(m_, name)

◆ VA_SELECT

#define VA_SELECT (   NAME,
  ... 
)
Value:
EXPAND(SELECT(NAME, EXPAND(VA_SIZE(__VA_ARGS__)))) \
(__VA_ARGS__)
#define VA_SIZE(...)
Definition: message_macros.h:81
#define SELECT(NAME, NUM)
Definition: message_macros.h:78

◆ VA_SIZE

#define VA_SIZE (   ...)    EXPAND(GET_COUNT(__VA_ARGS__, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 09, 08, 07, 06, 05, 04, 03, 02, 01))