Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:13:01

0001 #ifndef FWCore_Reflection_interface_reflex_h
0002 #define FWCore_Reflection_interface_reflex_h
0003 
0004 /* These macros can be used to annotate the data members of DataFormats classes
0005  * and achieve the same effect of ROOT-style comments or reflex dictionaries:
0006  * 
0007  * private:
0008  *   int size_;
0009  *   float* data_;       //[size_]
0010  *   float* transient_;  //!
0011  * 
0012  * can be expressed as
0013  * 
0014  * private:
0015  *   int size_;
0016  *   float* data_ EDM_REFLEX_SIZE(size_);
0017  *   float* transient_ EDM_REFLEX_TRANSIENT;
0018  * 
0019  * The main advantage is that - unlike comments - these macros can be used inside
0020  * other macros.
0021  *
0022  * To avoid warning about unrecognised attributes, these macros expand to nothing
0023  * unless __CLING__ is defined.
0024  */
0025 
0026 #include "FWCore/Utilities/interface/stringize.h"
0027 
0028 #ifdef __CLING__
0029 
0030 // Macros used to annotate class members for the generation of ROOT dictionaries
0031 #define EDM_REFLEX_TRANSIENT [[clang::annotate("!")]]
0032 #define EDM_REFLEX_SIZE(SIZE) [[clang::annotate("[" EDM_STRINGIZE(SIZE) "]")]]
0033 
0034 #else
0035 
0036 #define EDM_REFLEX_TRANSIENT
0037 #define EDM_REFLEX_SIZE(SIZE)
0038 
0039 #endif  // __CLING__
0040 
0041 #endif  // FWCore_Reflection_interface_reflex_h