source: XIOS/trunk/src/declare_attribute.hpp @ 400

Last change on this file since 400 was 369, checked in by ymipsl, 12 years ago

Major Update

  • redesign Type and attribute manipulation
  • add enumerate type and attribute
  • use blitz class array instead of boost class array

YM

File size: 7.6 KB
Line 
1#ifndef __XMLIO_DECLARE_ATTRIBUTE__
2#define __XMLIO_DECLARE_ATTRIBUTE__
3
4/// ///////////////////////////// Macros ///////////////////////////// ///
5
6#define DECLARE_ATTRIBUTE(type, name)                             \
7   class name##_attr : public CAttributeTemplate<type>            \
8   {                                                              \
9      public :                                                    \
10         name##_attr(void)                                          \
11            : CAttributeTemplate<type>                            \
12            (#name, *CAttributeMap::Current)                      \
13         { /* Ne rien faire de plus */ }                          \
14         type operator=(const type & value)                       \
15         { return (CAttributeTemplate<type>::operator=(value)); } \
16         virtual ~name##_attr(void)                                 \
17         { /* Ne rien faire de plus */ }                          \
18   } name;
19
20#define DECLARE_ARRAY(T_num, T_rank, name)                        \
21   class name##_attr : public CAttributeArray<T_num, T_rank>      \
22   {                                                              \
23      public :                                                    \
24         name##_attr(void) : CAttributeArray<T_num, T_rank> (#name, *CAttributeMap::Current) {} \
25         virtual ~name##_attr(void) {}                            \
26   } name;
27   
28#define DECLARE_CLASS_ENUM(name)                                   \
29   class name##_attr : public CAttributeEnum<Enum_##name>          \
30   {                                                              \
31      public :                                                    \
32         name##_attr(void) : CAttributeEnum<Enum_##name>(#name, *CAttributeMap::Current) { } \
33         virtual ~name##_attr(void) {}                           \
34   } name;
35   
36#define DECLARE_ENUM2(name,arg1,arg2)                             \
37   class Enum_##name                                              \
38   {                                                              \
39     public:                                                      \
40     enum t_enum { arg1=0, arg2} ;                                \
41     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2 } ; return enumStr ; }   \
42     int getSize(void) const { return 2 ; }                       \
43   } ;                                                            \
44   DECLARE_CLASS_ENUM(name)
45   
46#define DECLARE_ENUM3(name,arg1,arg2,arg3)                             \
47   class Enum_##name                                              \
48   {                                                              \
49     public:                                                      \
50     enum t_enum { arg1=0, arg2, arg3} ;                                \
51     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3 } ; return enumStr ; }   \
52     int getSize(void) const { return 3 ; }                       \
53   } ;                                                            \
54   DECLARE_CLASS_ENUM(name)
55
56#define DECLARE_ENUM4(name,arg1,arg2,arg3,arg4)                             \
57   class Enum_##name                                              \
58   {                                                              \
59     public:                                                      \
60     enum t_enum { arg1=0, arg2, arg3,arg4} ;                                \
61     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3,#arg4 } ; return enumStr ; }   \
62     int getSize(void) const { return 4 ; }                       \
63   } ;                                                            \
64   DECLARE_CLASS_ENUM(name)
65
66#define DECLARE_ENUM5(name,arg1,arg2,arg3,arg4,arg5)                             \
67   class Enum_##name                                              \
68   {                                                              \
69     public:                                                      \
70     enum t_enum { arg1=0, arg2, arg3,arg4,arg5} ;                                \
71     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3,#arg4,#arg5 } ; return enumStr ; }   \
72     int getSize(void) const { return 5 ; }                       \
73   } ;                                                            \
74   DECLARE_CLASS_ENUM(name)
75
76#define DECLARE_ENUM6(name,arg1,arg2,arg3,arg4,arg5,arg6)                             \
77   class Enum_##name                                              \
78   {                                                              \
79     public:                                                      \
80     enum t_enum { arg1=0, arg2, arg3,arg4,arg5,arg6} ;                                \
81     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3,#arg4,#arg5,#arg6 } ; return enumStr ; }   \
82     int getSize(void) const { return 6 ; }                       \
83   } ;                                                            \
84   DECLARE_CLASS_ENUM(name)
85
86#define DECLARE_ENUM7(name,arg1,arg2,arg3,arg4,arg5,arg6,arg7)                             \
87   class Enum_##name                                              \
88   {                                                              \
89     public:                                                      \
90     enum t_enum { arg1=0, arg2, arg3,arg4,arg5,arg6,arg7} ;                                \
91     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3,#arg4,#arg5,#arg6,#arg7 } ; return enumStr ; }   \
92     int getSize(void) const { return 7 ; }                       \
93   } ;                                                            \
94   DECLARE_CLASS_ENUM(name)
95
96#define DECLARE_ENUM8(name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)                             \
97   class Enum_##name                                              \
98   {                                                              \
99     public:                                                      \
100     enum t_enum { arg1=0, arg2, arg3,arg4,arg5,arg6,arg7,arg8} ;                                \
101     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3,#arg4,#arg5,#arg6,#arg7,#arg8 } ; return enumStr ; }   \
102     int getSize(void) const { return 8 ; }                       \
103   } ;                                                            \
104   DECLARE_CLASS_ENUM(name)
105
106  #define DECLARE_ENUM9(name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)                             \
107   class Enum_##name                                              \
108   {                                                              \
109     public:                                                      \
110     enum t_enum { arg1=0, arg2, arg3,arg4,arg5,arg6,arg7,arg8,arg9} ;                                \
111     const char** getStr(void) const { static const char * enumStr[] = { #arg1, #arg2, #arg3,#arg4,#arg5,#arg6,#arg7,#arg8,#arg9 } ; return enumStr ; }   \
112     int getSize(void) const { return 8 ; }                       \
113   } ;                                                            \
114   DECLARE_CLASS_ENUM(name) 
115
116
117#define BEGIN_DECLARE_ATTRIBUTE_MAP(type)                  \
118   class type##Attributes : public virtual CAttributeMap   \
119   {                                                       \
120      public :
121
122#define END_DECLARE_ATTRIBUTE_MAP(type)            \
123         type##Attributes (void) : CAttributeMap() \
124         { /* Ne rien faire de plus */ }           \
125         virtual ~type##Attributes (void)          \
126         { /* Ne rien faire de plus */ }           \
127   };
128
129#endif // __XMLIO_DECLARE_ATTRIBUTE__
Note: See TracBrowser for help on using the repository browser.