diff DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/distinct.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/distinct.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,229 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2003 Vaclav Vesely
+    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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DISTINCT_HPP)
+#define BOOST_SPIRIT_DISTINCT_HPP
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/operators.hpp>
+#include <boost/spirit/home/classic/core/composite/directives.hpp>
+#include <boost/spirit/home/classic/core/composite/epsilon.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>
+#include <boost/spirit/home/classic/utility/chset.hpp>
+
+#include <boost/spirit/home/classic/utility/distinct_fwd.hpp>
+
+namespace boost {
+    namespace spirit {
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+//-----------------------------------------------------------------------------
+// distinct_parser class
+
+template <typename CharT, typename TailT>
+class distinct_parser
+{
+public:
+    typedef
+        contiguous<
+            sequence<
+                chseq<CharT const*>,
+                negated_empty_match_parser<
+                    TailT
+                >
+            >
+        >
+            result_t;
+
+    distinct_parser()
+    :   tail(chset<CharT>())
+    {
+    }
+
+    explicit distinct_parser(parser<TailT> 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 <typename CharT, typename TailT>
+class distinct_directive
+{
+public:
+    template<typename ParserT>
+    struct result {
+        typedef
+            contiguous<
+                sequence<
+                    ParserT,
+                    negated_empty_match_parser<
+                        TailT
+                    >
+                >
+            >
+                type;
+    };
+
+    distinct_directive()
+    :   tail(chset<CharT>())
+    {
+    }
+
+    explicit distinct_directive(CharT const* letters)
+    :   tail(chset_p(letters))
+    {
+    }
+
+    explicit distinct_directive(parser<TailT> const & tail_)
+    :   tail(tail_.derived())
+    {
+    }
+
+    template<typename ParserT>
+    typename result<typename as_parser<ParserT>::type>::type
+        operator[](ParserT const &subject) const
+    {
+        return
+            lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
+    }
+
+    TailT tail;
+};
+
+//-----------------------------------------------------------------------------
+// dynamic_distinct_parser class
+
+template <typename ScannerT>
+class dynamic_distinct_parser
+{
+public:
+    typedef typename ScannerT::value_t char_t;
+
+    typedef
+        rule<
+            typename no_actions_scanner<
+                typename lexeme_scanner<ScannerT>::type
+            >::type
+        >
+            tail_t;
+
+    typedef
+        contiguous<
+            sequence<
+                chseq<char_t const*>,
+                negated_empty_match_parser<
+                    tail_t
+                >
+            >
+        >
+            result_t;
+
+    dynamic_distinct_parser()
+    :   tail(nothing_p)
+    {
+    }
+
+    template<typename ParserT>
+    explicit dynamic_distinct_parser(parser<ParserT> 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 <typename ScannerT>
+class dynamic_distinct_directive
+{
+public:
+    typedef typename ScannerT::value_t char_t;
+
+    typedef
+        rule<
+            typename no_actions_scanner<
+                typename lexeme_scanner<ScannerT>::type
+            >::type
+        >
+            tail_t;
+
+    template<typename ParserT>
+    struct result {
+        typedef
+            contiguous<
+                sequence<
+                    ParserT,
+                    negated_empty_match_parser<
+                        tail_t
+                    >
+                >
+            >
+                type;
+    };
+
+    dynamic_distinct_directive()
+    :   tail(nothing_p)
+    {
+    }
+
+    template<typename ParserT>
+    explicit dynamic_distinct_directive(parser<ParserT> const & tail_)
+    :   tail(tail_.derived())
+    {
+    }
+
+    explicit dynamic_distinct_directive(char_t const* letters)
+    :   tail(chset_p(letters))
+    {
+    }
+
+    template<typename ParserT>
+    typename result<typename as_parser<ParserT>::type>::type
+        operator[](ParserT const &subject) const
+    {
+        return
+            lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
+    }
+
+    tail_t tail;
+};
+
+//-----------------------------------------------------------------------------
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+    } // namespace spirit
+} // namespace boost
+
+#endif // !defined(BOOST_SPIRIT_DISTINCT_HPP)