00001
00002
00003 #ifndef AsgToolMacros_H
00004 #define AsgToolMacros_H
00005
00006
00007
00008
00009
00010
00011 #ifdef ASGTOOL_ATHENA
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 namespace asg {
00032 std::string ptrToString (const void* p);
00033 }
00034
00035 #define ASG_TOOL_INTERFACE(CLASSNAME) \
00036 public: \
00037 static const InterfaceID& interfaceID() { \
00038 static const InterfaceID myid(#CLASSNAME, 1, 0 ); \
00039 return myid; \
00040 }
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #define ASG_TOOL_CLASS0(CLASSNAME) \
00055 public: \
00056 CLASSNAME(const std::string& type, const std::string& myname, const IInterface* parent) \
00057 : CLASSNAME(asg::ptrToString(parent)+"#"+type+"/"+myname) { \
00058 }
00059
00060 #define ASG_TOOL_CLASS(CLASSNAME, INT1) \
00061 public: \
00062 CLASSNAME(const std::string& type, const std::string& myname, const IInterface* parent) \
00063 : CLASSNAME(asg::ptrToString(parent)+"#"+type+"/"+myname) { \
00064 declareInterface<INT1>(this); \
00065 }
00066
00067 #define ASG_TOOL_CLASS1 ASG_TOOL_CLASS
00068
00069 #define ASG_TOOL_CLASS2(CLASSNAME, INT1, INT2) \
00070 public: \
00071 CLASSNAME(const std::string& type, const std::string& myname, const IInterface* parent) \
00072 : CLASSNAME(asg::ptrToString(parent)+"#"+type+"/"+myname) { \
00073 declareInterface<INT1>(this); \
00074 declareInterface<INT2>(this); \
00075 }
00076
00077 #define ASG_TOOL_CLASS3(CLASSNAME, INT1, INT2, INT3) \
00078 public: \
00079 CLASSNAME(const std::string& type, const std::string& myname, const IInterface* parent) \
00080 : CLASSNAME(asg::ptrToString(parent)+"#"+type+"/"+myname) { \
00081 declareInterface<INT1>(this); \
00082 declareInterface<INT2>(this); \
00083 declareInterface<INT3>(this); \
00084 }
00085
00086 #else
00087
00088 #define ASG_TOOL_INTERFACE(CLASSNAME)
00089 #define ASG_TOOL_CLASS(CLASSNAME, INT1)
00090 #define ASG_TOOL_CLASS0(CLASSNAME)
00091 #define ASG_TOOL_CLASS1(CLASSNAME, INT1)
00092 #define ASG_TOOL_CLASS2(CLASSNAME, INT1, INT2)
00093 #define ASG_TOOL_CLASS3(CLASSNAME, INT1, INT2, INT3)
00094
00095 #endif
00096
00097 #endif