| /*============================================================================= |
| 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> |