$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r67350 - trunk/boost/spirit/home/lex/qi
From: hartmut.kaiser_at_[hidden]
Date: 2010-12-19 13:32:02
Author: hkaiser
Date: 2010-12-19 13:32:02 EST (Sun, 19 Dec 2010)
New Revision: 67350
URL: http://svn.boost.org/trac/boost/changeset/67350
Log:
Spirit: added matching of any tokens by specifying qi::token/qi::tokenid without parameter
Text files modified: 
   trunk/boost/spirit/home/lex/qi/plain_token.hpp   |    19 +++++++++++++++++--                     
   trunk/boost/spirit/home/lex/qi/plain_tokenid.hpp |    18 +++++++++++++++++-                      
   2 files changed, 34 insertions(+), 3 deletions(-)
Modified: trunk/boost/spirit/home/lex/qi/plain_token.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/qi/plain_token.hpp	(original)
+++ trunk/boost/spirit/home/lex/qi/plain_token.hpp	2010-12-19 13:32:02 EST (Sun, 19 Dec 2010)
@@ -31,6 +31,11 @@
     // Enablers
     ///////////////////////////////////////////////////////////////////////////
 
+    // enables token
+    template <>
+    struct use_terminal<qi::domain, tag::token>
+      : mpl::true_ {};
+
     // enables token(id)
     template <typename A0>
     struct use_terminal<qi::domain
@@ -82,7 +87,7 @@
                 typedef typename token_type::id_type id_type;
 
                 token_type const& t = *first;
-                if (id_type(id) == t.id()) {
+                if (std::size_t(~0) == t.id() || id_type(id) == t.id()) {
                     spirit::traits::assign_to(t, attr);
                     ++first;
                     return true;
@@ -103,6 +108,17 @@
     ///////////////////////////////////////////////////////////////////////////
     // Parser generators: make_xxx function (objects)
     ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::token, Modifiers>
+    {
+        typedef plain_token<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
     template <typename Modifiers, typename TokenId>
     struct make_primitive<terminal_ex<tag::token, fusion::vector1<TokenId> >
       , Modifiers>
@@ -115,7 +131,6 @@
             return result_type(fusion::at_c<0>(term.args));
         }
     };
-
 }}}
 
 #endif
Modified: trunk/boost/spirit/home/lex/qi/plain_tokenid.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/qi/plain_tokenid.hpp	(original)
+++ trunk/boost/spirit/home/lex/qi/plain_tokenid.hpp	2010-12-19 13:32:02 EST (Sun, 19 Dec 2010)
@@ -31,6 +31,11 @@
     // Enablers
     ///////////////////////////////////////////////////////////////////////////
 
+    // enables tokenid
+    template <>
+    struct use_terminal<qi::domain, tag::tokenid>
+      : mpl::true_ {};
+
     // enables tokenid(id)
     template <typename A0>
     struct use_terminal<qi::domain
@@ -83,7 +88,7 @@
                 typedef typename token_type::id_type id_type;
 
                 token_type const& t = *first;
-                if (id_type(id) == t.id()) {
+                if (std::size_t(~0) == t.id() || id_type(id) == t.id()) {
                     spirit::traits::assign_to(id, attr);
                     ++first;
                     return true;
@@ -104,6 +109,17 @@
     ///////////////////////////////////////////////////////////////////////////
     // Parser generators: make_xxx function (objects)
     ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::tokenid, Modifiers> 
+    {
+        typedef plain_token<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
     template <typename Modifiers, typename TokenId>
     struct make_primitive<terminal_ex<tag::tokenid, fusion::vector1<TokenId> >
       , Modifiers>