188 lines
6.0 KiB
C++
188 lines
6.0 KiB
C++
/*=============================================================================
|
|
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>
|