1// -*- C++ -*- 2 3// Copyright (C) 2005 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// As a special exception, you may use this file as part of a free software 22// library without restriction. Specifically, if other files instantiate 23// templates or use macros or inline functions from this file, or you compile 24// this file and link it with other files to produce an executable, this 25// file does not by itself cause the resulting executable to be covered by 26// the GNU General Public License. This exception does not however 27// invalidate any other reasons why the executable file might be covered by 28// the GNU General Public License. 29 30// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 31 32// Permission to use, copy, modify, sell, and distribute this software 33// is hereby granted without fee, provided that the above copyright 34// notice appears in all copies, and that both that copyright notice and 35// this permission notice appear in supporting documentation. None of 36// the above authors, nor IBM Haifa Research Laboratories, make any 37// representation about the suitability of this software for any 38// purpose. It is provided "as is" without express or implied warranty. 39 40/** 41 * @file ms_category_imp.hpp 42 * Contains mapping-semantics category implementation. 43 */ 44 45#ifndef MS_TRAIT_IMP_HPP 46#define MS_TRAIT_IMP_HPP 47 48namespace detail 49{ 50 51 template<class Cntnr, class Mapping_Semantics_Category> 52 struct mapping_semantics_traits; 53 54#define PB_ASSOC_CLASS_T_DEC \ 55 template<class Cntnr> 56 57#define PB_ASSOC_CLASS_C_DEC \ 58 mapping_semantics_traits< \ 59 Cntnr, \ 60 basic_ms_tag> 61 62 template<class Cntnr> 63 struct mapping_semantics_traits< 64 Cntnr, 65 basic_ms_tag> 66 { 67 68 public: 69 enum 70 { 71 has_data = false, 72 has_compound_data = false, 73 mapping_level = 1 74 }; 75 }; 76 77#undef PB_ASSOC_CLASS_T_DEC 78 79#undef PB_ASSOC_CLASS_C_DEC 80 81#define PB_ASSOC_CLASS_T_DEC \ 82 template<class Cntnr> 83 84#define PB_ASSOC_CLASS_C_DEC \ 85 mapping_semantics_traits< \ 86 Cntnr, \ 87 data_enabled_ms_tag> 88 89 template<class Cntnr> 90 struct mapping_semantics_traits< 91 Cntnr, 92 data_enabled_ms_tag> 93 { 94 public: 95 enum 96 { 97 has_data = true, 98 has_compound_data = false, 99 mapping_level = 1 100 }; 101 }; 102 103#undef PB_ASSOC_CLASS_T_DEC 104 105#undef PB_ASSOC_CLASS_C_DEC 106 107#define PB_ASSOC_CLASS_T_DEC \ 108 template<class Cntnr> 109 110#define PB_ASSOC_CLASS_C_DEC \ 111 mapping_semantics_traits< \ 112 Cntnr, \ 113 compound_data_enabled_ms_tag> 114 115 template<class Cntnr> 116 struct mapping_semantics_traits< 117 Cntnr, 118 compound_data_enabled_ms_tag> 119 { 120 public: 121 enum 122 { 123 has_data = true, 124 has_compound_data = true, 125 mapping_level = mapping_level_imp< 126 typename Cntnr::given_data_type>::value 127 }; 128 }; 129 130#undef PB_ASSOC_CLASS_T_DEC 131 132#undef PB_ASSOC_CLASS_C_DEC 133 134} // namespace detail 135 136#endif // #ifndef MS_TRAIT_IMP_HPP 137