Compare commits

..

17 Commits

Author SHA1 Message Date
3b96c52505 + creating a branch for a xpressive extension that allows nesting
of regular expressions


[SVN r38759]
2007-08-19 15:07:44 +00:00
1da5dd89a8 Corrected wrong order in copyright notices.
[SVN r36240]
2006-12-02 10:04:37 +00:00
57fd51f8f4 Added Caleb as copyright owner.
[SVN r36230]
2006-12-01 14:27:03 +00:00
60e5d575c0 Fixed license & copyright issues.
[SVN r36224]
2006-12-01 10:29:49 +00:00
87ff652a07 move to namespace detail
[SVN r36027]
2006-11-13 22:10:57 +00:00
a548ecc968 Replaced the implementation of ct_if with a facade implementation that
defers to Boost.MPL.


[SVN r36022]
2006-11-13 15:35:54 +00:00
4e009de1ec Bring into compliance with N2066, TR2 Diagnostics Enhancements. Tests passing on Win32, Linux, on most modern compilers.
[SVN r35823]
2006-11-03 16:57:30 +00:00
751e863564 Updated patch from Boris Gubenko.
[SVN r35672]
2006-10-20 10:08:21 +00:00
62b7d277f2 Fix for HP-UX on Itanium.
[SVN r35591]
2006-10-13 17:08:47 +00:00
7106b3c8b1 Added 64-bit Intel processor support.
[SVN r35587]
2006-10-13 12:40:40 +00:00
cd03e4d537 Fix typos.
[SVN r35505]
2006-10-06 15:45:41 +00:00
afbb75b3cb Make is_reference_to_pointer work properly with an abstract class
[SVN r35498]
2006-10-05 13:51:07 +00:00
e2bea194a3 use <assert.h>; include <climits> for Borland only
[SVN r34906]
2006-08-19 11:05:56 +00:00
72a38b9137 identification
[SVN r34905]
2006-08-19 11:04:25 +00:00
e71cca99a6 Windows CE patch by Michael Fink
[SVN r33986]
2006-05-17 22:33:47 +00:00
d2e2b59111 *** empty log message ***
[SVN r33878]
2006-04-30 23:56:35 +00:00
7d61e78d56 Keep bool_trait_def.hpp as the last #include; add bool_trait_undef.hpp at the end.
[SVN r33867]
2006-04-30 03:04:18 +00:00
4 changed files with 114 additions and 90 deletions

View File

@ -0,0 +1,89 @@
// boost/identifier.hpp ----------------------------------------------------//
// Copyright Beman Dawes 2006
// 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)
// See documentation at http://www.boost.org/libs/utility
#ifndef BOOST_IDENTIFIER_HPP
#define BOOST_IDENTIFIER_HPP
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_base_of.hpp>
#include <iosfwd>
namespace boost
{
namespace detail
{
// class template identifier ---------------------------------------------//
// Always used as a base class so that different instantiations result in
// different class types even if instantiated with the same value type T.
// Expected usage is that T is often an integer type, best passed by
// value. There is no reason why T can't be a possibly larger class such as
// std::string, best passed by const reference.
// This implementation uses pass by value, based on expected common uses.
template <typename T, typename D>
class identifier
{
public:
typedef T value_type;
const value_type value() const { return m_value; }
void assign( value_type v ) { m_value = v; }
bool operator==( const D & rhs ) const { return m_value == rhs.m_value; }
bool operator!=( const D & rhs ) const { return m_value != rhs.m_value; }
bool operator< ( const D & rhs ) const { return m_value < rhs.m_value; }
bool operator<=( const D & rhs ) const { return m_value <= rhs.m_value; }
bool operator> ( const D & rhs ) const { return m_value > rhs.m_value; }
bool operator>=( const D & rhs ) const { return m_value >= rhs.m_value; }
typedef void (*unspecified_bool_type)(D); // without the D, unspecified_bool_type
static void unspecified_bool_true(D){} // conversion allows relational operators
// between different identifier types
operator unspecified_bool_type() const { return m_value == value_type() ? 0 : unspecified_bool_true; }
bool operator!() const { return m_value == value_type(); }
// constructors are protected so that class can only be used as a base class
protected:
identifier() {}
explicit identifier( value_type v ) : m_value(v) {}
#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // 1300 == VC++ 7.0 bug workaround
private:
#endif
T m_value;
};
//#ifndef BOOST_NO_SFINAE
// template <class Ostream, class Id>
// typename enable_if< is_base_of< identifier< typename Id::value_type, Id >, Id >,
// Ostream & >::type operator<<( Ostream & os, const Id & id )
// {
// return os << id.value();
// }
// template <class Istream, class Id>
// typename enable_if< is_base_of< identifier< typename Id::value_type, Id >, Id >,
// Istream & >::type operator>>( Istream & is, Id & id )
// {
// typename Id::value_type v;
// is >> v;
// id.value( v );
// return is;
// }
//#endif
} // namespace detail
} // namespace boost
#endif // BOOST_IDENTIFIER_HPP

View File

@ -398,7 +398,7 @@ struct reference_to_pointer_impl
typedef mpl::bool_<value> type;
};
template <class T>
struct is_reference_to_pointer
: mpl::eval_if<is_reference<T>, reference_to_pointer_impl<T>, mpl::false_>::type

View File

@ -3,107 +3,39 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// The ct_if implementation that avoids partial specialization is
// based on the IF class by Ulrich W. Eisenecker and Krzysztof
// Czarnecki.
// This header replaces the implementation of ct_if that preceded the
// introduction of Boost.MPL with a facade that defers to that reviewed and
// accepted library.
// Author: Ronald Garcia
// Date: 20 October, 2006
#ifndef BOOST_CT_IF_HPP
#define BOOST_CT_IF_HPP
#include <boost/config.hpp>
/*
There is a bug in the Borland compiler with regards to using
integers to specialize templates. This made it hard to use ct_if in
the graph library. Changing from 'ct_if' to 'ct_if_t' fixed the
problem.
*/
// A stub implementation in terms of Boost.MPL
#include <boost/type_traits/integral_constant.hpp> // true_type and false_type
#include <boost/mpl/if.hpp>
#include <boost/mpl/not.hpp>
#include <boost/mpl/and.hpp>
// true_type and false_type are used by applications of ct_if
#include <boost/type_traits/integral_constant.hpp>
namespace boost {
struct ct_if_error { };
template <class A, class B>
struct ct_and { typedef false_type type; };
template <> struct ct_and<true_type,true_type> { typedef true_type type; };
struct ct_and : boost::mpl::and_<A,B> {};
template <class A> struct ct_not { typedef ct_if_error type; };
template <> struct ct_not<true_type> { typedef false_type type; };
template <> struct ct_not<false_type> { typedef true_type type; };
template <class A>
struct ct_not : mpl::not_<A> {};
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// agurt, 15/sep/02: in certain cases Borland has problems with
// choosing the right 'ct_if' specialization even though 'cond'
// _does_ equal '1'; the easiest way to fix it is to make first
// 'ct_if' non-type template parameter boolean.
#if !defined(__BORLANDC__)
template <bool cond, class A, class B>
struct ct_if { typedef ct_if_error type; };
template <class A, class B>
struct ct_if<true, A, B> { typedef A type; };
template <class A, class B>
struct ct_if<false, A, B> { typedef B type; };
#else
template <bool cond, class A, class B>
struct ct_if { typedef A type; };
template <class A, class B>
struct ct_if<false, A, B> { typedef B type; };
#endif
struct ct_if : mpl::if_c<cond,A,B> {};
template <class cond, class A, class B>
struct ct_if_t { typedef ct_if_error type; };
template <class A, class B>
struct ct_if_t<true_type, A, B> { typedef A type; };
template <class A, class B>
struct ct_if_t<false_type, A, B> { typedef B type; };
#else
namespace detail {
template <int condition, class A, class B> struct IF;
template <int condition> struct SlectSelector;
struct SelectFirstType;
struct SelectSecondType;
struct SelectFirstType {
template<class A, class B>
struct Template { typedef A type; };
};
struct SelectSecondType {
template<class A, class B>
struct Template { typedef B type; };
};
template<int condition>
struct SlectSelector {
typedef SelectFirstType type;
};
template <>
struct SlectSelector<0> {
typedef SelectSecondType type;
};
} // namespace detail
template<int condition, class A, class B>
struct ct_if
{
typedef typename detail::SlectSelector<condition>::type Selector;
typedef typename Selector::template Template<A, B>::type type;
};
template <class cond, class A, class B>
struct ct_if_t {
typedef typename ct_if<cond::value, A, B>::type type;
};
#endif
struct ct_if_t : mpl::if_<cond,A,B> {};
} // namespace boost

View File

@ -12,14 +12,17 @@
// http://www.boost.org/LICENSE_1_0.txt)
//
// ------------------------------------------------------
//
// $Id$
#ifndef BOOST_INTEGER_LOG2_HPP_GP_20030301
#define BOOST_INTEGER_LOG2_HPP_GP_20030301
#include <cassert>
#include <climits> // actually used for Borland only
#include <assert.h>
#ifdef __BORLANDC__
#include <climits>
#endif
#include "boost/limits.hpp"
#include "boost/config.hpp"