Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2011 Hartmut Kaiser Chris@16: http://spirit.sourceforge.net/ Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: #if !defined(BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM) Chris@16: #define BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM Chris@16: Chris@16: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace spirit { namespace traits Chris@16: { Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // We provide overloads for the assign_to_attribute_from_iterators Chris@16: // customization point for all built in types Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const&, char& attr) Chris@16: { Chris@16: attr = *first; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const&, signed char& attr) Chris@16: { Chris@16: attr = *first; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const&, unsigned char& attr) Chris@16: { Chris@16: attr = *first; Chris@16: } Chris@16: }; Chris@16: Chris@16: // wchar_t is intrinsic Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const&, wchar_t& attr) Chris@16: { Chris@16: attr = *first; Chris@16: } Chris@16: }; Chris@16: Chris@16: #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) Chris@16: // wchar_t is intrinsic, have separate overload for unsigned short Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const&, unsigned short& attr) Chris@16: { Chris@16: attr = *first; Chris@16: } Chris@16: }; Chris@16: #endif Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, bool& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, bool_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, short& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, short_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, int& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, int_type(), attr); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, unsigned int& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, uint_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, long& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, long_type(), attr); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, unsigned long& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, ulong_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: #ifdef BOOST_HAS_LONG_LONG Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, long_long_type& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, long_long_type(), attr); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, ulong_long_type& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, ulong_long_type(), attr); Chris@16: } Chris@16: }; Chris@16: #endif Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, float& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, float_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, double& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, double_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct assign_to_attribute_from_iterators Chris@16: { Chris@16: static void Chris@16: call(Iterator const& first, Iterator const& last, long double& attr) Chris@16: { Chris@16: Iterator first_ = first; Chris@16: qi::parse(first_, last, long_double_type(), attr); Chris@16: } Chris@16: }; Chris@16: Chris@16: }}} Chris@16: Chris@16: #endif