Update of /cvsroot/boost/boost/boost/xpressive
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv30302
Modified Files:
regex_actions.hpp
Log Message:
fix busted actions, add make_pair
Index: regex_actions.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/regex_actions.hpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- regex_actions.hpp 27 May 2007 08:06:46 -0000 1.24
+++ regex_actions.hpp 1 Jun 2007 23:29:55 -0000 1.25
@@ -23,6 +23,8 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/xpressive/detail/detail_fwd.hpp>
#include <boost/xpressive/detail/core/state.hpp>
#include <boost/xpressive/detail/core/matcher/predicate_matcher.hpp>
@@ -34,6 +36,9 @@
# include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
#endif
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) typename remove_cv<typename remove_reference<x>::type>::type
+
namespace boost { namespace xpressive
{
@@ -47,7 +52,7 @@
reference cast(void *pv) const
{
- return *static_cast<typename remove_reference<T>::type *>(pv);
+ return *static_cast<UNREF(T) *>(pv);
}
};
@@ -140,13 +145,14 @@
struct result {};
template<typename This, typename Sequence>
- struct result<This(Sequence &)>
+ struct result<This(Sequence)>
{
+ typedef UNREF(Sequence) sequence_type;
typedef
typename mpl::if_<
- is_const<Sequence>
- , typename Sequence::const_reference
- , typename Sequence::reference
+ is_const<sequence_type>
+ , typename sequence_type::const_reference
+ , typename sequence_type::reference
>::type
type;
};
@@ -164,13 +170,14 @@
struct result {};
template<typename This, typename Sequence>
- struct result<This(Sequence &)>
+ struct result<This(Sequence)>
{
+ typedef UNREF(Sequence) sequence_type;
typedef
typename mpl::if_<
- is_const<Sequence>
- , typename Sequence::const_reference
- , typename Sequence::reference
+ is_const<sequence_type>
+ , typename sequence_type::const_reference
+ , typename sequence_type::reference
>::type
type;
};
@@ -188,13 +195,14 @@
struct result {};
template<typename This, typename Sequence>
- struct result<This(Sequence &)>
+ struct result<This(Sequence)>
{
+ typedef UNREF(Sequence) sequence_type;
typedef
typename mpl::if_<
- is_const<Sequence>
- , typename Sequence::value_type const &
- , typename Sequence::value_type &
+ is_const<sequence_type>
+ , typename sequence_type::value_type const &
+ , typename sequence_type::value_type &
>::type
type;
};
@@ -212,13 +220,13 @@
struct result {};
template<typename This, typename Pair>
- struct result<This(Pair &)>
+ struct result<This(Pair)>
{
- typedef typename Pair::first_type type;
+ typedef UNREF(Pair)::first_type type;
};
template<typename Pair>
- typename Pair::first_type operator()(Pair &p) const
+ typename Pair::first_type operator()(Pair const &p) const
{
return p.first;
}
@@ -230,13 +238,13 @@
struct result {};
template<typename This, typename Pair>
- struct result<This(Pair &)>
+ struct result<This(Pair)>
{
- typedef typename Pair::second_type type;
+ typedef UNREF(Pair)::second_type type;
};
template<typename Pair>
- typename Pair::second_type operator()(Pair &p) const
+ typename Pair::second_type operator()(Pair const &p) const
{
return p.second;
}
@@ -247,7 +255,7 @@
typedef bool result_type;
template<typename Sub>
- bool operator()(Sub &sub) const
+ bool operator()(Sub const &sub) const
{
return sub.matched;
}
@@ -259,13 +267,13 @@
struct result {};
template<typename This, typename Sub>
- struct result<This(Sub &)>
+ struct result<This(Sub)>
{
- typedef typename Sub::difference_type type;
+ typedef UNREF(Sub)::difference_type type;
};
template<typename Sub>
- typename Sub::difference_type operator()(Sub &sub) const
+ typename Sub::difference_type operator()(Sub const &sub) const
{
return sub.length();
}
@@ -277,13 +285,13 @@
struct result {};
template<typename This, typename Sub>
- struct result<This(Sub &)>
+ struct result<This(Sub)>
{
- typedef typename Sub::string_type type;
+ typedef UNREF(Sub)::string_type type;
};
template<typename Sub>
- typename Sub::string_type operator()(Sub &sub) const
+ typename Sub::string_type operator()(Sub const &sub) const
{
return sub.str();
}
@@ -341,68 +349,70 @@
// assoc containers
template<typename This, typename Cont, typename Value>
- struct result<This(Cont &, Value &), void>
+ struct result<This(Cont, Value), void>
{
- static Cont &scont_;
- static Value &svalue_;
+ typedef UNREF(Cont) cont_type;
+ typedef UNREF(Value) value_type;
+ static cont_type &scont_;
+ static value_type &svalue_;
typedef char yes_type;
typedef char (&no_type)[2];
- static yes_type check_insert_return(typename Cont::iterator);
- static no_type check_insert_return(std::pair<typename
Cont::iterator, bool>);
+ static yes_type check_insert_return(typename
cont_type::iterator);
+ static no_type check_insert_return(std::pair<typename
cont_type::iterator, bool>);
BOOST_STATIC_CONSTANT(bool, is_iterator = (sizeof(yes_type) ==
sizeof(check_insert_return(scont_.insert(svalue_)))));
typedef
typename mpl::if_c<
is_iterator
- , typename Cont::iterator
- , std::pair<typename Cont::iterator, bool>
+ , typename cont_type::iterator
+ , std::pair<typename cont_type::iterator, bool>
>::type
type;
};
// sequence containers, assoc containers, strings
template<typename This, typename Cont, typename It, typename Value>
- struct result<This(Cont &, It &, Value &),
- typename disable_if<mpl::or_<is_integral<It>, is_same<It,
Value> > >::type>
+ struct result<This(Cont, It, Value),
+ typename disable_if<mpl::or_<is_integral<UNCVREF(It)>,
is_same<UNCVREF(It), UNCVREF(Value)> > >::type>
{
- typedef typename Cont::iterator type;
+ typedef UNREF(Cont)::iterator type;
};
// strings
template<typename This, typename Cont, typename Size, typename T>
- struct result<This(Cont &, Size &, T &),
- typename enable_if<is_integral<Size> >::type>
+ struct result<This(Cont, Size, T),
+ typename enable_if<is_integral<UNCVREF(Size)> >::type>
{
- typedef Cont &type;
+ typedef UNREF(Cont) &type;
};
// assoc containers
template<typename This, typename Cont, typename It>
- struct result<This(Cont &, It &, It &), void>
+ struct result<This(Cont, It, It), void>
{
typedef void type;
};
// sequence containers, strings
template<typename This, typename Cont, typename It, typename Size,
typename Value>
- struct result<This(Cont &, It &, Size &, Value &),
- typename disable_if<is_integral<It> >::type>
+ struct result<This(Cont, It, Size, Value),
+ typename disable_if<is_integral<UNCVREF(It)> >::type>
{
typedef void type;
};
// strings
template<typename This, typename Cont, typename Size, typename A0,
typename A1>
- struct result<This(Cont &, Size &, A0 &, A1 &),
- typename enable_if<is_integral<Size> >::type>
+ struct result<This(Cont, Size, A0, A1),
+ typename enable_if<is_integral<UNCVREF(Size)> >::type>
{
- typedef Cont &type;
+ typedef UNREF(Cont) &type;
};
/// operator()
///
template<typename Cont, typename A0>
- typename result<insert(Cont &, A0 &)>::type
- operator()(Cont &cont, A0 &a0) const
+ typename result<insert(Cont &, A0 const &)>::type
+ operator()(Cont &cont, A0 const &a0) const
{
return cont.insert(a0);
}
@@ -410,8 +420,8 @@
/// \overload
///
template<typename Cont, typename A0, typename A1>
- typename result<insert(Cont &, A0 &, A1 &)>::type
- operator()(Cont &cont, A0 &a0, A1 &a1) const
+ typename result<insert(Cont &, A0 const &, A1 const &)>::type
+ operator()(Cont &cont, A0 const &a0, A1 const &a1) const
{
return cont.insert(a0, a1);
}
@@ -419,12 +429,30 @@
/// \overload
///
template<typename Cont, typename A0, typename A1, typename A2>
- typename result<insert(Cont &, A0 &, A1 &, A2 &)>::type
- operator()(Cont &cont, A0 &a0, A1 &a1, A2 &a2) const
+ typename result<insert(Cont &, A0 const &, A1 const &, A2 const
&)>::type
+ operator()(Cont &cont, A0 const &a0, A1 const &a1, A2 const &a2)
const
{
return cont.insert(a0, a1, a2);
}
};
+
+ struct make_pair
+ {
+ template<typename Sig>
+ struct result {};
+
+ template<typename This, typename First, typename Second>
+ struct result<This(First, Second)>
+ {
+ typedef std::pair<UNCVREF(First), UNCVREF(Second)> type;
+ };
+
+ template<typename First, typename Second>
+ std::pair<First, Second> operator()(First const &first, Second
const &second) const
+ {
+ return std::make_pair(first, second);
+ }
+ };
}
proto::terminal<op::push>::type const push = {{}};
@@ -442,6 +470,7 @@
proto::terminal<op::length>::type const length = {{}};
proto::terminal<op::str>::type const str = {{}};
proto::terminal<op::insert>::type const insert = {{}};
+ proto::terminal<op::make_pair>::type const make_pair = {{}};
template<typename T>
struct value
@@ -660,4 +689,8 @@
}}
+#undef UNREF
+#undef UNCVREF
+
+
#endif // BOOST_XPRESSIVE_ACTIONS_HPP_EAN_03_22_2007
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs