diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/spirit/utility/distinct.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/spirit/utility/distinct.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,227 @@ +/*============================================================================= + Copyright (c) 1998-2003 Joel de Guzman + Copyright (c) 2003 Vaclav Vesely + http://spirit.sourceforge.net/ + + Use, modification and distribution is subject to 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) +=============================================================================*/ +#if !defined(BOOST_SPIRIT_DISTINCT_HPP) +#define BOOST_SPIRIT_DISTINCT_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { + namespace spirit { +//----------------------------------------------------------------------------- +// distinct_parser class + +template +class distinct_parser +{ +public: + typedef + contiguous< + sequence< + chseq, + negated_empty_match_parser< + TailT + > + > + > + result_t; + + distinct_parser() + : tail(chset()) + { + } + + explicit distinct_parser(parser const & tail_) + : tail(tail_.derived()) + { + } + + explicit distinct_parser(CharT const* letters) + : tail(chset_p(letters)) + { + } + + result_t operator()(CharT const* str) const + { + return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)]; + } + + TailT tail; +}; + +//----------------------------------------------------------------------------- +// distinct_directive class + +template +class distinct_directive +{ +public: + template + struct result { + typedef + contiguous< + sequence< + ParserT, + negated_empty_match_parser< + TailT + > + > + > + type; + }; + + distinct_directive() + : tail(chset()) + { + } + + explicit distinct_directive(CharT const* letters) + : tail(chset_p(letters)) + { + } + + explicit distinct_directive(parser const & tail_) + : tail(tail_.derived()) + { + } + + template + typename result::type>::type + operator[](ParserT const &subject) const + { + return + lexeme_d[as_parser::convert(subject) >> ~epsilon_p(tail)]; + } + + TailT tail; +}; + +//----------------------------------------------------------------------------- +// dynamic_distinct_parser class + +template +class dynamic_distinct_parser +{ +public: + typedef typename ScannerT::value_t char_t; + + typedef + rule< + typename no_actions_scanner< + typename lexeme_scanner::type + >::type + > + tail_t; + + typedef + contiguous< + sequence< + chseq, + negated_empty_match_parser< + tail_t + > + > + > + result_t; + + dynamic_distinct_parser() + : tail(nothing_p) + { + } + + template + explicit dynamic_distinct_parser(parser const & tail_) + : tail(tail_.derived()) + { + } + + explicit dynamic_distinct_parser(char_t const* letters) + : tail(chset_p(letters)) + { + } + + result_t operator()(char_t const* str) const + { + return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)]; + } + + tail_t tail; +}; + +//----------------------------------------------------------------------------- +// dynamic_distinct_directive class + +template +class dynamic_distinct_directive +{ +public: + typedef typename ScannerT::value_t char_t; + + typedef + rule< + typename no_actions_scanner< + typename lexeme_scanner::type + >::type + > + tail_t; + + template + struct result { + typedef + contiguous< + sequence< + ParserT, + negated_empty_match_parser< + tail_t + > + > + > + type; + }; + + dynamic_distinct_directive() + : tail(nothing_p) + { + } + + template + explicit dynamic_distinct_directive(parser const & tail_) + : tail(tail_.derived()) + { + } + + explicit dynamic_distinct_directive(char_t const* letters) + : tail(chset_p(letters)) + { + } + + template + typename result::type>::type + operator[](ParserT const &subject) const + { + return + lexeme_d[as_parser::convert(subject) >> ~epsilon_p(tail)]; + } + + tail_t tail; +}; + +//----------------------------------------------------------------------------- + } // namespace spirit +} // namespace boost + +#endif // !defined(BOOST_SPIRIT_DISTINCT_HPP)