145 lines
3.0 KiB
C++
145 lines
3.0 KiB
C++
//
|
|
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
//
|
|
// Distributed under 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)
|
|
//
|
|
// Official repository: https://github.com/boostorg/url
|
|
//
|
|
|
|
#ifndef BOOST_URL_GRAMMAR_PARSE_HPP
|
|
#define BOOST_URL_GRAMMAR_PARSE_HPP
|
|
|
|
#include <boost/url/detail/config.hpp>
|
|
#include <boost/url/error_types.hpp>
|
|
#include <boost/url/string_view.hpp>
|
|
#include <boost/url/grammar/type_traits.hpp>
|
|
|
|
namespace boost {
|
|
namespace urls {
|
|
namespace grammar {
|
|
|
|
//------------------------------------------------
|
|
|
|
/** Parse a character buffer using a rule
|
|
|
|
@param it A pointer to the start. The
|
|
caller's variable is changed to
|
|
reflect the amount of input consumed.
|
|
|
|
@param end A pointer to the end.
|
|
|
|
@param r The rule to use
|
|
|
|
@return The parsed value upon success,
|
|
otherwise an error.
|
|
|
|
@see
|
|
@ref result.
|
|
*/
|
|
template<class Rule>
|
|
result<typename Rule::value_type>
|
|
parse(
|
|
char const*& it,
|
|
char const* end,
|
|
Rule const& r);
|
|
|
|
/** Parse a character buffer using a rule
|
|
|
|
This function parses a complete string into
|
|
the specified sequence of rules. If the
|
|
string is not completely consumed, an
|
|
error is returned instead.
|
|
|
|
@param s The input string
|
|
|
|
@param r The rule to use
|
|
|
|
@return The parsed value upon success,
|
|
otherwise an error.
|
|
|
|
@see
|
|
@ref result.
|
|
*/
|
|
template<class Rule>
|
|
result<typename Rule::value_type>
|
|
parse(
|
|
string_view s,
|
|
Rule const& r);
|
|
|
|
//------------------------------------------------
|
|
|
|
#ifndef BOOST_URL_DOCS
|
|
namespace detail {
|
|
|
|
template<class Rule>
|
|
struct rule_ref
|
|
{
|
|
Rule const& r_;
|
|
|
|
using value_type =
|
|
typename Rule::value_type;
|
|
|
|
result<value_type>
|
|
parse(
|
|
char const*& it,
|
|
char const* end) const
|
|
{
|
|
return r_.parse(it, end);
|
|
}
|
|
};
|
|
|
|
} // detail
|
|
#endif
|
|
|
|
/** Return a reference to a rule
|
|
|
|
This function returns a rule which
|
|
references the specified object. This is
|
|
used to reduce the number of bytes of
|
|
storage (`sizeof`) required by a combinator
|
|
when it stores a copy of the object.
|
|
<br>
|
|
Ownership of the object is not transferred;
|
|
the caller is responsible for ensuring the
|
|
lifetime of the object is extended until it
|
|
is no longer referenced. For best results,
|
|
`ref` should only be used with compile-time
|
|
constants.
|
|
|
|
@param r The rule to use
|
|
*/
|
|
template<class Rule>
|
|
constexpr
|
|
#ifdef BOOST_URL_DOCS
|
|
__implementation_defined__
|
|
#else
|
|
typename std::enable_if<
|
|
is_rule<Rule>::value &&
|
|
! std::is_same<Rule,
|
|
detail::rule_ref<Rule> >::value,
|
|
detail::rule_ref<Rule> >::type
|
|
#endif
|
|
ref(Rule const& r) noexcept
|
|
{
|
|
return detail::rule_ref<
|
|
Rule>{r};
|
|
}
|
|
|
|
#ifndef BOOST_URL_DOCS
|
|
// If you get a compile error here it
|
|
// means you called ref with something
|
|
// that is not a CharSet or Rule!
|
|
constexpr
|
|
void
|
|
ref(...) = delete;
|
|
#endif
|
|
|
|
} // grammar
|
|
} // urls
|
|
} // boost
|
|
|
|
#include <boost/url/grammar/impl/parse.hpp>
|
|
|
|
#endif
|