1 /*============================================================================= 2 Copyright (c) 2001-2011 Hartmut Kaiser 3 http://spirit.sourceforge.net/ 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 =============================================================================*/ 8 #if !defined(BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM) 9 #define BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM 10 11 #if defined(_MSC_VER) 12 #pragma once 13 #endif 14 15 #include <boost/config.hpp> 16 #include <boost/spirit/home/qi/parse.hpp> 17 #include <boost/spirit/home/support/common_terminals.hpp> 18 #include <boost/spirit/home/support/attributes_fwd.hpp> 19 20 namespace boost { namespace spirit { namespace traits 21 { 22 /////////////////////////////////////////////////////////////////////////// 23 // We provide overloads for the assign_to_attribute_from_iterators 24 // customization point for all built in types 25 /////////////////////////////////////////////////////////////////////////// 26 template <typename Iterator> 27 struct assign_to_attribute_from_iterators<char, Iterator> 28 { 29 static void callboost::spirit::traits::assign_to_attribute_from_iterators30 call(Iterator const& first, Iterator const&, char& attr) 31 { 32 attr = *first; 33 } 34 }; 35 36 template <typename Iterator> 37 struct assign_to_attribute_from_iterators<signed char, Iterator> 38 { 39 static void callboost::spirit::traits::assign_to_attribute_from_iterators40 call(Iterator const& first, Iterator const&, signed char& attr) 41 { 42 attr = *first; 43 } 44 }; 45 46 template <typename Iterator> 47 struct assign_to_attribute_from_iterators<unsigned char, Iterator> 48 { 49 static void callboost::spirit::traits::assign_to_attribute_from_iterators50 call(Iterator const& first, Iterator const&, unsigned char& attr) 51 { 52 attr = *first; 53 } 54 }; 55 56 // wchar_t is intrinsic 57 template <typename Iterator> 58 struct assign_to_attribute_from_iterators<wchar_t, Iterator> 59 { 60 static void callboost::spirit::traits::assign_to_attribute_from_iterators61 call(Iterator const& first, Iterator const&, wchar_t& attr) 62 { 63 attr = *first; 64 } 65 }; 66 67 #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) 68 // wchar_t is intrinsic, have separate overload for unsigned short 69 template <typename Iterator> 70 struct assign_to_attribute_from_iterators<unsigned short, Iterator> 71 { 72 static void callboost::spirit::traits::assign_to_attribute_from_iterators73 call(Iterator const& first, Iterator const&, unsigned short& attr) 74 { 75 attr = *first; 76 } 77 }; 78 #endif 79 80 template <typename Iterator> 81 struct assign_to_attribute_from_iterators<bool, Iterator> 82 { 83 static void callboost::spirit::traits::assign_to_attribute_from_iterators84 call(Iterator const& first, Iterator const& last, bool& attr) 85 { 86 Iterator first_ = first; 87 qi::parse(first_, last, bool_type(), attr); 88 } 89 }; 90 91 template <typename Iterator> 92 struct assign_to_attribute_from_iterators<short, Iterator> 93 { 94 static void callboost::spirit::traits::assign_to_attribute_from_iterators95 call(Iterator const& first, Iterator const& last, short& attr) 96 { 97 Iterator first_ = first; 98 qi::parse(first_, last, short_type(), attr); 99 } 100 }; 101 102 template <typename Iterator> 103 struct assign_to_attribute_from_iterators<int, Iterator> 104 { 105 static void callboost::spirit::traits::assign_to_attribute_from_iterators106 call(Iterator const& first, Iterator const& last, int& attr) 107 { 108 Iterator first_ = first; 109 qi::parse(first_, last, int_type(), attr); 110 } 111 }; 112 template <typename Iterator> 113 struct assign_to_attribute_from_iterators<unsigned int, Iterator> 114 { 115 static void callboost::spirit::traits::assign_to_attribute_from_iterators116 call(Iterator const& first, Iterator const& last, unsigned int& attr) 117 { 118 Iterator first_ = first; 119 qi::parse(first_, last, uint_type(), attr); 120 } 121 }; 122 123 template <typename Iterator> 124 struct assign_to_attribute_from_iterators<long, Iterator> 125 { 126 static void callboost::spirit::traits::assign_to_attribute_from_iterators127 call(Iterator const& first, Iterator const& last, long& attr) 128 { 129 Iterator first_ = first; 130 qi::parse(first_, last, long_type(), attr); 131 } 132 }; 133 template <typename Iterator> 134 struct assign_to_attribute_from_iterators<unsigned long, Iterator> 135 { 136 static void callboost::spirit::traits::assign_to_attribute_from_iterators137 call(Iterator const& first, Iterator const& last, unsigned long& attr) 138 { 139 Iterator first_ = first; 140 qi::parse(first_, last, ulong_type(), attr); 141 } 142 }; 143 144 #ifdef BOOST_HAS_LONG_LONG 145 template <typename Iterator> 146 struct assign_to_attribute_from_iterators<boost::long_long_type, Iterator> 147 { 148 static void callboost::spirit::traits::assign_to_attribute_from_iterators149 call(Iterator const& first, Iterator const& last, boost::long_long_type& attr) 150 { 151 Iterator first_ = first; 152 qi::parse(first_, last, long_long_type(), attr); 153 } 154 }; 155 template <typename Iterator> 156 struct assign_to_attribute_from_iterators<boost::ulong_long_type, Iterator> 157 { 158 static void callboost::spirit::traits::assign_to_attribute_from_iterators159 call(Iterator const& first, Iterator const& last, boost::ulong_long_type& attr) 160 { 161 Iterator first_ = first; 162 qi::parse(first_, last, ulong_long_type(), attr); 163 } 164 }; 165 #endif 166 167 template <typename Iterator> 168 struct assign_to_attribute_from_iterators<float, Iterator> 169 { 170 static void callboost::spirit::traits::assign_to_attribute_from_iterators171 call(Iterator const& first, Iterator const& last, float& attr) 172 { 173 Iterator first_ = first; 174 qi::parse(first_, last, float_type(), attr); 175 } 176 }; 177 178 template <typename Iterator> 179 struct assign_to_attribute_from_iterators<double, Iterator> 180 { 181 static void callboost::spirit::traits::assign_to_attribute_from_iterators182 call(Iterator const& first, Iterator const& last, double& attr) 183 { 184 Iterator first_ = first; 185 qi::parse(first_, last, double_type(), attr); 186 } 187 }; 188 189 template <typename Iterator> 190 struct assign_to_attribute_from_iterators<long double, Iterator> 191 { 192 static void callboost::spirit::traits::assign_to_attribute_from_iterators193 call(Iterator const& first, Iterator const& last, long double& attr) 194 { 195 Iterator first_ = first; 196 qi::parse(first_, last, long_double_type(), attr); 197 } 198 }; 199 200 }}} 201 202 #endif 203