You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
187 lines
6.0 KiB
187 lines
6.0 KiB
/*============================================================================= |
|
Copyright (c) 2001-2003 Joel de Guzman |
|
Copyright (c) 2001-2003 Daniel Nuffer |
|
http://spirit.sourceforge.net/ |
|
|
|
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) |
|
=============================================================================*/ |
|
#ifndef BOOST_SPIRIT_CHSET_HPP |
|
#define BOOST_SPIRIT_CHSET_HPP |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
#include <boost/shared_ptr.hpp> |
|
#include <boost/spirit/home/classic/namespace.hpp> |
|
#include <boost/spirit/home/classic/core/primitives/primitives.hpp> |
|
#include <boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp> |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
namespace boost { namespace spirit { |
|
|
|
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN |
|
|
|
namespace utility { namespace impl { |
|
|
|
// This is here because some compilers choke on out-of-line member |
|
// template functions. And we don't want to put the whole algorithm |
|
// in the chset constructor in the class definition. |
|
template <typename CharT, typename CharT2> |
|
void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr, |
|
CharT2 const* definition); |
|
|
|
}} // namespace utility::impl |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
// |
|
// chset class |
|
// |
|
/////////////////////////////////////////////////////////////////////////////// |
|
template <typename CharT = char> |
|
class chset: public char_parser<chset<CharT> > { |
|
|
|
public: |
|
chset(); |
|
chset(chset const& arg_); |
|
explicit chset(CharT arg_); |
|
explicit chset(anychar_parser arg_); |
|
explicit chset(nothing_parser arg_); |
|
explicit chset(chlit<CharT> const& arg_); |
|
explicit chset(range<CharT> const& arg_); |
|
explicit chset(negated_char_parser<chlit<CharT> > const& arg_); |
|
explicit chset(negated_char_parser<range<CharT> > const& arg_); |
|
|
|
template <typename CharT2> |
|
explicit chset(CharT2 const* definition) |
|
: ptr(new basic_chset<CharT>()) |
|
{ |
|
utility::impl::construct_chset(ptr, definition); |
|
} |
|
~chset(); |
|
|
|
chset& operator=(chset const& rhs); |
|
chset& operator=(CharT rhs); |
|
chset& operator=(anychar_parser rhs); |
|
chset& operator=(nothing_parser rhs); |
|
chset& operator=(chlit<CharT> const& rhs); |
|
chset& operator=(range<CharT> const& rhs); |
|
chset& operator=(negated_char_parser<chlit<CharT> > const& rhs); |
|
chset& operator=(negated_char_parser<range<CharT> > const& rhs); |
|
|
|
void set(range<CharT> const& arg_); |
|
void set(negated_char_parser<chlit<CharT> > const& arg_); |
|
void set(negated_char_parser<range<CharT> > const& arg_); |
|
|
|
void clear(range<CharT> const& arg_); |
|
void clear(negated_char_parser<range<CharT> > const& arg_); |
|
bool test(CharT ch) const; |
|
chset& inverse(); |
|
void swap(chset& x); |
|
|
|
chset& operator|=(chset const& x); |
|
chset& operator&=(chset const& x); |
|
chset& operator-=(chset const& x); |
|
chset& operator^=(chset const& x); |
|
|
|
private: |
|
|
|
boost::shared_ptr<basic_chset<CharT> > ptr; |
|
}; |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
// |
|
// Generator functions |
|
// |
|
/////////////////////////////////////////////////////////////////////////////// |
|
template <typename CharT> |
|
inline chset<CharT> |
|
chset_p(chlit<CharT> const& arg_) |
|
{ return chset<CharT>(arg_); } |
|
|
|
////////////////////////////////// |
|
template <typename CharT> |
|
inline chset<CharT> |
|
chset_p(range<CharT> const& arg_) |
|
{ return chset<CharT>(arg_); } |
|
|
|
template <typename CharT> |
|
inline chset<CharT> |
|
chset_p(negated_char_parser<chlit<CharT> > const& arg_) |
|
{ return chset<CharT>(arg_); } |
|
|
|
template <typename CharT> |
|
inline chset<CharT> |
|
chset_p(negated_char_parser<range<CharT> > const& arg_) |
|
{ return chset<CharT>(arg_); } |
|
|
|
////////////////////////////////// |
|
inline chset<char> |
|
chset_p(char const* init) |
|
{ return chset<char>(init); } |
|
|
|
////////////////////////////////// |
|
inline chset<wchar_t> |
|
chset_p(wchar_t const* init) |
|
{ return chset<wchar_t>(init); } |
|
|
|
////////////////////////////////// |
|
inline chset<char> |
|
chset_p(char ch) |
|
{ return chset<char>(ch); } |
|
|
|
////////////////////////////////// |
|
inline chset<wchar_t> |
|
chset_p(wchar_t ch) |
|
{ return chset<wchar_t>(ch); } |
|
|
|
////////////////////////////////// |
|
inline chset<int> |
|
chset_p(int ch) |
|
{ return chset<int>(ch); } |
|
|
|
////////////////////////////////// |
|
inline chset<unsigned int> |
|
chset_p(unsigned int ch) |
|
{ return chset<unsigned int>(ch); } |
|
|
|
////////////////////////////////// |
|
inline chset<short> |
|
chset_p(short ch) |
|
{ return chset<short>(ch); } |
|
|
|
#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) |
|
////////////////////////////////// |
|
inline chset<unsigned short> |
|
chset_p(unsigned short ch) |
|
{ return chset<unsigned short>(ch); } |
|
#endif |
|
////////////////////////////////// |
|
inline chset<long> |
|
chset_p(long ch) |
|
{ return chset<long>(ch); } |
|
|
|
////////////////////////////////// |
|
inline chset<unsigned long> |
|
chset_p(unsigned long ch) |
|
{ return chset<unsigned long>(ch); } |
|
|
|
#ifdef BOOST_HAS_LONG_LONG |
|
////////////////////////////////// |
|
inline chset< ::boost::long_long_type> |
|
chset_p( ::boost::long_long_type ch) |
|
{ return chset< ::boost::long_long_type>(ch); } |
|
|
|
////////////////////////////////// |
|
inline chset< ::boost::ulong_long_type> |
|
chset_p( ::boost::ulong_long_type ch) |
|
{ return chset< ::boost::ulong_long_type>(ch); } |
|
#endif |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
BOOST_SPIRIT_CLASSIC_NAMESPACE_END |
|
|
|
}} // namespace BOOST_SPIRIT_CLASSIC_NS |
|
|
|
#endif |
|
|
|
#include <boost/spirit/home/classic/utility/impl/chset.ipp> |
|
#include <boost/spirit/home/classic/utility/chset_operators.hpp>
|
|
|