00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00045 #ifndef MS_TRAIT_IMP_HPP
00046 #define MS_TRAIT_IMP_HPP
00047 
00048 namespace detail
00049 {
00050 
00051   template<class Cntnr, class Mapping_Semantics_Category>
00052   struct mapping_semantics_traits;
00053 
00054 #define PB_ASSOC_CLASS_T_DEC \
00055     template<class Cntnr>
00056 
00057 #define PB_ASSOC_CLASS_C_DEC \
00058     mapping_semantics_traits< \
00059         Cntnr, \
00060         basic_ms_tag>
00061 
00062   template<class Cntnr>
00063   struct mapping_semantics_traits<
00064     Cntnr,
00065     basic_ms_tag>
00066   {
00067 
00068   public:
00069     enum
00070       {
00071     has_data = false,
00072     has_compound_data = false,
00073     mapping_level = 1
00074       };
00075   };
00076 
00077 #undef PB_ASSOC_CLASS_T_DEC
00078 
00079 #undef PB_ASSOC_CLASS_C_DEC
00080 
00081 #define PB_ASSOC_CLASS_T_DEC \
00082     template<class Cntnr>
00083 
00084 #define PB_ASSOC_CLASS_C_DEC \
00085     mapping_semantics_traits< \
00086         Cntnr, \
00087         data_enabled_ms_tag>
00088 
00089   template<class Cntnr>
00090   struct mapping_semantics_traits<
00091     Cntnr,
00092     data_enabled_ms_tag>
00093   {
00094   public:
00095     enum
00096       {
00097     has_data = true,
00098     has_compound_data = false,
00099     mapping_level = 1
00100       };
00101   };
00102 
00103 #undef PB_ASSOC_CLASS_T_DEC
00104 
00105 #undef PB_ASSOC_CLASS_C_DEC
00106 
00107 #define PB_ASSOC_CLASS_T_DEC \
00108     template<class Cntnr>
00109 
00110 #define PB_ASSOC_CLASS_C_DEC \
00111     mapping_semantics_traits< \
00112         Cntnr, \
00113         compound_data_enabled_ms_tag>
00114 
00115   template<class Cntnr>
00116   struct mapping_semantics_traits<
00117     Cntnr,
00118     compound_data_enabled_ms_tag>
00119   {
00120   public:
00121     enum
00122       {
00123     has_data = true,
00124     has_compound_data = true,
00125     mapping_level = mapping_level_imp<
00126     typename Cntnr::given_data_type>::value
00127       };
00128   };
00129 
00130 #undef PB_ASSOC_CLASS_T_DEC
00131 
00132 #undef PB_ASSOC_CLASS_C_DEC
00133 
00134 } 
00135 
00136 #endif // #ifndef MS_TRAIT_IMP_HPP