Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/impl/regex.ipp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/impl/regex.ipp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,81 @@ +/*============================================================================= + Copyright (c) 2002-2003 Hartmut Kaiser + 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) +=============================================================================*/ +#ifndef BOOST_SPIRIT_REGEX_IPP +#define BOOST_SPIRIT_REGEX_IPP + +/////////////////////////////////////////////////////////////////////////////// +#include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp> + +/////////////////////////////////////////////////////////////////////////////// +namespace boost { namespace spirit { + +BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN + +namespace impl { + +/////////////////////////////////////////////////////////////////////////////// +// +inline const char* rx_prefix(char) { return "\\A"; } +inline const wchar_t* rx_prefix(wchar_t) { return L"\\A"; } + +/////////////////////////////////////////////////////////////////////////////// +// +// rx_parser class +// +/////////////////////////////////////////////////////////////////////////////// +template <typename CharT = char> +class rx_parser : public parser<rx_parser<CharT> > { + +public: + typedef std::basic_string<CharT> string_t; + typedef rx_parser<CharT> self_t; + + rx_parser(CharT const *first, CharT const *last) + { + rxstr = string_t(rx_prefix(CharT())) + string_t(first, last); + } + + rx_parser(CharT const *first) + { + rxstr = string_t(rx_prefix(CharT())) + + string_t(first, impl::get_last(first)); + } + + template <typename ScannerT> + typename parser_result<self_t, ScannerT>::type + parse(ScannerT const& scan) const + { + boost::match_results<typename ScannerT::iterator_t> what; + boost::regex_search(scan.first, scan.last, what, rxstr, + boost::match_default); + + if (!what[0].matched) + return scan.no_match(); + + scan.first = what[0].second; + return scan.create_match(what[0].length(), nil_t(), + what[0].first, scan.first); + } + +private: +#if BOOST_VERSION >= 013300 + boost::basic_regex<CharT> rxstr; // regular expression to match +#else + boost::reg_expression<CharT> rxstr; // regular expression to match +#endif +}; + +} // namespace impl + +/////////////////////////////////////////////////////////////////////////////// +BOOST_SPIRIT_CLASSIC_NAMESPACE_END + +}} // namespace boost::spirit + +#endif // BOOST_SPIRIT_REGEX_IPP