1 // Copyright (c) 2001-2011 Hartmut Kaiser 2 // 3 // Distributed under the Boost Software License, Version 1.0. (See accompanying 4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 #if !defined(BOOST_SPIRIT_QI_UNUSED_SKIPPER_JUL_25_2009_0921AM) 7 #define BOOST_SPIRIT_QI_UNUSED_SKIPPER_JUL_25_2009_0921AM 8 9 #if defined(_MSC_VER) 10 #pragma once 11 #endif 12 13 #include <boost/spirit/home/support/unused.hpp> 14 #include <boost/mpl/bool.hpp> 15 16 namespace boost { namespace spirit { namespace qi { namespace detail 17 { 18 template <typename Skipper> 19 struct unused_skipper : unused_type 20 { unused_skipperboost::spirit::qi::detail::unused_skipper21 unused_skipper(Skipper const& skipper_) 22 : skipper(skipper_) {} 23 Skipper const& skipper; 24 25 // silence MSVC warning C4512: assignment operator could not be generated 26 BOOST_DELETED_FUNCTION(unused_skipper& operator= (unused_skipper const&)) 27 }; 28 29 template <typename Skipper> 30 struct is_unused_skipper 31 : mpl::false_ {}; 32 33 template <typename Skipper> 34 struct is_unused_skipper<unused_skipper<Skipper> > 35 : mpl::true_ {}; 36 37 template <> 38 struct is_unused_skipper<unused_type> 39 : mpl::true_ {}; 40 41 // If a surrounding lexeme[] directive was specified, the current 42 // skipper is of the type unused_skipper. In this case we 43 // re-activate the skipper which was active before the skip[] 44 // directive. 45 template <typename Skipper> 46 inline Skipper const& get_skipper(unused_skipper<Skipper> const & u)47 get_skipper(unused_skipper<Skipper> const& u) 48 { 49 return u.skipper; 50 } 51 52 // If no surrounding lexeme[] directive was specified we keep what we got. 53 template <typename Skipper> 54 inline Skipper const& get_skipper(Skipper const & u)55 get_skipper(Skipper const& u) 56 { 57 return u; 58 } 59 60 }}}} 61 62 #endif 63