Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2003 Joel de Guzman Chris@16: Copyright (c) 2001-2003 Daniel Nuffer Chris@16: http://spirit.sourceforge.net/ Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: #ifndef BOOST_SPIRIT_CHSET_HPP Chris@16: #define BOOST_SPIRIT_CHSET_HPP Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: namespace boost { namespace spirit { Chris@16: Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN Chris@16: Chris@16: namespace utility { namespace impl { Chris@16: Chris@16: // This is here because some compilers choke on out-of-line member Chris@16: // template functions. And we don't want to put the whole algorithm Chris@16: // in the chset constructor in the class definition. Chris@16: template Chris@16: void construct_chset(boost::shared_ptr >& ptr, Chris@16: CharT2 const* definition); Chris@16: Chris@16: }} // namespace utility::impl Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // chset class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: class chset: public char_parser > { Chris@16: Chris@16: public: Chris@16: chset(); Chris@16: chset(chset const& arg_); Chris@16: explicit chset(CharT arg_); Chris@16: explicit chset(anychar_parser arg_); Chris@16: explicit chset(nothing_parser arg_); Chris@16: explicit chset(chlit const& arg_); Chris@16: explicit chset(range const& arg_); Chris@16: explicit chset(negated_char_parser > const& arg_); Chris@16: explicit chset(negated_char_parser > const& arg_); Chris@16: Chris@16: template Chris@16: explicit chset(CharT2 const* definition) Chris@16: : ptr(new basic_chset()) Chris@16: { Chris@16: utility::impl::construct_chset(ptr, definition); Chris@16: } Chris@16: ~chset(); Chris@16: Chris@16: chset& operator=(chset const& rhs); Chris@16: chset& operator=(CharT rhs); Chris@16: chset& operator=(anychar_parser rhs); Chris@16: chset& operator=(nothing_parser rhs); Chris@16: chset& operator=(chlit const& rhs); Chris@16: chset& operator=(range const& rhs); Chris@16: chset& operator=(negated_char_parser > const& rhs); Chris@16: chset& operator=(negated_char_parser > const& rhs); Chris@16: Chris@16: void set(range const& arg_); Chris@16: void set(negated_char_parser > const& arg_); Chris@16: void set(negated_char_parser > const& arg_); Chris@16: Chris@16: void clear(range const& arg_); Chris@16: void clear(negated_char_parser > const& arg_); Chris@16: bool test(CharT ch) const; Chris@16: chset& inverse(); Chris@16: void swap(chset& x); Chris@16: Chris@16: chset& operator|=(chset const& x); Chris@16: chset& operator&=(chset const& x); Chris@16: chset& operator-=(chset const& x); Chris@16: chset& operator^=(chset const& x); Chris@16: Chris@16: private: Chris@16: Chris@16: boost::shared_ptr > ptr; Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Generator functions Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: inline chset Chris@16: chset_p(chlit const& arg_) Chris@16: { return chset(arg_); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline chset Chris@16: chset_p(range const& arg_) Chris@16: { return chset(arg_); } Chris@16: Chris@16: template Chris@16: inline chset Chris@16: chset_p(negated_char_parser > const& arg_) Chris@16: { return chset(arg_); } Chris@16: Chris@16: template Chris@16: inline chset Chris@16: chset_p(negated_char_parser > const& arg_) Chris@16: { return chset(arg_); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(char const* init) Chris@16: { return chset(init); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(wchar_t const* init) Chris@16: { return chset(init); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(char ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(wchar_t ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(int ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(unsigned int ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(short ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(unsigned short ch) Chris@16: { return chset(ch); } Chris@16: #endif Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(long ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset Chris@16: chset_p(unsigned long ch) Chris@16: { return chset(ch); } Chris@16: Chris@16: #ifdef BOOST_HAS_LONG_LONG Chris@16: ////////////////////////////////// Chris@16: inline chset< ::boost::long_long_type> Chris@16: chset_p( ::boost::long_long_type ch) Chris@16: { return chset< ::boost::long_long_type>(ch); } Chris@16: Chris@16: ////////////////////////////////// Chris@16: inline chset< ::boost::ulong_long_type> Chris@16: chset_p( ::boost::ulong_long_type ch) Chris@16: { return chset< ::boost::ulong_long_type>(ch); } Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_END Chris@16: Chris@16: }} // namespace BOOST_SPIRIT_CLASSIC_NS Chris@16: Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include