| /*============================================================================= |
| Copyright (c) 1998-2003 Joel de Guzman |
| http://spirit.sourceforge.net/ |
| |
| Use, modification and distribution is subject to the Boost Software |
| License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
| http://www.boost.org/LICENSE_1_0.txt) |
| =============================================================================*/ |
| #if !defined(BOOST_SPIRIT_PARSER_IPP) |
| #define BOOST_SPIRIT_PARSER_IPP |
| |
| namespace boost { namespace spirit { |
| |
| BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // |
| // Generic parse function implementation |
| // |
| /////////////////////////////////////////////////////////////////////////// |
| template <typename IteratorT, typename DerivedT> |
| inline parse_info<IteratorT> |
| parse( |
| IteratorT const& first_ |
| , IteratorT const& last |
| , parser<DerivedT> const& p) |
| { |
| IteratorT first = first_; |
| scanner<IteratorT, scanner_policies<> > scan(first, last); |
| match<nil_t> hit = p.derived().parse(scan); |
| return parse_info<IteratorT>( |
| first, hit, hit && (first == last), hit.length()); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // |
| // Parse function for null terminated strings implementation |
| // |
| /////////////////////////////////////////////////////////////////////////// |
| template <typename CharT, typename DerivedT> |
| inline parse_info<CharT const*> |
| parse(CharT const* str, parser<DerivedT> const& p) |
| { |
| CharT const* last = str; |
| while (*last) |
| last++; |
| return parse(str, last, p); |
| } |
| |
| BOOST_SPIRIT_CLASSIC_NAMESPACE_END |
| |
| }} // namespace boost::spirit |
| |
| #endif |
| |