Update of /cvsroot/boost/boost/boost/xpressive
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv12267/boost/xpressive

Modified Files:
        regex_actions.hpp 
Log Message:
make eval() a free function, make xpressive deep_copy semantic actions

Index: regex_actions.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/regex_actions.hpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- regex_actions.hpp   27 Mar 2007 06:38:16 -0000      1.9
+++ regex_actions.hpp   29 Mar 2007 22:19:38 -0000      1.10
@@ -14,8 +14,11 @@
 # pragma once
 #endif
 
+#include <boost/ref.hpp>
+#include <boost/mpl/if.hpp>
 #include <boost/mpl/int.hpp>
 #include <boost/lexical_cast.hpp>
+#include <boost/type_traits/is_const.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/core/state.hpp>
 #include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
@@ -38,12 +41,6 @@
                 return *static_cast<typename remove_reference<T>::type *>(pv);
             }
         };
-
-        template<typename T>
-        T &unconst(T const &t)
-        {
-            return const_cast<T &>(t);
-        }
     }
 
     namespace op
@@ -55,7 +52,7 @@
             template<typename Sequence, typename Value>
             void operator()(Sequence &seq, Value const &val) const
             {
-                detail::unconst(seq).push(val);
+                seq.push(val);
             }
         };
 
@@ -66,7 +63,7 @@
             template<typename Sequence, typename Value>
             void operator()(Sequence &seq, Value const &val) const
             {
-                detail::unconst(seq).push_back(val);
+                seq.push_back(val);
             }
         };
 
@@ -77,7 +74,7 @@
             template<typename Sequence, typename Value>
             void operator()(Sequence &seq, Value const &val) const
             {
-                detail::unconst(seq).push_front(val);
+                seq.push_front(val);
             }
         };
 
@@ -88,7 +85,7 @@
             template<typename Sequence>
             void operator()(Sequence &seq) const
             {
-                detail::unconst(seq).pop();
+                seq.pop();
             }
         };
 
@@ -99,7 +96,7 @@
             template<typename Sequence>
             void operator()(Sequence &seq) const
             {
-                detail::unconst(seq).pop_back();
+                seq.pop_back();
             }
         };
 
@@ -110,7 +107,7 @@
             template<typename Sequence>
             void operator()(Sequence &seq) const
             {
-                detail::unconst(seq).pop_front();
+                seq.pop_front();
             }
         };
 
@@ -122,11 +119,17 @@
             template<typename This, typename Sequence>
             struct result<This(Sequence &)>
             {
-                typedef typename Sequence::value_type type;
+                typedef 
+                    typename mpl::if_<
+                        is_const<Sequence>
+                      , typename Sequence::const_reference
+                      , typename Sequence::reference
+                    >::type
+                type;
             };
 
             template<typename Sequence>
-            typename Sequence::value_type operator()(Sequence &seq) const
+            typename result<front(Sequence &)>::type operator()(Sequence &seq) 
const
             {
                 return seq.front();
             }
@@ -140,11 +143,17 @@
             template<typename This, typename Sequence>
             struct result<This(Sequence &)>
             {
-                typedef typename Sequence::value_type type;
+                typedef 
+                    typename mpl::if_<
+                        is_const<Sequence>
+                      , typename Sequence::const_reference
+                      , typename Sequence::reference
+                    >::type
+                type;
             };
 
             template<typename Sequence>
-            typename Sequence::value_type operator()(Sequence &seq) const
+            typename result<back(Sequence &)>::type operator()(Sequence &seq) 
const
             {
                 return seq.back();
             }
@@ -158,11 +167,17 @@
             template<typename This, typename Sequence>
             struct result<This(Sequence &)>
             {
-                typedef typename Sequence::value_type type;
+                typedef 
+                    typename mpl::if_<
+                        is_const<Sequence>
+                      , typename Sequence::value_type const &
+                      , typename Sequence::value_type &
+                    >::type
+                type;
             };
 
             template<typename Sequence>
-            typename Sequence::value_type operator()(Sequence &seq) const
+            typename result<top(Sequence &)>::type operator()(Sequence &seq) 
const
             {
                 return seq.top();
             }
@@ -328,15 +343,15 @@
     }
 
     template<typename T>
-    typename proto::terminal<T &>::type ref(T &t)
+    typename proto::terminal<reference_wrapper<T> >::type ref(T &t)
     {
-        return proto::terminal<T &>::type::make(t);
+        return proto::terminal<reference_wrapper<T> 
>::type::make(reference_wrapper<T>(t));
     }
 
     template<typename T>
-    typename proto::terminal<T const &>::type cref(T const &t)
+    typename proto::terminal<reference_wrapper<T const> >::type cref(T const 
&t)
     {
-        return proto::terminal<T const &>::type::make(t);
+        return proto::terminal<reference_wrapper<T const> 
>::type::make(reference_wrapper<T const>(t));
     }
 
     template<typename Predicate>


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to