188 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			188 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*=============================================================================
							 | 
						||
| 
								 | 
							
								    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>
							 |