Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2008-05-31 15:31:07


Author: eric_niebler
Date: 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
New Revision: 45985
URL: http://svn.boost.org/trac/boost/changeset/45985

Log:
merged from trunk
Added:
   branches/proto/v4/libs/iostreams/doc/classes/grep_filter.html
      - copied unchanged from r45920, /trunk/libs/iostreams/doc/classes/grep_filter.html
   branches/proto/v4/libs/thread/doc/time.qbk
      - copied unchanged from r45920, /trunk/libs/thread/doc/time.qbk
Properties modified:
   branches/proto/v4/ (props changed)
Text files modified:
   branches/proto/v4/boost/algorithm/string.hpp | 1
   branches/proto/v4/boost/interprocess/detail/math_functions.hpp | 219 +++++++++++-----------
   branches/proto/v4/boost/iostreams/detail/config/disable_warnings.hpp | 1
   branches/proto/v4/boost/iostreams/detail/is_iterator_range.hpp | 14
   branches/proto/v4/boost/iostreams/traits.hpp | 14
   branches/proto/v4/boost/math/special_functions/next.hpp | 2
   branches/proto/v4/boost/proto/generate.hpp | 2
   branches/proto/v4/boost/python/object_attributes.hpp | 48 +++++
   branches/proto/v4/boost/python/object_core.hpp | 6
   branches/proto/v4/boost/thread/barrier.hpp | 6
   branches/proto/v4/boost/thread/detail/move.hpp | 5
   branches/proto/v4/boost/thread/detail/thread.hpp | 108 ++++++-----
   branches/proto/v4/boost/thread/detail/tss_hooks.hpp | 4
   branches/proto/v4/boost/thread/exceptions.hpp | 6
   branches/proto/v4/boost/thread/locks.hpp | 236 ++++++++++++++++++++++++
   branches/proto/v4/boost/thread/once.hpp | 4
   branches/proto/v4/boost/thread/pthread/condition_variable.hpp | 23 -
   branches/proto/v4/boost/thread/pthread/condition_variable_fwd.hpp | 21 +
   branches/proto/v4/boost/thread/pthread/mutex.hpp | 6
   branches/proto/v4/boost/thread/pthread/once.hpp | 9
   branches/proto/v4/boost/thread/pthread/pthread_mutex_scoped_lock.hpp | 6
   branches/proto/v4/boost/thread/pthread/recursive_mutex.hpp | 5
   branches/proto/v4/boost/thread/pthread/shared_mutex.hpp | 5
   branches/proto/v4/boost/thread/pthread/thread_data.hpp | 3
   branches/proto/v4/boost/thread/pthread/thread_heap_alloc.hpp | 3
   branches/proto/v4/boost/thread/pthread/timespec.hpp | 10
   branches/proto/v4/boost/thread/pthread/tss.hpp | 6
   branches/proto/v4/boost/thread/thread_time.hpp | 4
   branches/proto/v4/boost/thread/win32/basic_recursive_mutex.hpp | 6
   branches/proto/v4/boost/thread/win32/basic_timed_mutex.hpp | 6
   branches/proto/v4/boost/thread/win32/condition_variable.hpp | 6
   branches/proto/v4/boost/thread/win32/interlocked_read.hpp | 9
   branches/proto/v4/boost/thread/win32/mutex.hpp | 4
   branches/proto/v4/boost/thread/win32/once.hpp | 4
   branches/proto/v4/boost/thread/win32/recursive_mutex.hpp | 3
   branches/proto/v4/boost/thread/win32/shared_mutex.hpp | 3
   branches/proto/v4/boost/thread/win32/thread_data.hpp | 3
   branches/proto/v4/boost/thread/win32/thread_heap_alloc.hpp | 4
   branches/proto/v4/boost/thread/win32/thread_primitives.hpp | 4
   branches/proto/v4/boost/thread/win32/tss.hpp | 5
   branches/proto/v4/boost/thread/xtime.hpp | 6
   branches/proto/v4/libs/iostreams/doc/bibliography.html | 4
   branches/proto/v4/libs/iostreams/doc/classes/regex_filter.html | 22 +-
   branches/proto/v4/libs/iostreams/doc/menu.html | 4
   branches/proto/v4/libs/iostreams/doc/quick_reference.html | 11 +
   branches/proto/v4/libs/math/doc/complex/complex-tr1.qbk | 2
   branches/proto/v4/libs/math/doc/gcd/math-gcd.qbk | 2
   branches/proto/v4/libs/math/doc/math.qbk | 12
   branches/proto/v4/libs/math/doc/octonion/math-octonion.qbk | 2
   branches/proto/v4/libs/math/doc/quaternion/math-quaternion.qbk | 2
   branches/proto/v4/libs/math/doc/sf_and_dist/math.qbk | 2
   branches/proto/v4/libs/math/test/test_tr1.cpp | 1
   branches/proto/v4/libs/python/doc/projects.html | 27 ++
   branches/proto/v4/libs/python/doc/v2/object.html | 143 +++++++++++++++
   branches/proto/v4/libs/python/test/object.cpp | 55 +++++
   branches/proto/v4/libs/python/test/object.py | 39 ++++
   branches/proto/v4/libs/system/src/error_code.cpp | 9
   branches/proto/v4/libs/thread/doc/thread.qbk | 2
   branches/proto/v4/libs/thread/doc/thread_ref.qbk | 11
   branches/proto/v4/libs/thread/src/pthread/thread.cpp | 6
   branches/proto/v4/libs/thread/test/test_generic_locks.cpp | 376 ++++++++++++++++++++++++++++++++++++++++
   branches/proto/v4/libs/thread/test/test_thread_launching.cpp | 6
   branches/proto/v4/libs/tr1/doc/tr1.qbk | 3
   branches/proto/v4/libs/unordered/test/helpers/test.hpp | 1
   branches/proto/v4/libs/unordered/test/unordered/move_tests.cpp | 6
   branches/proto/v4/tools/build/v2/tools/darwin.jam | 2
   branches/proto/v4/tools/regression/xsl_reports/build_results.sh | 3
   67 files changed, 1322 insertions(+), 271 deletions(-)

Modified: branches/proto/v4/boost/algorithm/string.hpp
==============================================================================
--- branches/proto/v4/boost/algorithm/string.hpp (original)
+++ branches/proto/v4/boost/algorithm/string.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -21,6 +21,7 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/find.hpp>
 #include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/join.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/algorithm/string/erase.hpp>
 #include <boost/algorithm/string/classification.hpp>

Modified: branches/proto/v4/boost/interprocess/detail/math_functions.hpp
==============================================================================
--- branches/proto/v4/boost/interprocess/detail/math_functions.hpp (original)
+++ branches/proto/v4/boost/interprocess/detail/math_functions.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,109 +1,110 @@
-//////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Stephen Cleary 2000.
-// (C) Copyright Ion Gaztanaga 2007-2008.
-//
-// 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 http://www.boost.org/libs/interprocess for documentation.
-//
-// This file is a slightly modified file from Boost.Pool
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTERPROCESS_DETAIL_MATH_FUNCTIONS_HPP
-#define BOOST_INTERPROCESS_DETAIL_MATH_FUNCTIONS_HPP
-
-#include <boost/static_assert.hpp>
-
-namespace boost {
-namespace interprocess {
-namespace detail {
-
-// Greatest common divisor and least common multiple
-
-//
-// gcd is an algorithm that calculates the greatest common divisor of two
-// integers, using Euclid's algorithm.
-//
-// Pre: A > 0 && B > 0
-// Recommended: A > B
-template <typename Integer>
-inline Integer gcd(Integer A, Integer B)
-{
- do
- {
- const Integer tmp(B);
- B = A % B;
- A = tmp;
- } while (B != 0);
-
- return A;
-}
-
-//
-// lcm is an algorithm that calculates the least common multiple of two
-// integers.
-//
-// Pre: A > 0 && B > 0
-// Recommended: A > B
-template <typename Integer>
-inline Integer lcm(const Integer & A, const Integer & B)
-{
- Integer ret = A;
- ret /= gcd(A, B);
- ret *= B;
- return ret;
-}
-
-template <typename Integer>
-inline Integer log2_ceil(const Integer & A)
-{
- Integer i = 0;
- Integer power_of_2 = 1;
-
- while(power_of_2 < A){
- power_of_2 <<= 1;
- ++i;
- }
- return i;
-}
-
-template <typename Integer>
-inline Integer upper_power_of_2(const Integer & A)
-{
- Integer power_of_2 = 1;
-
- while(power_of_2 < A){
- power_of_2 <<= 1;
- }
- return power_of_2;
-}
-
-//This function uses binary search to discover the
-//highest set bit of the integer
-inline std::size_t floor_log2 (std::size_t x)
-{
- const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT;
- const bool Size_t_Bits_Power_2= !(Bits & (Bits-1));
- BOOST_STATIC_ASSERT(Size_t_Bits_Power_2);
-
- std::size_t n = x;
- std::size_t log2 = 0;
-
- for(std::size_t shift = Bits >> 1; shift; shift >>= 1){
- std::size_t tmp = n >> shift;
- if (tmp)
- log2 += shift, n = tmp;
- }
-
- return log2;
-}
-
-} // namespace detail
-} // namespace interprocess
-} // namespace boost
-
-#endif
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Stephen Cleary 2000.
+// (C) Copyright Ion Gaztanaga 2007-2008.
+//
+// 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 http://www.boost.org/libs/interprocess for documentation.
+//
+// This file is a slightly modified file from Boost.Pool
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTERPROCESS_DETAIL_MATH_FUNCTIONS_HPP
+#define BOOST_INTERPROCESS_DETAIL_MATH_FUNCTIONS_HPP
+
+#include <boost/static_assert.hpp>
+#include <climits>
+
+namespace boost {
+namespace interprocess {
+namespace detail {
+
+// Greatest common divisor and least common multiple
+
+//
+// gcd is an algorithm that calculates the greatest common divisor of two
+// integers, using Euclid's algorithm.
+//
+// Pre: A > 0 && B > 0
+// Recommended: A > B
+template <typename Integer>
+inline Integer gcd(Integer A, Integer B)
+{
+ do
+ {
+ const Integer tmp(B);
+ B = A % B;
+ A = tmp;
+ } while (B != 0);
+
+ return A;
+}
+
+//
+// lcm is an algorithm that calculates the least common multiple of two
+// integers.
+//
+// Pre: A > 0 && B > 0
+// Recommended: A > B
+template <typename Integer>
+inline Integer lcm(const Integer & A, const Integer & B)
+{
+ Integer ret = A;
+ ret /= gcd(A, B);
+ ret *= B;
+ return ret;
+}
+
+template <typename Integer>
+inline Integer log2_ceil(const Integer & A)
+{
+ Integer i = 0;
+ Integer power_of_2 = 1;
+
+ while(power_of_2 < A){
+ power_of_2 <<= 1;
+ ++i;
+ }
+ return i;
+}
+
+template <typename Integer>
+inline Integer upper_power_of_2(const Integer & A)
+{
+ Integer power_of_2 = 1;
+
+ while(power_of_2 < A){
+ power_of_2 <<= 1;
+ }
+ return power_of_2;
+}
+
+//This function uses binary search to discover the
+//highest set bit of the integer
+inline std::size_t floor_log2 (std::size_t x)
+{
+ const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT;
+ const bool Size_t_Bits_Power_2= !(Bits & (Bits-1));
+ BOOST_STATIC_ASSERT(Size_t_Bits_Power_2);
+
+ std::size_t n = x;
+ std::size_t log2 = 0;
+
+ for(std::size_t shift = Bits >> 1; shift; shift >>= 1){
+ std::size_t tmp = n >> shift;
+ if (tmp)
+ log2 += shift, n = tmp;
+ }
+
+ return log2;
+}
+
+} // namespace detail
+} // namespace interprocess
+} // namespace boost
+
+#endif

Modified: branches/proto/v4/boost/iostreams/detail/config/disable_warnings.hpp
==============================================================================
--- branches/proto/v4/boost/iostreams/detail/config/disable_warnings.hpp (original)
+++ branches/proto/v4/boost/iostreams/detail/config/disable_warnings.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -16,6 +16,7 @@
 # pragma warning(disable:4244) // Conversion: possible loss of data.
 # pragma warning(disable:4512) // Assignment operator could not be generated.
 # pragma warning(disable:4706) // Assignment within conditional expression.
+# pragma warning(disable:6334) // sizeof applied to an expression with an operator.
 #else
 # if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
 # pragma warn -8008 // Condition always true/false.

Modified: branches/proto/v4/boost/iostreams/detail/is_iterator_range.hpp
==============================================================================
--- branches/proto/v4/boost/iostreams/detail/is_iterator_range.hpp (original)
+++ branches/proto/v4/boost/iostreams/detail/is_iterator_range.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -12,6 +12,9 @@
 #include <boost/detail/workaround.hpp>
 #include <boost/iostreams/detail/bool_trait_def.hpp>
 
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
 namespace boost {
 
 # if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
@@ -22,17 +25,8 @@
     
 namespace iostreams {
 
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
-# pragma warning(push)
-# pragma warning(disable:6334)
-#endif
-
 BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iterator_range, boost::iterator_range, 1)
 
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
-# pragma warning(pop)
-#endif
-
 } // End namespace iostreams.
 
 # else // # if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //-----------------------//
@@ -50,4 +44,6 @@
 
 } // End namespace boost.
 
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
 #endif // #ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED

Modified: branches/proto/v4/boost/iostreams/traits.hpp
==============================================================================
--- branches/proto/v4/boost/iostreams/traits.hpp (original)
+++ branches/proto/v4/boost/iostreams/traits.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -42,15 +42,13 @@
 #include <boost/ref.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
 namespace boost { namespace iostreams {
 
 //----------Definitions of predicates for streams and stream buffers----------//
 
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
-# pragma warning(push)
-# pragma warning(disable:6334)
-#endif
-
 #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
 
 BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::basic_istream, 2)
@@ -75,10 +73,6 @@
 
 #endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
 
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
-# pragma warning(pop)
-#endif
-
 template<typename T>
 struct is_std_io
     : mpl::or_< is_istream<T>, is_ostream<T>, is_streambuf<T> >
@@ -392,4 +386,6 @@
 
 } } // End namespaces iostreams, boost.
 
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
 #endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED

Modified: branches/proto/v4/boost/math/special_functions/next.hpp
==============================================================================
--- branches/proto/v4/boost/math/special_functions/next.hpp (original)
+++ branches/proto/v4/boost/math/special_functions/next.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -202,7 +202,7 @@
    // because we actually have fewer than tools::digits<T>()
    // significant bits in the representation:
    //
- frexp((boost::math::fpclassify(a) == FP_SUBNORMAL) ? tools::min_value<T>() : a, &expon);
+ frexp(((boost::math::fpclassify)(a) == FP_SUBNORMAL) ? tools::min_value<T>() : a, &expon);
    T upper = ldexp(T(1), expon);
    T result = 0;
    expon = tools::digits<T>() - expon;

Modified: branches/proto/v4/boost/proto/generate.hpp
==============================================================================
--- branches/proto/v4/boost/proto/generate.hpp (original)
+++ branches/proto/v4/boost/proto/generate.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -55,7 +55,7 @@
             struct by_value_generator_;
 
         #define BOOST_PROTO_DEFINE_BY_VALUE_TYPE(Z, N, Expr) \
- typename expr_traits<Expr>::args::BOOST_PP_CAT(child_ref, N)::proto_derived_expr \
+ typename uncvref<typename expr_traits<Expr>::args::BOOST_PP_CAT(child, N)>::type \
             /**/
 
         #define BOOST_PROTO_DEFINE_BY_VALUE(Z, N, expr) \

Modified: branches/proto/v4/boost/python/object_attributes.hpp
==============================================================================
--- branches/proto/v4/boost/python/object_attributes.hpp (original)
+++ branches/proto/v4/boost/python/object_attributes.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -17,6 +17,7 @@
 {
     typedef char const* key_type;
     static object get(object const& target, char const* key);
+ static object get(object const& target, object const& key);
 };
   
 struct attribute_policies : const_attribute_policies
@@ -25,6 +26,18 @@
     static void del(object const&target, char const* key);
 };
 
+struct const_objattribute_policies
+{
+ typedef object const key_type;
+ static object get(object const& target, object const& key);
+};
+
+struct objattribute_policies : const_objattribute_policies
+{
+ static object const& set(object const& target, object const& key, object const& value);
+ static void del(object const&target, object const& key);
+};
+
 //
 // implementation
 //
@@ -42,11 +55,30 @@
     return const_object_attribute(x, name);
 }
 
+template <class U>
+inline object_objattribute object_operators<U>::attr(object const& name)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_objattribute(x, name);
+}
+
+template <class U>
+inline const_object_objattribute object_operators<U>::attr(object const& name) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_objattribute(x, name);
+}
+
 inline object const_attribute_policies::get(object const& target, char const* key)
 {
     return python::getattr(target, key);
 }
 
+inline object const_objattribute_policies::get(object const& target, object const& key)
+{
+ return python::getattr(target, key);
+}
+
 inline object const& attribute_policies::set(
     object const& target
     , char const* key
@@ -56,6 +88,15 @@
     return value;
 }
 
+inline object const& objattribute_policies::set(
+ object const& target
+ , object const& key
+ , object const& value)
+{
+ python::setattr(target, key, value);
+ return value;
+}
+
 inline void attribute_policies::del(
     object const& target
     , char const* key)
@@ -63,6 +104,13 @@
     python::delattr(target, key);
 }
 
+inline void objattribute_policies::del(
+ object const& target
+ , object const& key)
+{
+ python::delattr(target, key);
+}
+
 }}} // namespace boost::python::api
 
 #endif // OBJECT_ATTRIBUTES_DWA2002615_HPP

Modified: branches/proto/v4/boost/python/object_core.hpp
==============================================================================
--- branches/proto/v4/boost/python/object_core.hpp (original)
+++ branches/proto/v4/boost/python/object_core.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -59,6 +59,8 @@
   
   struct const_attribute_policies;
   struct attribute_policies;
+ struct const_objattribute_policies;
+ struct objattribute_policies;
   struct const_item_policies;
   struct item_policies;
   struct const_slice_policies;
@@ -67,6 +69,8 @@
 
   typedef proxy<const_attribute_policies> const_object_attribute;
   typedef proxy<attribute_policies> object_attribute;
+ typedef proxy<const_objattribute_policies> const_object_objattribute;
+ typedef proxy<objattribute_policies> object_objattribute;
   typedef proxy<const_item_policies> const_object_item;
   typedef proxy<item_policies> object_item;
   typedef proxy<const_slice_policies> const_object_slice;
@@ -108,6 +112,8 @@
       //
       const_object_attribute attr(char const*) const;
       object_attribute attr(char const*);
+ const_object_objattribute attr(object const&) const;
+ object_objattribute attr(object const&);
 
       // item access
       //

Modified: branches/proto/v4/boost/thread/barrier.hpp
==============================================================================
--- branches/proto/v4/boost/thread/barrier.hpp (original)
+++ branches/proto/v4/boost/thread/barrier.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2002-2003
 // David Moore, William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // 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)
@@ -15,6 +15,8 @@
 #include <string>
 #include <stdexcept>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
 
@@ -56,4 +58,6 @@
 
 } // namespace boost
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/detail/move.hpp
==============================================================================
--- branches/proto/v4/boost/thread/detail/move.hpp (original)
+++ branches/proto/v4/boost/thread/detail/move.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,7 +1,7 @@
 // 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)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
 #ifndef BOOST_THREAD_MOVE_HPP
 #define BOOST_THREAD_MOVE_HPP
@@ -9,6 +9,8 @@
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -49,5 +51,6 @@
     
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/detail/thread.hpp
==============================================================================
--- branches/proto/v4/boost/thread/detail/thread.hpp (original)
+++ branches/proto/v4/boost/thread/detail/thread.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -21,6 +21,8 @@
 #include <stdlib.h>
 #include <memory>
 
+#include <boost/config/abi_prefix.hpp>
+
 #ifdef BOOST_MSVC
 #pragma warning(push)
 #pragma warning(disable:4251)
@@ -28,20 +30,13 @@
 
 namespace boost
 {
- class BOOST_THREAD_DECL thread
+ namespace detail
     {
- private:
- thread(thread&);
- thread& operator=(thread&);
-
- void release_handle();
-
         template<typename F>
- struct thread_data:
- detail::thread_data_base
+ class thread_data:
+ public detail::thread_data_base
         {
- F f;
-
+ public:
 #ifdef BOOST_HAS_RVALUE_REFS
             thread_data(F&& f_):
                 f(static_cast<F&&>(f_))
@@ -59,9 +54,59 @@
                 f();
             }
         private:
+ F f;
+
+ void operator=(thread_data&);
+ thread_data(thread_data&);
+ };
+
+ template<typename F>
+ class thread_data<boost::reference_wrapper<F> >:
+ public detail::thread_data_base
+ {
+ private:
+ F& f;
+
+ void operator=(thread_data&);
+ thread_data(thread_data&);
+ public:
+ thread_data(boost::reference_wrapper<F> f_):
+ f(f_)
+ {}
+
+ void run()
+ {
+ f();
+ }
+ };
+
+ template<typename F>
+ class thread_data<const boost::reference_wrapper<F> >:
+ public detail::thread_data_base
+ {
+ private:
+ F& f;
             void operator=(thread_data&);
             thread_data(thread_data&);
+ public:
+ thread_data(const boost::reference_wrapper<F> f_):
+ f(f_)
+ {}
+
+ void run()
+ {
+ f();
+ }
         };
+ }
+
+ class BOOST_THREAD_DECL thread
+ {
+ private:
+ thread(thread&);
+ thread& operator=(thread&);
+
+ void release_handle();
         
         mutable boost::mutex thread_info_mutex;
         detail::thread_data_ptr thread_info;
@@ -76,18 +121,18 @@
         template<typename F>
         static inline detail::thread_data_ptr make_thread_info(F&& f)
         {
- return detail::thread_data_ptr(detail::heap_new<thread_data<F> >(static_cast<F&&>(f)));
+ return detail::thread_data_ptr(detail::heap_new<detail::thread_data<F> >(static_cast<F&&>(f)));
         }
 #else
         template<typename F>
         static inline detail::thread_data_ptr make_thread_info(F f)
         {
- return detail::thread_data_ptr(detail::heap_new<thread_data<F> >(f));
+ return detail::thread_data_ptr(detail::heap_new<detail::thread_data<F> >(f));
         }
         template<typename F>
         static inline detail::thread_data_ptr make_thread_info(boost::detail::thread_move_t<F> f)
         {
- return detail::thread_data_ptr(detail::heap_new<thread_data<F> >(f));
+ return detail::thread_data_ptr(detail::heap_new<detail::thread_data<F> >(f));
         }
 #endif
     public:
@@ -278,39 +323,6 @@
     }
 #endif
 
- template<typename F>
- struct thread::thread_data<boost::reference_wrapper<F> >:
- detail::thread_data_base
- {
- F& f;
-
- thread_data(boost::reference_wrapper<F> f_):
- f(f_)
- {}
-
- void run()
- {
- f();
- }
- };
-
- template<typename F>
- struct thread::thread_data<const boost::reference_wrapper<F> >:
- detail::thread_data_base
- {
- F& f;
-
- thread_data(const boost::reference_wrapper<F> f_):
- f(f_)
- {}
-
- void run()
- {
- f();
- }
- };
-
-
     namespace this_thread
     {
         class BOOST_THREAD_DECL disable_interruption
@@ -536,4 +548,6 @@
 #pragma warning(pop)
 #endif
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/detail/tss_hooks.hpp
==============================================================================
--- branches/proto/v4/boost/thread/detail/tss_hooks.hpp (original)
+++ branches/proto/v4/boost/thread/detail/tss_hooks.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -8,6 +8,8 @@
 
 #include <boost/thread/detail/config.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 #if defined(BOOST_HAS_WINTHREADS)
 
     typedef void (__cdecl *thread_exit_handler)(void);
@@ -75,4 +77,6 @@
 
 #endif //defined(BOOST_HAS_WINTHREADS)
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif //!defined(BOOST_TLS_HOOKS_HPP)

Modified: branches/proto/v4/boost/thread/exceptions.hpp
==============================================================================
--- branches/proto/v4/boost/thread/exceptions.hpp (original)
+++ branches/proto/v4/boost/thread/exceptions.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // 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)
@@ -19,6 +19,8 @@
 #include <string>
 #include <stdexcept>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
 
@@ -103,6 +105,8 @@
 
 } // namespace boost
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif // BOOST_THREAD_CONFIG_PDM070801_H
 
 // Change log:

Modified: branches/proto/v4/boost/thread/locks.hpp
==============================================================================
--- branches/proto/v4/boost/thread/locks.hpp (original)
+++ branches/proto/v4/boost/thread/locks.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -8,10 +8,77 @@
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/detail/move.hpp>
 #include <algorithm>
+#include <iterator>
 #include <boost/thread/thread_time.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/config/abi_prefix.hpp>
 
 namespace boost
 {
+ namespace detail
+ {
+ template<typename T>
+ struct has_member_lock
+ {
+ typedef char true_type;
+ struct false_type
+ {
+ true_type dummy[2];
+ };
+
+ template<typename U>
+ static true_type has_member(U*,void (U::*dummy)()=&U::lock);
+ static false_type has_member(void*);
+
+ BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_lock<T>::has_member((T*)NULL))==sizeof(true_type));
+ };
+
+ template<typename T>
+ struct has_member_unlock
+ {
+ typedef char true_type;
+ struct false_type
+ {
+ true_type dummy[2];
+ };
+
+ template<typename U>
+ static true_type has_member(U*,void (U::*dummy)()=&U::unlock);
+ static false_type has_member(void*);
+
+ BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_unlock<T>::has_member((T*)NULL))==sizeof(true_type));
+ };
+
+ template<typename T>
+ struct has_member_try_lock
+ {
+ typedef char true_type;
+ struct false_type
+ {
+ true_type dummy[2];
+ };
+
+ template<typename U>
+ static true_type has_member(U*,bool (U::*dummy)()=&U::try_lock);
+ static false_type has_member(void*);
+
+ BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_try_lock<T>::has_member((T*)NULL))==sizeof(true_type));
+ };
+
+ }
+
+
+ template<typename T>
+ struct is_mutex_type
+ {
+ BOOST_STATIC_CONSTANT(bool, value = detail::has_member_lock<T>::value &&
+ detail::has_member_unlock<T>::value &&
+ detail::has_member_try_lock<T>::value);
+
+ };
+
+
     struct defer_lock_t
     {};
     struct try_to_lock_t
@@ -621,13 +688,30 @@
                 base::swap(*other);
             }
 
- using base::lock;
- using base::try_lock;
- using base::unlock;
- using base::owns_lock;
- using base::mutex;
- using base::release;
-
+ void lock()
+ {
+ base::lock();
+ }
+ bool try_lock()
+ {
+ return base::try_lock();
+ }
+ void unlock()
+ {
+ base::unlock();
+ }
+ bool owns_lock() const
+ {
+ return base::owns_lock();
+ }
+ Mutex* mutex() const
+ {
+ return base::mutex();
+ }
+ Mutex* release()
+ {
+ return base::release();
+ }
             bool operator!() const
             {
                 return !this->owns_lock();
@@ -764,7 +848,7 @@
     }
 
     template<typename MutexType1,typename MutexType2>
- void lock(MutexType1& m1,MutexType2& m2)
+ typename enable_if<is_mutex_type<MutexType1>, void>::type lock(MutexType1& m1,MutexType2& m2)
     {
         unsigned const lock_count=2;
         unsigned lock_first=0;
@@ -898,6 +982,142 @@
             }
         }
     }
+
+ template<typename MutexType1,typename MutexType2>
+ typename enable_if<is_mutex_type<MutexType1>, int>::type try_lock(MutexType1& m1,MutexType2& m2)
+ {
+ return ((int)detail::try_lock_internal(m1,m2))-1;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3>
+ int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3)
+ {
+ return ((int)detail::try_lock_internal(m1,m2,m3))-1;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,typename MutexType4>
+ int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,MutexType4& m4)
+ {
+ return ((int)detail::try_lock_internal(m1,m2,m3,m4))-1;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,typename MutexType4,typename MutexType5>
+ int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,MutexType4& m4,MutexType5& m5)
+ {
+ return ((int)detail::try_lock_internal(m1,m2,m3,m4,m5))-1;
+ }
+
+
+ template<typename Iterator>
+ typename disable_if<is_mutex_type<Iterator>, void>::type lock(Iterator begin,Iterator end);
+
+ namespace detail
+ {
+ template<typename Iterator>
+ struct range_lock_guard
+ {
+ Iterator begin;
+ Iterator end;
+
+ range_lock_guard(Iterator begin_,Iterator end_):
+ begin(begin_),end(end_)
+ {
+ lock(begin,end);
+ }
+
+ void release()
+ {
+ begin=end;
+ }
+
+ ~range_lock_guard()
+ {
+ for(;begin!=end;++begin)
+ {
+ begin->unlock();
+ }
+ }
+ };
+ }
+
+ template<typename Iterator>
+ typename disable_if<is_mutex_type<Iterator>, Iterator>::type try_lock(Iterator begin,Iterator end)
+ {
+ if(begin==end)
+ {
+ return end;
+ }
+ typedef typename std::iterator_traits<Iterator>::value_type lock_type;
+ unique_lock<lock_type> guard(*begin,try_to_lock);
+
+ if(!guard.owns_lock())
+ {
+ return begin;
+ }
+ Iterator const failed=try_lock(++begin,end);
+ if(failed==end)
+ {
+ guard.release();
+ }
+
+ return failed;
+ }
+
+ template<typename Iterator>
+ typename disable_if<is_mutex_type<Iterator>, void>::type lock(Iterator begin,Iterator end)
+ {
+ typedef typename std::iterator_traits<Iterator>::value_type lock_type;
+
+ if(begin==end)
+ {
+ return;
+ }
+ bool start_with_begin=true;
+ Iterator second=begin;
+ ++second;
+ Iterator next=second;
+
+ for(;;)
+ {
+ unique_lock<lock_type> begin_lock(*begin,defer_lock);
+ if(start_with_begin)
+ {
+ begin_lock.lock();
+ Iterator const failed_lock=try_lock(next,end);
+ if(failed_lock==end)
+ {
+ begin_lock.release();
+ return;
+ }
+ start_with_begin=false;
+ next=failed_lock;
+ }
+ else
+ {
+ detail::range_lock_guard<Iterator> guard(next,end);
+ if(begin_lock.try_lock())
+ {
+ Iterator const failed_lock=try_lock(second,next);
+ if(failed_lock==next)
+ {
+ begin_lock.release();
+ guard.release();
+ return;
+ }
+ start_with_begin=false;
+ next=failed_lock;
+ }
+ else
+ {
+ start_with_begin=true;
+ next=second;
+ }
+ }
+ }
+ }
+
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/once.hpp
==============================================================================
--- branches/proto/v4/boost/thread/once.hpp (original)
+++ branches/proto/v4/boost/thread/once.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -18,6 +18,8 @@
 #error "Boost threads unavailable on this platform"
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     inline void call_once(void (*func)(),once_flag& flag)
@@ -26,4 +28,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/pthread/condition_variable.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/condition_variable.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/condition_variable.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,32 +3,17 @@
 // 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)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
-#include <limits.h>
-#include <boost/assert.hpp>
-#include <algorithm>
-#include <pthread.h>
 #include "timespec.hpp"
 #include "pthread_mutex_scoped_lock.hpp"
 #include "thread_data.hpp"
 #include "condition_variable_fwd.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
- inline condition_variable::condition_variable()
- {
- int const res=pthread_cond_init(&cond,NULL);
- if(res)
- {
- throw thread_resource_error();
- }
- }
- inline condition_variable::~condition_variable()
- {
- BOOST_VERIFY(!pthread_cond_destroy(&cond));
- }
-
     inline void condition_variable::wait(unique_lock<mutex>& m)
     {
         detail::interruption_checker check_for_interruption(&cond);
@@ -175,4 +160,6 @@
 
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/pthread/condition_variable_fwd.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/condition_variable_fwd.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/condition_variable_fwd.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,14 +3,17 @@
 // 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)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
+#include <boost/assert.hpp>
 #include <pthread.h>
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/locks.hpp>
 #include <boost/thread/thread_time.hpp>
 #include <boost/thread/xtime.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class condition_variable
@@ -22,8 +25,18 @@
         condition_variable& operator=(condition_variable&);
 
     public:
- condition_variable();
- ~condition_variable();
+ condition_variable()
+ {
+ int const res=pthread_cond_init(&cond,NULL);
+ if(res)
+ {
+ throw thread_resource_error();
+ }
+ }
+ ~condition_variable()
+ {
+ BOOST_VERIFY(!pthread_cond_destroy(&cond));
+ }
 
         void wait(unique_lock<mutex>& m);
 
@@ -69,4 +82,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/pthread/mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/mutex.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_THREAD_PTHREAD_MUTEX_HPP
 #define BOOST_THREAD_PTHREAD_MUTEX_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 // 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)
@@ -24,6 +24,8 @@
 #endif
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class mutex:
@@ -200,5 +202,7 @@
 
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 
 #endif

Modified: branches/proto/v4/boost/thread/pthread/once.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/once.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/once.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,7 +3,7 @@
 
 // once.hpp
 //
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -17,7 +17,10 @@
 #include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp>
 #include <boost/cstdint.hpp>
 
-namespace boost {
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
 
     struct once_flag
     {
@@ -82,4 +85,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/pthread/pthread_mutex_scoped_lock.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/pthread_mutex_scoped_lock.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/pthread_mutex_scoped_lock.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
 #define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -9,6 +9,8 @@
 #include <pthread.h>
 #include <boost/assert.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace pthread
@@ -47,4 +49,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/pthread/recursive_mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/recursive_mutex.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/recursive_mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_THREAD_PTHREAD_RECURSIVE_MUTEX_HPP
 #define BOOST_THREAD_PTHREAD_RECURSIVE_MUTEX_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 // 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)
@@ -25,6 +25,8 @@
 #endif
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class recursive_mutex:
@@ -259,5 +261,6 @@
 
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/pthread/shared_mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/shared_mutex.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/shared_mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP
 #define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP
 
-// (C) Copyright 2006-7 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,8 @@
 #include <boost/thread/thread.hpp>
 #include <boost/thread/condition_variable.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class shared_mutex
@@ -296,5 +298,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/pthread/thread_data.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/thread_data.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/thread_data.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -14,6 +14,8 @@
 #include <pthread.h>
 #include "condition_variable_fwd.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class thread;
@@ -111,5 +113,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/pthread/thread_heap_alloc.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/thread_heap_alloc.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/thread_heap_alloc.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -5,6 +5,8 @@
 #ifndef THREAD_HEAP_ALLOC_PTHREAD_HPP
 #define THREAD_HEAP_ALLOC_PTHREAD_HPP
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -235,5 +237,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/pthread/timespec.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/timespec.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/timespec.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_THREAD_PTHREAD_TIMESPEC_HPP
 #define BOOST_THREAD_PTHREAD_TIMESPEC_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -8,6 +8,12 @@
 
 #include <boost/thread/thread_time.hpp>
 #include <boost/date_time/posix_time/conversion.hpp>
+#include <pthread.h>
+#ifndef _WIN32
+#include <unistd.h>
+#endif
+
+#include <boost/config/abi_prefix.hpp>
 
 namespace boost
 {
@@ -25,4 +31,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/pthread/tss.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/tss.hpp (original)
+++ branches/proto/v4/boost/thread/pthread/tss.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -4,11 +4,13 @@
 // 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)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
 #include <boost/thread/detail/config.hpp>
 #include <boost/shared_ptr.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -100,4 +102,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/thread_time.hpp
==============================================================================
--- branches/proto/v4/boost/thread/thread_time.hpp (original)
+++ branches/proto/v4/boost/thread/thread_time.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -9,6 +9,8 @@
 #include <boost/date_time/microsec_time_clock.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     typedef boost::posix_time::ptime system_time;
@@ -43,4 +45,6 @@
     
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/win32/basic_recursive_mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/basic_recursive_mutex.hpp (original)
+++ branches/proto/v4/boost/thread/win32/basic_recursive_mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,7 +3,7 @@
 
 // basic_recursive_mutex.hpp
 //
-// (C) Copyright 2006-7 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -12,6 +12,8 @@
 #include "thread_primitives.hpp"
 #include "basic_timed_mutex.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -123,4 +125,6 @@
 
 #define BOOST_BASIC_RECURSIVE_MUTEX_INITIALIZER {0}
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/win32/basic_timed_mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/basic_timed_mutex.hpp (original)
+++ branches/proto/v4/boost/thread/win32/basic_timed_mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,7 +3,7 @@
 
 // basic_timed_mutex_win32.hpp
 //
-// (C) Copyright 2006 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -15,6 +15,8 @@
 #include <boost/thread/thread_time.hpp>
 #include <boost/detail/interlocked.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -175,4 +177,6 @@
 
 #define BOOST_BASIC_TIMED_MUTEX_INITIALIZER {0}
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/win32/condition_variable.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/condition_variable.hpp (original)
+++ branches/proto/v4/boost/thread/win32/condition_variable.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,7 +3,7 @@
 // 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)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
 #include <boost/thread/mutex.hpp>
 #include "thread_primitives.hpp"
@@ -17,6 +17,8 @@
 #include <vector>
 #include <boost/intrusive_ptr.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -372,4 +374,6 @@
 
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/win32/interlocked_read.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/interlocked_read.hpp (original)
+++ branches/proto/v4/boost/thread/win32/interlocked_read.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,12 +3,16 @@
 
 // interlocked_read_win32.hpp
 //
-// (C) Copyright 2005-7 Anthony Williams
+// (C) Copyright 2005-8 Anthony Williams
 //
 // 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)
 
+#include <boost/detail/interlocked.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
 #ifdef BOOST_MSVC
 
 extern "C" void _ReadWriteBarrier(void);
@@ -46,8 +50,6 @@
 
 #else
 
-#include <boost/detail/interlocked.hpp>
-
 namespace boost
 {
     namespace detail
@@ -73,5 +75,6 @@
 
 #endif
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/win32/mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/mutex.hpp (original)
+++ branches/proto/v4/boost/thread/win32/mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -10,6 +10,8 @@
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/locks.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -58,4 +60,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/win32/once.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/once.hpp (original)
+++ branches/proto/v4/boost/thread/win32/once.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -18,6 +18,8 @@
 #include <boost/thread/win32/thread_primitives.hpp>
 #include <boost/thread/win32/interlocked_read.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 #ifdef BOOST_NO_STDC_NAMESPACE
 namespace std
 {
@@ -129,4 +131,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/proto/v4/boost/thread/win32/recursive_mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/recursive_mutex.hpp (original)
+++ branches/proto/v4/boost/thread/win32/recursive_mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -15,6 +15,8 @@
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/locks.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class recursive_mutex:
@@ -57,5 +59,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/win32/shared_mutex.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/shared_mutex.hpp (original)
+++ branches/proto/v4/boost/thread/win32/shared_mutex.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -15,6 +15,8 @@
 #include <boost/utility.hpp>
 #include <boost/thread/thread_time.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class shared_mutex:
@@ -632,5 +634,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/win32/thread_data.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/thread_data.hpp (original)
+++ branches/proto/v4/boost/thread/win32/thread_data.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -11,6 +11,8 @@
 #include "thread_primitives.hpp"
 #include "thread_heap_alloc.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -171,5 +173,6 @@
     
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/win32/thread_heap_alloc.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/thread_heap_alloc.hpp (original)
+++ branches/proto/v4/boost/thread/win32/thread_heap_alloc.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -49,6 +49,8 @@
 
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -389,5 +391,7 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 
 #endif

Modified: branches/proto/v4/boost/thread/win32/thread_primitives.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/thread_primitives.hpp (original)
+++ branches/proto/v4/boost/thread/win32/thread_primitives.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -18,6 +18,7 @@
 
 #if defined( BOOST_USE_WINDOWS_H )
 # include <windows.h>
+
 namespace boost
 {
     namespace detail
@@ -147,6 +148,8 @@
 # error "Win32 functions not available"
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -391,5 +394,6 @@
 }
 #endif
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/win32/tss.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/tss.hpp (original)
+++ branches/proto/v4/boost/thread/win32/tss.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -3,11 +3,13 @@
 // 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)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
 #include <boost/shared_ptr.hpp>
 #include "thread_heap_alloc.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -99,5 +101,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/proto/v4/boost/thread/xtime.hpp
==============================================================================
--- branches/proto/v4/boost/thread/xtime.hpp (original)
+++ branches/proto/v4/boost/thread/xtime.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // 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)
@@ -14,6 +14,8 @@
 #include <boost/thread/thread_time.hpp>
 #include <boost/date_time/posix_time/conversion.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost {
 
 enum xtime_clock_types
@@ -85,4 +87,6 @@
 
 } // namespace boost
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif //BOOST_XTIME_WEK070601_HPP

Modified: branches/proto/v4/libs/iostreams/doc/bibliography.html
==============================================================================
--- branches/proto/v4/libs/iostreams/doc/bibliography.html (original)
+++ branches/proto/v4/libs/iostreams/doc/bibliography.html 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -69,6 +69,10 @@
     <TD>Henderson, C. <I>Boost Memory Mapped File</I>.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A> Available in the Boost Sandbox.</TD>
 </TR>
 <TR>
+ <TH ALIGN="left" VALIGN="top"><A NAME="iso">[I<SPAN STYLE="font-size:80%">EEE</SPAN>]</A></TD><TD WIDTH="1em"></TH>
+ <TD><I>I<SPAN STYLE="font-size:80%">EEE</SPAN> Std 1003.1, 2004 Edition</I>, Shells &amp; Utilities volume. <I>See</I> http://www.opengroup.org/onlinepubs/009695399/utilities/grep.html.</TD></TD>
+</TR>
+<TR>
     <TH ALIGN="left" VALIGN="top"><A NAME="iso">[I<SPAN STYLE="font-size:80%">SO</SPAN>]</A></TD><TD WIDTH="1em"></TH>
     <TD><I>I<SPAN STYLE="font-size:80%">SO</SPAN>/I<SPAN STYLE="font-size:80%">EC</SPAN> 14882:1998(E) Programming Language C++, 2nd ed.</I>. I<SPAN STYLE="font-size:80%">SO</SPAN>/I<SPAN STYLE="font-size:80%">EC</SPAN>, 2003.
 </TR>

Modified: branches/proto/v4/libs/iostreams/doc/classes/regex_filter.html
==============================================================================
--- branches/proto/v4/libs/iostreams/doc/classes/regex_filter.html (original)
+++ branches/proto/v4/libs/iostreams/doc/classes/regex_filter.html 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -30,10 +30,10 @@
     The class template <CODE>basic_regex_filter</CODE> performs text substitutions using regular expressions from the Boost Regular Expression Library (<A CLASS="bib_ref" HREF="../bibliography.html#maddock">[Maddock]</A>).
 </P>
 <P>
- Each <CODE>basic_regex_filter</CODE> stores a regular expression and a formatting function. As unfiltered data is scanned for matches, portions of data which fall between regular expression matches are forwarded unchanged. Each time a match is found, the corresponding match_results object is passed to the formatting function and the return value is forwarded in place of the matched text.
+ Each <CODE>basic_regex_filter</CODE> stores a regular expression and a formatting function. As unfiltered data is scanned for matches, portions of data which fall between regular expression matches are forwarded unchanged. Each time a match is found, the corresponding match_results object is passed to the formatting function and the return value is forwarded in place of the matched text.
 </P>
 <P>
- Users may construct instances of <CODE>basic_regex_filter</CODE> either from formatting functions or from format strings.
+ Users may construct instances of <CODE>basic_regex_filter</CODE> either from formatting functions or from format strings.
 </P>
 <P>
     Since a regular expression may need to look arbitrarily far ahead in a character sequence, <CODE>basic_regex_filter</CODE> derives from aggregate_filter and processes an entire sequence of data at once.
@@ -50,7 +50,7 @@
 <H2>Installation</H2>
 
 <P>
- The template <CODE>basic_regex_filter</CODE> uses the Boost Regular Expression Library, which must be built separately. See here for details.
+ The template <CODE>basic_regex_filter</CODE> uses the Boost Regular Expression Library, which must be built separately. See here for details.
 </P>
 
 <A NAME="reference"></A>
@@ -109,7 +109,7 @@
     </TR>
     <TR>
         <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>The regular expression traits type</TD>
+ <TD>The regular expression traits type</TD>
     </TR>
     <TR>
         <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
@@ -164,7 +164,7 @@
     </TR>
     <TR>
         <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>Used to construct a regex_iterator</TD>
+ <TD>Used to construct a regex_iterator</TD>
     </TR>
 </TABLE>
 
@@ -189,15 +189,15 @@
     </TR>
     <TR>
         <TD VALIGN="top"><I>fmt</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>A format string which specifies the replacement text for each regular expression match, using match_results::format</TD>
+ <TD>A format string which specifies the replacement text for each regular expression match, using match_results::format</TD>
     </TR>
     <TR>
         <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>Used to construct a regex_iterator</TD>
+ <TD>Used to construct a regex_iterator</TD>
     </TR>
     <TR>
         <TD VALIGN="top"><I>fmt_flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>The flags argument to match_results::format</TD>
+ <TD>The flags argument to match_results::format</TD>
     </TR>
 </TABLE>
 
@@ -220,15 +220,15 @@
     </TR>
     <TR>
         <TD VALIGN="top"><I>fmt</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>A format string which specifies the replacement text for each regular expression match, using match_results::format</TD>
+ <TD>A format string which specifies the replacement text for each regular expression match, using match_results::format</TD>
     </TR>
     <TR>
         <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>Used to construct a regex_iterator</TD>
+ <TD>Used to construct a regex_iterator</TD>
     </TR>
     <TR>
         <TD VALIGN="top"><I>fmt_flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
- <TD>The flags argument to match_results::format</TD>
+ <TD>The flags argument to match_results::format</TD>
     </TR>
 </TABLE>
 

Modified: branches/proto/v4/libs/iostreams/doc/menu.html
==============================================================================
--- branches/proto/v4/libs/iostreams/doc/menu.html (original)
+++ branches/proto/v4/libs/iostreams/doc/menu.html 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -121,6 +121,7 @@
                                   .add("<CODE>basic_file</CODE>", "classes/file.html#file").parent()
                                   .add("<CODE>basic_file_sink</CODE>", "classes/file.html#file_sink").parent()
                                   .add("<CODE>basic_file_source</CODE>", "classes/file.html#file_source").parent()
+ .add("<CODE>basic_grep_filter</CODE>", "classes/grep_filter.html").parent()
                                   .add("<CODE>basic_gzip_compressor</CODE>", "classes/gzip.html#basic_gzip_compressor").parent()
                                   .add("<CODE>basic_gzip_decompressor</CODE>", "classes/gzip.html#basic_gzip_decompressor").parent()
                                   .add("<CODE>basic_line_filter</CODE>", "classes/line_filter.html").parent()
@@ -159,6 +160,8 @@
                                   .add("<CODE>filtering_streambuf</CODE>", "classes/filtering_streambuf.html").parent()
                                   .add("<CODE>filter</CODE>", "classes/filter.html").parent().parent()
             .add("G", "classes/classes.html#g")
+ .add("<CODE>grep_filter</CODE>", "classes/grep_filter.html").parent()
+ .add("<CODE>gzip_compressor</CODE>", "classes/gzip.html#basic_gzip_compressor").parent()
                                   .add("<CODE>gzip_compressor</CODE>", "classes/gzip.html#basic_gzip_compressor").parent()
                                   .add("<CODE>gzip_decompressor</CODE>", "classes/gzip.html#basic_gzip_decompressor").parent()
                                   .add("<CODE>gzip_error</CODE>", "classes/gzip.html#gzip_error").parent()
@@ -215,6 +218,7 @@
                                   .add("<CODE>wfile_sink</CODE>", "classes/file.html#file_sink").parent()
                                   .add("<CODE>wfile_source</CODE>", "classes/file.html#file_source").parent()
                                   .add("<CODE>wfilter</CODE>", "classes/filter.html").parent()
+ .add("<CODE>wgrep_filter</CODE>", "classes/grep_filter.html").parent()
                                   .add("<CODE>wline_filter</CODE>", "classes/line_filter.html#reference").parent()
                                   .add("<CODE>wnull_sink</CODE>", "classes/null.html#null_sink").parent()
                                   .add("<CODE>wnull_source</CODE>", "classes/null.html#null_source").parent()

Modified: branches/proto/v4/libs/iostreams/doc/quick_reference.html
==============================================================================
--- branches/proto/v4/libs/iostreams/doc/quick_reference.html (original)
+++ branches/proto/v4/libs/iostreams/doc/quick_reference.html 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -218,7 +218,7 @@
 <!-- -------------- Text -------------- -->
 
 <TR>
- <TH ROWSPAN=4>Text</TH>
+ <TH ROWSPAN=5>Text</TH>
     <TD>
         <A HREF="classes/counter.html"><CODE>basic_counter</CODE></A>
     </TD>
@@ -238,6 +238,15 @@
 </TR>
 <TR>
     <TD>
+ basic_grep_filter
+ </TD>
+ <TD>grep.hpp</TD>
+ <TD>
+ Filters character sequences line by line using regular expressions from the Boost Regular Expression Library.
+ </TD>
+</TR>
+<TR>
+ <TD>
         <A HREF="classes/newline_filter.html#newline_checker"><CODE>newline_checker</CODE></A>
     </TD>
     <TD ROWSPAN=2>newline.hpp</TD>

Modified: branches/proto/v4/libs/math/doc/complex/complex-tr1.qbk
==============================================================================
--- branches/proto/v4/libs/math/doc/complex/complex-tr1.qbk (original)
+++ branches/proto/v4/libs/math/doc/complex/complex-tr1.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -21,7 +21,7 @@
 [template tr1[] [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf Technical Report on C++ Library Extensions]]
 
 This manual is also available in
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/complex-tr1.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/complex-tr1.pdf
 printer friendly PDF format].
 
 [section:inverse_complex Complex Number Inverse Trigonometric Functions]

Modified: branches/proto/v4/libs/math/doc/gcd/math-gcd.qbk
==============================================================================
--- branches/proto/v4/libs/math/doc/gcd/math-gcd.qbk (original)
+++ branches/proto/v4/libs/math/doc/gcd/math-gcd.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -12,7 +12,7 @@
 ]
 
 This manual is also available in
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/math-gcd.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/math-gcd.pdf
 printer friendly PDF format].
 
 

Modified: branches/proto/v4/libs/math/doc/math.qbk
==============================================================================
--- branches/proto/v4/libs/math/doc/math.qbk (original)
+++ branches/proto/v4/libs/math/doc/math.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -36,7 +36,7 @@
    
    [@../complex/html/index.html HTML Docs]
    
- [@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/complex-tr1.pdf
+ [@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/complex-tr1.pdf
    PDF Docs]]
    [
 These complex number algorithms are the inverses of trigonometric functions currently
@@ -48,7 +48,7 @@
    
    [@../gcd/html/index.html HTML Docs]
    
- [@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/math-gcd.pdf
+ [@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/math-gcd.pdf
    PDF Docs]]
    [
 The class and function templates in <boost/math/common_factor.hpp>
@@ -62,7 +62,7 @@
 
 [@../octonion/html/index.html HTML Docs]
 
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/octonion.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/octonion.pdf
 PDF Docs]]
    [
 Octonions, like [@../quaternion/html/index.html quaternions], are a relative of complex numbers.
@@ -97,7 +97,7 @@
 
 [@../sf_and_dist/html/index.html HTML Docs]
 
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/math.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/math.pdf
 PDF Docs]]
 
    [ Provides a number of high quality special functions, initially
@@ -122,7 +122,7 @@
 
 [@../sf_and_dist/html/index.html HTML Docs]
 
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/math.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/math.pdf
 PDF Docs]]
 
    [Provides a reasonably comprehensive set of statistical distributions,
@@ -139,7 +139,7 @@
 
 [@../quaternion/html/index.html HTML Docs]
 
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/quaternion.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/quaternion.pdf
 PDF Docs]]
 
    [

Modified: branches/proto/v4/libs/math/doc/octonion/math-octonion.qbk
==============================================================================
--- branches/proto/v4/libs/math/doc/octonion/math-octonion.qbk (original)
+++ branches/proto/v4/libs/math/doc/octonion/math-octonion.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -35,7 +35,7 @@
 [def __hypot [link boost_quaternions.math_special_functions.hypot hypot]]
 
 This manual is also available in
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/octonion.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/octonion.pdf
 printer friendly PDF format].
 
 [section Octonions]

Modified: branches/proto/v4/libs/math/doc/quaternion/math-quaternion.qbk
==============================================================================
--- branches/proto/v4/libs/math/doc/quaternion/math-quaternion.qbk (original)
+++ branches/proto/v4/libs/math/doc/quaternion/math-quaternion.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -34,7 +34,7 @@
 [def __hypot [link boost_quaternions.math_special_functions.hypot hypot]]
 
 This manual is also available in
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/quaternion.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/quaternion.pdf
 printer friendly PDF format].
 
 

Modified: branches/proto/v4/libs/math/doc/sf_and_dist/math.qbk
==============================================================================
--- branches/proto/v4/libs/math/doc/sf_and_dist/math.qbk (original)
+++ branches/proto/v4/libs/math/doc/sf_and_dist/math.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -308,7 +308,7 @@
 ] [/ template discrete_quantile_warning]
 
 This manual is also available in
-[@http:svn.boost.org/svn/boost/sandbox/pdf/math/release/math.pdf
+[@http://svn.boost.org/svn/boost/sandbox/pdf/math/release/math.pdf
 printer friendly PDF format].
 
 [section:main_overview Overview]

Modified: branches/proto/v4/libs/math/test/test_tr1.cpp
==============================================================================
--- branches/proto/v4/libs/math/test/test_tr1.cpp (original)
+++ branches/proto/v4/libs/math/test/test_tr1.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -6,6 +6,7 @@
 #include <boost/test/included/test_exec_monitor.hpp>
 #include <boost/test/floating_point_comparison.hpp>
 #include <boost/math/tools/precision.hpp>
+#include <math.h> // ldexpf
 
 #ifdef TEST_STD
 #include <cmath>

Modified: branches/proto/v4/libs/python/doc/projects.html
==============================================================================
--- branches/proto/v4/libs/python/doc/projects.html (original)
+++ branches/proto/v4/libs/python/doc/projects.html 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -375,6 +375,27 @@
       application modules, including GUI and post-processing of results.</p>
     </dd>
 
+ <dt><b>PolyBoRi</b></dt>
+
+ <dd>
+ <p><a href="mailto:brickenstein_at_[hidden]"
+ >Michael Brickenstein</a> writes:</p>
+
+ <blockquote>
+ <p>The core of PolyBoRi is a C++ library, which provides
+ high-level data types for Boolean polynomials and monomials,
+ exponent vectors, as well as for the underlying polynomial
+ rings and subsets of the powerset of the Boolean variables. As
+ a unique approach, binary decision diagrams are used as
+ internal storage type for polynomial structures. On top of
+ this C++-library we provide a Python interface. This allows
+ parsing of complex polynomial systems, as well as sophisticated
+ and extendable strategies for Gr&ouml;bner basis computation.
+ Boost.Python has helped us to create this interface in a
+ very clean way.</p>
+ </blockquote>
+ </dd>
+
     <dt><b><a href="http://www.rationaldiscovery.com">Rational Discovery
     LLC</a></b></dt>
 
@@ -435,11 +456,11 @@
   </dl>
   <hr>
 
- <p>Revised
+ <p>Revised
   <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
- 15 July, 2003</p>
+ 29 May, 2008</p>
 
   <p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
- Abrahams</a> 2002-2003.</i></p>
+ Abrahams</a> 2002-2008.</i></p>
 </body>
 </html>

Modified: branches/proto/v4/libs/python/doc/v2/object.html
==============================================================================
--- branches/proto/v4/libs/python/doc/v2/object.html (original)
+++ branches/proto/v4/libs/python/doc/v2/object.html 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -74,6 +74,32 @@
             </dl>
           </dd>
 
+ <dt><a href="#const_objattribute_policies-spec">Class
+ <code>const_objattribute_policies</code></a></dt>
+
+ <dd>
+ <dl class="page-index">
+ <dt><a href="#const_objattribute_policies-spec-synopsis">Class
+ <code>const_objattribute_policies</code> synopsis</a></dt>
+
+ <dt><a href="#const_objattribute_policies-spec-statics">Class
+ <code>const_objattribute_policies</code> static functions</a></dt>
+ </dl>
+ </dd>
+
+ <dt><a href="#objattribute_policies-spec">Class
+ <code>objattribute_policies</code></a></dt>
+
+ <dd>
+ <dl class="page-index">
+ <dt><a href="#objattribute_policies-spec-synopsis">Class
+ <code>objattribute_policies</code> synopsis</a></dt>
+
+ <dt><a href="#objattribute_policies-spec-statics">Class
+ <code>objattribute_policies</code> static functions</a></dt>
+ </dl>
+ </dd>
+
           <dt><a href="#const_item_policies-spec">Class
           <code>const_item_policies</code></a></dt>
 
@@ -328,6 +354,102 @@
     <!-- end -->
     <!-- begin -->
 
+ <h3><a name="const_objattribute_policies-spec"></a>Class
+ <code>const_objattribute_policies</code></h3>
+
+ <p>The policies which are used for proxies representing an attribute
+ access to a <code>const&nbsp;object</code> when the attribute name is
+ given as a <code>const&nbsp;object</code>.</p>
+
+ <h4><a name="const_objattribute_policies-spec-synopsis"></a>Class
+ <code>const_objattribute_policies</code> synopsis</h4>
+<pre>
+namespace boost { namespace python { namespace api
+{
+ struct const_objattribute_policies
+ {
+ typedef object const& key_type;
+ static object get(object const&amp; target, object const& key);
+ };
+}}}
+</pre>
+
+ <h4><a name="const_objattribute_policies-spec-statics"></a>Class
+ <code>const_objattribute_policies</code> static functions</h4>
+<pre>
+static object get(object const&amp; target, object const& key);
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Requires:</b> <code>key</code> is an <code>object</code>
+ holding a string.</dt>
+
+ <dt><b>Effects:</b> accesses the attribute of <code>target</code> named
+ by <code>key</code>.</dt>
+
+ <dt><b>Returns:</b> An <code>object</code> managing the result of the
+ attribute access.</dt>
+
+ <dt><b>Throws:</b> <code><a href=
+ "errors.html#error_already_set-spec">error_already_set</a></code> if a
+ Python exception is raised.</dt>
+ </dl>
+
+ <h3><a name="objattribute_policies-spec"></a>Class
+ <code>objattribute_policies</code></h3>
+
+ <p>The policies which are used for proxies representing an attribute
+ access to a mutable <code>object</code> when the attribute name is
+ given as a <code>const&nbsp;object</code>.</p>
+
+ <h4><a name="objattribute_policies-spec-synopsis"></a>Class
+ <code>objattribute_policies</code> synopsis</h4>
+<pre>
+namespace boost { namespace python { namespace api
+{
+ struct objattribute_policies : const_objattribute_policies
+ {
+ static object const&amp; set(object const&amp; target, object const& key, object const&amp; value);
+ static void del(object const&amp;target, object const& key);
+ };
+}}}
+</pre>
+
+ <h4><a name="objattribute_policies-spec-statics"></a>Class
+ <code>objattribute_policies</code> static functions</h4>
+<pre>
+static object const&amp; set(object const&amp; target, object const& key, object const&amp; value);
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Requires:</b> <code>key</code> is an <code>object</code>
+ holding a string.</dt>
+
+ <dt><b>Effects:</b> sets the attribute of <code>target</code> named by
+ <code>key</code> to <code>value</code>.</dt>
+
+ <dt><b>Throws:</b> <code><a href=
+ "errors.html#error_already_set-spec">error_already_set</a></code> if a
+ Python exception is raised.</dt>
+ </dl>
+<pre>
+static void del(object const&amp;target, object const& key);
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Requires:</b> <code>key</code> is an <code>object</code>
+ holding a string.</dt>
+
+ <dt><b>Effects:</b> deletes the attribute of <code>target</code> named
+ by <code>key</code>.</dt>
+
+ <dt><b>Throws:</b> <code><a href=
+ "errors.html#error_already_set-spec">error_already_set</a></code> if a
+ Python exception is raised.</dt>
+ </dl>
+ <!-- end -->
+ <!-- begin -->
+
     <h3><a name="const_item_policies-spec"></a>Class
     <code>const_item_policies</code></h3>
 
@@ -542,6 +664,8 @@
       //
       proxy&lt;const_object_attribute&gt; attr(char const*) const;
       proxy&lt;object_attribute&gt; attr(char const*);
+ proxy&lt;const_object_objattribute&gt; attr(object const&) const;
+ proxy&lt;object_objattribute&gt; attr(object const&);
 
       // item access
       //
@@ -608,6 +732,21 @@
       <code>name</code> as its key.</dt>
     </dl>
 <pre>
+proxy&lt;const_object_objattribute&gt; attr(const object& name) const;
+proxy&lt;object_objattribute&gt; attr(const object& name);
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Requires:</b> name is a <code>object</code> holding a string.</dt>
+
+ <dt><b>Effects:</b> accesses the named attribute of
+ <code>*this</code>.</dt>
+
+ <dt><b>Returns:</b> a proxy object which binds
+ <code>object(*static_cast&lt;U*&gt;(this))</code> as its target, and
+ <code>name</code> as its key.</dt>
+ </dl>
+<pre>
 template &lt;class T&gt;
 proxy&lt;const_object_item&gt; operator[](T const&amp; key) const;
 template &lt;class T&gt;
@@ -938,11 +1077,11 @@
 </pre>
     <p>Revised
     <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
- 13 January, 2006
+ 27 May, 2008
   <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
     </p>
 
     <p><i>&copy; Copyright <a href=
- "http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2006.</i></p>
+ "http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2008.</i></p>
   </body>
 </html>

Modified: branches/proto/v4/libs/python/test/object.cpp
==============================================================================
--- branches/proto/v4/libs/python/test/object.cpp (original)
+++ branches/proto/v4/libs/python/test/object.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -38,26 +38,61 @@
     return x.attr(name);
 }
 
+object obj_objgetattr(object x, object const& name)
+{
+ return x.attr(name);
+}
+
 object obj_const_getattr(object const& x, char const* name)
 {
     return x.attr(name);
 }
 
+object obj_const_objgetattr(object const& x, object const& name)
+{
+ return x.attr(name);
+}
+
 void obj_setattr(object x, char const* name, object value)
 {
     x.attr(name) = value;
 }
 
+void obj_objsetattr(object x, object const& name, object value)
+{
+ x.attr(name) = value;
+}
+
 void obj_setattr42(object x, char const* name)
 {
     x.attr(name) = 42;
 }
 
+void obj_objsetattr42(object x, object const& name)
+{
+ x.attr(name) = 42;
+}
+
 void obj_moveattr(object& x, char const* src, char const* dst)
 {
     x.attr(dst) = x.attr(src);
 }
 
+void obj_objmoveattr(object& x, object const& src, object const& dst)
+{
+ x.attr(dst) = x.attr(src);
+}
+
+void obj_delattr(object x, char const* name)
+{
+ x.attr(name).del();
+}
+
+void obj_objdelattr(object x, object const& name)
+{
+ x.attr(name).del();
+}
+
 object obj_getitem(object x, object key)
 {
     return x[key];
@@ -108,11 +143,21 @@
     return y.attr(name);
 }
 
+bool test_objattr(object y, object& name)
+{
+ return y.attr(name);
+}
+
 bool test_not_attr(object y, char* name)
 {
     return !y.attr(name);
 }
 
+bool test_not_objattr(object y, object& name)
+{
+ return !y.attr(name);
+}
+
 bool test_item(object y, object key)
 {
     return y[key];
@@ -301,11 +346,17 @@
     def("number", number);
 
     def("obj_getattr", obj_getattr);
+ def("obj_objgetattr", obj_objgetattr);
     def("obj_const_getattr", obj_const_getattr);
+ def("obj_const_objgetattr", obj_const_objgetattr);
     def("obj_setattr", obj_setattr);
+ def("obj_objsetattr", obj_objsetattr);
     def("obj_setattr42", obj_setattr42);
+ def("obj_objsetattr42", obj_objsetattr42);
     def("obj_moveattr", obj_moveattr);
-
+ def("obj_objmoveattr", obj_objmoveattr);
+ def("obj_delattr", obj_delattr);
+ def("obj_objdelattr", obj_objdelattr);
 
     def("obj_getitem", obj_getitem);
     def("obj_getitem3", obj_getitem);
@@ -319,7 +370,9 @@
     def("test_not", test_not);
 
     def("test_attr", test_attr);
+ def("test_objattr", test_objattr);
     def("test_not_attr", test_not_attr);
+ def("test_not_objattr", test_not_objattr);
 
     def("test_item", test_item);
     def("test_not_item", test_not_item);

Modified: branches/proto/v4/libs/python/test/object.py
==============================================================================
--- branches/proto/v4/libs/python/test/object.py (original)
+++ branches/proto/v4/libs/python/test/object.py 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -34,29 +34,68 @@
>>> try: obj_getattr(x, 'foo')
 ... except AttributeError: pass
 ... else: print 'expected an exception'
+>>> try: obj_objgetattr(x, 'objfoo')
+... except AttributeError: pass
+... else: print 'expected an exception'
 
>>> obj_setattr(x, 'foo', 1)
>>> x.foo
 1
+>>> obj_objsetattr(x, 'objfoo', 1)
+>>> try:obj_objsetattr(x, 1)
+... except TypeError: pass
+... else: print 'expected an exception'
+>>> x.objfoo
+1
>>> obj_getattr(x, 'foo')
 1
+>>> obj_objgetattr(x, 'objfoo')
+1
+>>> try:obj_objgetattr(x, 1)
+... except TypeError: pass
+... else: print 'expected an exception'
>>> obj_const_getattr(x, 'foo')
 1
+>>> obj_const_objgetattr(x, 'objfoo')
+1
>>> obj_setattr42(x, 'foo')
>>> x.foo
 42
+>>> obj_objsetattr42(x, 'objfoo')
+>>> x.objfoo
+42
>>> obj_moveattr(x, 'foo', 'bar')
>>> x.bar
 42
+>>> obj_objmoveattr(x, 'objfoo', 'objbar')
+>>> x.objbar
+42
>>> test_attr(x, 'foo')
 1
+>>> test_objattr(x, 'objfoo')
+1
>>> test_not_attr(x, 'foo')
 0
+>>> test_not_objattr(x, 'objfoo')
+0
>>> x.foo = None
>>> test_attr(x, 'foo')
 0
+>>> x.objfoo = None
+>>> test_objattr(x, 'objfoo')
+0
>>> test_not_attr(x, 'foo')
 1
+>>> test_not_objattr(x, 'objfoo')
+1
+>>> obj_delattr(x, 'foo')
+>>> obj_objdelattr(x, 'objfoo')
+>>> try:obj_delattr(x, 'foo')
+... except AttributeError: pass
+... else: print 'expected an exception'
+>>> try:obj_objdelattr(x, 'objfoo')
+... except AttributeError: pass
+... else: print 'expected an exception'
 
         Items
 

Modified: branches/proto/v4/libs/system/src/error_code.cpp
==============================================================================
--- branches/proto/v4/libs/system/src/error_code.cpp (original)
+++ branches/proto/v4/libs/system/src/error_code.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -9,14 +9,7 @@
 
 //----------------------------------------------------------------------------//
 
-// VC++ 8.0 warns on usage of certain Standard Library and API functions that
-// can be cause buffer overruns or other possible security issues if misused.
-// See http://msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC/default.aspx
-// But the wording of the warning is misleading and unsettling, there are no
-// portable alternative functions, and VC++ 8.0's own libraries use the
-// functions in question. So turn off the warnings.
-#define _CRT_SECURE_NO_DEPRECATE
-#define _SCL_SECURE_NO_DEPRECATE
+#include <boost/config/warning_disable.hpp>
 
 // define BOOST_SYSTEM_SOURCE so that <boost/system/config.hpp> knows
 // the library is being built (possibly exporting rather than importing code)

Modified: branches/proto/v4/libs/thread/doc/thread.qbk
==============================================================================
--- branches/proto/v4/libs/thread/doc/thread.qbk (original)
+++ branches/proto/v4/libs/thread/doc/thread.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -147,4 +147,6 @@
 
 [include tss.qbk]
 
+[include time.qbk]
+
 [include acknowledgements.qbk]

Modified: branches/proto/v4/libs/thread/doc/thread_ref.qbk
==============================================================================
--- branches/proto/v4/libs/thread/doc/thread_ref.qbk (original)
+++ branches/proto/v4/libs/thread/doc/thread_ref.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -17,6 +17,13 @@
         some_thread.join();
     }
 
+[Note: On compilers that support rvalue references, __thread__ provides a proper move constructor and move-assignment operator, and
+therefore meets the C++0x ['MoveConstructible] and ['MoveAssignable] concepts. With such compilers, __thread__ can therefore be used
+with containers that support those concepts.
+
+For other compilers, move support is provided with a move emulation layer, so containers must explicitly detect that move emulation
+layer. See <boost/thread/detail/move.hpp> for details.]
+
 [heading Launching threads]
 
 A new thread is launched by passing an object of a callable type that can be invoked with no parameters to the constructor. The
@@ -318,7 +325,7 @@
 
 [variablelist
 
-[[Effects:] [If `*this` refers to a thread of execution, that thread of execution becomes detached, and longer has an associated __thread__ object.]]
+[[Effects:] [If `*this` refers to a thread of execution, that thread of execution becomes detached, and no longer has an associated __thread__ object.]]
 
 [[Postconditions:] [`*this` no longer refers to any thread of execution.]]
 
@@ -499,7 +506,7 @@
 
 [variablelist
 
-[[Returns:] [`true` if `*this` and `y` represent the different threads of execution, or one represents a thread of execution, and
+[[Returns:] [`true` if `*this` and `y` represent different threads of execution, or one represents a thread of execution, and
 the other represent __not_a_thread__, `false` otherwise.]]
 
 [[Throws:] [Nothing]]

Modified: branches/proto/v4/libs/thread/src/pthread/thread.cpp
==============================================================================
--- branches/proto/v4/libs/thread/src/pthread/thread.cpp (original)
+++ branches/proto/v4/libs/thread/src/pthread/thread.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // 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)
@@ -18,7 +18,7 @@
 #elif defined(__APPLE__) || defined(__FreeBSD__)
 #include <sys/types.h>
 #include <sys/sysctl.h>
-#elif defined(__sun)
+#elif defined(__sun) || defined(__CYGWIN__)
 #include <unistd.h>
 #endif
 
@@ -394,7 +394,7 @@
         int count;
         size_t size=sizeof(count);
         return sysctlbyname("hw.ncpu",&count,&size,NULL,0)?0:count;
-#elif defined(__sun)
+#elif defined(__sun) || defined(__CYGWIN__)
         int const count=sysconf(_SC_NPROCESSORS_ONLN);
         return (count>0)?count:0;
 #else

Modified: branches/proto/v4/libs/thread/test/test_generic_locks.cpp
==============================================================================
--- branches/proto/v4/libs/thread/test/test_generic_locks.cpp (original)
+++ branches/proto/v4/libs/thread/test/test_generic_locks.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -123,6 +123,370 @@
     t.join();
 }
 
+void test_lock_five_uncontended()
+{
+ boost::mutex m1,m2,m3,m4,m5;
+
+ boost::mutex::scoped_lock l1(m1,boost::defer_lock),
+ l2(m2,boost::defer_lock),
+ l3(m3,boost::defer_lock),
+ l4(m4,boost::defer_lock),
+ l5(m5,boost::defer_lock);
+
+ BOOST_CHECK(!l1.owns_lock());
+ BOOST_CHECK(!l2.owns_lock());
+ BOOST_CHECK(!l3.owns_lock());
+ BOOST_CHECK(!l4.owns_lock());
+ BOOST_CHECK(!l5.owns_lock());
+
+ boost::lock(l1,l2,l3,l4,l5);
+
+ BOOST_CHECK(l1.owns_lock());
+ BOOST_CHECK(l2.owns_lock());
+ BOOST_CHECK(l3.owns_lock());
+ BOOST_CHECK(l4.owns_lock());
+ BOOST_CHECK(l5.owns_lock());
+}
+
+void lock_five_mutexes_slowly(boost::mutex* m1,boost::mutex* m2,boost::mutex* m3,boost::mutex* m4,boost::mutex* m5,
+ wait_data* locked,wait_data* quit)
+{
+ boost::lock_guard<boost::mutex> l1(*m1);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(500));
+ boost::lock_guard<boost::mutex> l2(*m2);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(500));
+ boost::lock_guard<boost::mutex> l3(*m3);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(500));
+ boost::lock_guard<boost::mutex> l4(*m4);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(500));
+ boost::lock_guard<boost::mutex> l5(*m5);
+ locked->signal();
+ quit->wait();
+}
+
+void lock_five(boost::mutex* m1,boost::mutex* m2,boost::mutex* m3,boost::mutex* m4,boost::mutex* m5)
+{
+ boost::lock(*m1,*m2,*m3,*m4,*m5);
+ m1->unlock();
+ m2->unlock();
+ m3->unlock();
+ m4->unlock();
+ m5->unlock();
+}
+
+void test_lock_five_other_thread_locks_in_order()
+{
+ boost::mutex m1,m2,m3,m4,m5;
+ wait_data locked;
+ wait_data release;
+
+ boost::thread t(lock_five_mutexes_slowly,&m1,&m2,&m3,&m4,&m5,&locked,&release);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(10));
+
+ boost::thread t2(lock_five,&m1,&m2,&m3,&m4,&m5);
+ BOOST_CHECK(locked.timed_wait(boost::posix_time::seconds(3)));
+
+ release.signal();
+
+ BOOST_CHECK(t2.timed_join(boost::posix_time::seconds(3)));
+
+ t.join();
+}
+
+void test_lock_five_other_thread_locks_in_different_order()
+{
+ boost::mutex m1,m2,m3,m4,m5;
+ wait_data locked;
+ wait_data release;
+
+ boost::thread t(lock_five_mutexes_slowly,&m1,&m2,&m3,&m4,&m5,&locked,&release);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(10));
+
+ boost::thread t2(lock_five,&m5,&m1,&m4,&m2,&m3);
+ BOOST_CHECK(locked.timed_wait(boost::posix_time::seconds(3)));
+
+ release.signal();
+
+ BOOST_CHECK(t2.timed_join(boost::posix_time::seconds(3)));
+
+ t.join();
+}
+
+void lock_n(boost::mutex* mutexes,unsigned count)
+{
+ boost::lock(mutexes,mutexes+count);
+ for(unsigned i=0;i<count;++i)
+ {
+ mutexes[i].unlock();
+ }
+}
+
+
+void test_lock_ten_other_thread_locks_in_different_order()
+{
+ unsigned const num_mutexes=10;
+
+ boost::mutex mutexes[num_mutexes];
+ wait_data locked;
+ wait_data release;
+
+ boost::thread t(lock_five_mutexes_slowly,&mutexes[6],&mutexes[3],&mutexes[8],&mutexes[0],&mutexes[2],&locked,&release);
+ boost::this_thread::sleep(boost::posix_time::milliseconds(10));
+
+ boost::thread t2(lock_n,mutexes,num_mutexes);
+ BOOST_CHECK(locked.timed_wait(boost::posix_time::seconds(3)));
+
+ release.signal();
+
+ BOOST_CHECK(t2.timed_join(boost::posix_time::seconds(3)));
+
+ t.join();
+}
+
+struct dummy_mutex
+{
+ bool is_locked;
+
+ dummy_mutex():
+ is_locked(false)
+ {}
+
+ void lock()
+ {
+ is_locked=true;
+ }
+
+ bool try_lock()
+ {
+ if(is_locked)
+ {
+ return false;
+ }
+ is_locked=true;
+ return true;
+ }
+
+ void unlock()
+ {
+ is_locked=false;
+ }
+};
+
+
+void test_lock_five_in_range()
+{
+ unsigned const num_mutexes=5;
+ dummy_mutex mutexes[num_mutexes];
+
+ boost::lock(mutexes,mutexes+num_mutexes);
+
+ for(unsigned i=0;i<num_mutexes;++i)
+ {
+ BOOST_CHECK(mutexes[i].is_locked);
+ }
+}
+
+void test_lock_ten_in_range()
+{
+ unsigned const num_mutexes=10;
+ dummy_mutex mutexes[num_mutexes];
+
+ boost::lock(mutexes,mutexes+num_mutexes);
+
+ for(unsigned i=0;i<num_mutexes;++i)
+ {
+ BOOST_CHECK(mutexes[i].is_locked);
+ }
+}
+
+void test_try_lock_two_uncontended()
+{
+ dummy_mutex m1,m2;
+
+ int const res=boost::try_lock(m1,m2);
+
+ BOOST_CHECK(res==-1);
+ BOOST_CHECK(m1.is_locked);
+ BOOST_CHECK(m2.is_locked);
+}
+void test_try_lock_two_first_locked()
+{
+ dummy_mutex m1,m2;
+ m1.lock();
+
+ boost::unique_lock<dummy_mutex> l1(m1,boost::defer_lock),
+ l2(m2,boost::defer_lock);
+
+ int const res=boost::try_lock(l1,l2);
+
+ BOOST_CHECK(res==0);
+ BOOST_CHECK(m1.is_locked);
+ BOOST_CHECK(!m2.is_locked);
+ BOOST_CHECK(!l1.owns_lock());
+ BOOST_CHECK(!l2.owns_lock());
+}
+void test_try_lock_two_second_locked()
+{
+ dummy_mutex m1,m2;
+ m2.lock();
+
+ boost::unique_lock<dummy_mutex> l1(m1,boost::defer_lock),
+ l2(m2,boost::defer_lock);
+
+ int const res=boost::try_lock(l1,l2);
+
+ BOOST_CHECK(res==1);
+ BOOST_CHECK(!m1.is_locked);
+ BOOST_CHECK(m2.is_locked);
+ BOOST_CHECK(!l1.owns_lock());
+ BOOST_CHECK(!l2.owns_lock());
+}
+
+void test_try_lock_three()
+{
+ int const num_mutexes=3;
+
+ for(int i=-1;i<num_mutexes;++i)
+ {
+ dummy_mutex mutexes[num_mutexes];
+
+ if(i>=0)
+ {
+ mutexes[i].lock();
+ }
+ boost::unique_lock<dummy_mutex> l1(mutexes[0],boost::defer_lock),
+ l2(mutexes[1],boost::defer_lock),
+ l3(mutexes[2],boost::defer_lock);
+
+ int const res=boost::try_lock(l1,l2,l3);
+
+ BOOST_CHECK(res==i);
+ for(int j=0;j<num_mutexes;++j)
+ {
+ if((i==j) || (i==-1))
+ {
+ BOOST_CHECK(mutexes[j].is_locked);
+ }
+ else
+ {
+ BOOST_CHECK(!mutexes[j].is_locked);
+ }
+ }
+ if(i==-1)
+ {
+ BOOST_CHECK(l1.owns_lock());
+ BOOST_CHECK(l2.owns_lock());
+ BOOST_CHECK(l3.owns_lock());
+ }
+ else
+ {
+ BOOST_CHECK(!l1.owns_lock());
+ BOOST_CHECK(!l2.owns_lock());
+ BOOST_CHECK(!l3.owns_lock());
+ }
+ }
+}
+
+void test_try_lock_four()
+{
+ int const num_mutexes=4;
+
+ for(int i=-1;i<num_mutexes;++i)
+ {
+ dummy_mutex mutexes[num_mutexes];
+
+ if(i>=0)
+ {
+ mutexes[i].lock();
+ }
+ boost::unique_lock<dummy_mutex> l1(mutexes[0],boost::defer_lock),
+ l2(mutexes[1],boost::defer_lock),
+ l3(mutexes[2],boost::defer_lock),
+ l4(mutexes[3],boost::defer_lock);
+
+ int const res=boost::try_lock(l1,l2,l3,l4);
+
+ BOOST_CHECK(res==i);
+ for(int j=0;j<num_mutexes;++j)
+ {
+ if((i==j) || (i==-1))
+ {
+ BOOST_CHECK(mutexes[j].is_locked);
+ }
+ else
+ {
+ BOOST_CHECK(!mutexes[j].is_locked);
+ }
+ }
+ if(i==-1)
+ {
+ BOOST_CHECK(l1.owns_lock());
+ BOOST_CHECK(l2.owns_lock());
+ BOOST_CHECK(l3.owns_lock());
+ BOOST_CHECK(l4.owns_lock());
+ }
+ else
+ {
+ BOOST_CHECK(!l1.owns_lock());
+ BOOST_CHECK(!l2.owns_lock());
+ BOOST_CHECK(!l3.owns_lock());
+ BOOST_CHECK(!l4.owns_lock());
+ }
+ }
+}
+
+void test_try_lock_five()
+{
+ int const num_mutexes=5;
+
+ for(int i=-1;i<num_mutexes;++i)
+ {
+ dummy_mutex mutexes[num_mutexes];
+
+ if(i>=0)
+ {
+ mutexes[i].lock();
+ }
+ boost::unique_lock<dummy_mutex> l1(mutexes[0],boost::defer_lock),
+ l2(mutexes[1],boost::defer_lock),
+ l3(mutexes[2],boost::defer_lock),
+ l4(mutexes[3],boost::defer_lock),
+ l5(mutexes[4],boost::defer_lock);
+
+ int const res=boost::try_lock(l1,l2,l3,l4,l5);
+
+ BOOST_CHECK(res==i);
+ for(int j=0;j<num_mutexes;++j)
+ {
+ if((i==j) || (i==-1))
+ {
+ BOOST_CHECK(mutexes[j].is_locked);
+ }
+ else
+ {
+ BOOST_CHECK(!mutexes[j].is_locked);
+ }
+ }
+ if(i==-1)
+ {
+ BOOST_CHECK(l1.owns_lock());
+ BOOST_CHECK(l2.owns_lock());
+ BOOST_CHECK(l3.owns_lock());
+ BOOST_CHECK(l4.owns_lock());
+ BOOST_CHECK(l5.owns_lock());
+ }
+ else
+ {
+ BOOST_CHECK(!l1.owns_lock());
+ BOOST_CHECK(!l2.owns_lock());
+ BOOST_CHECK(!l3.owns_lock());
+ BOOST_CHECK(!l4.owns_lock());
+ BOOST_CHECK(!l5.owns_lock());
+ }
+ }
+}
+
+
 
 boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[])
 {
@@ -132,6 +496,18 @@
     test->add(BOOST_TEST_CASE(&test_lock_two_uncontended));
     test->add(BOOST_TEST_CASE(&test_lock_two_other_thread_locks_in_order));
     test->add(BOOST_TEST_CASE(&test_lock_two_other_thread_locks_in_opposite_order));
+ test->add(BOOST_TEST_CASE(&test_lock_five_uncontended));
+ test->add(BOOST_TEST_CASE(&test_lock_five_other_thread_locks_in_order));
+ test->add(BOOST_TEST_CASE(&test_lock_five_other_thread_locks_in_different_order));
+ test->add(BOOST_TEST_CASE(&test_lock_five_in_range));
+ test->add(BOOST_TEST_CASE(&test_lock_ten_in_range));
+ test->add(BOOST_TEST_CASE(&test_lock_ten_other_thread_locks_in_different_order));
+ test->add(BOOST_TEST_CASE(&test_try_lock_two_uncontended));
+ test->add(BOOST_TEST_CASE(&test_try_lock_two_first_locked));
+ test->add(BOOST_TEST_CASE(&test_try_lock_two_second_locked));
+ test->add(BOOST_TEST_CASE(&test_try_lock_three));
+ test->add(BOOST_TEST_CASE(&test_try_lock_four));
+ test->add(BOOST_TEST_CASE(&test_try_lock_five));
 
     return test;
 }

Modified: branches/proto/v4/libs/thread/test/test_thread_launching.cpp
==============================================================================
--- branches/proto/v4/libs/thread/test/test_thread_launching.cpp (original)
+++ branches/proto/v4/libs/thread/test/test_thread_launching.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -143,8 +143,10 @@
     {
         x.push_back(i*i);
     }
+
+ callable_multiple_arg func;
     
- boost::thread callable3(callable_multiple_arg(),"hello",x,1.2);
+ boost::thread callable3(func,"hello",x,1.2);
     callable3.join();
     BOOST_CHECK(callable_multiple_arg::called_three);
     BOOST_CHECK_EQUAL(callable_multiple_arg::called_three_arg1,"hello");
@@ -158,7 +160,7 @@
 
     double const dbl=1.234;
     
- boost::thread callable2(callable_multiple_arg(),19,dbl);
+ boost::thread callable2(func,19,dbl);
     callable2.join();
     BOOST_CHECK(callable_multiple_arg::called_two);
     BOOST_CHECK_EQUAL(callable_multiple_arg::called_two_arg1,19);

Modified: branches/proto/v4/libs/tr1/doc/tr1.qbk
==============================================================================
--- branches/proto/v4/libs/tr1/doc/tr1.qbk (original)
+++ branches/proto/v4/libs/tr1/doc/tr1.qbk 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -5,8 +5,7 @@
     [license
         Distributed under the Boost Software License, Version 1.0.
         (See accompanying file LICENSE_1_0.txt or copy at
- <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)]
+ [@
http://www.boost.org/LICENSE_1_0.txt])]
     [authors [Maddock, John]]
     [category misc]
     [last-revision $Date$]

Modified: branches/proto/v4/libs/unordered/test/helpers/test.hpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/helpers/test.hpp (original)
+++ branches/proto/v4/libs/unordered/test/helpers/test.hpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -16,6 +16,7 @@
 
 #include <boost/test/minimal.hpp>
 #include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
 #include <iostream>
 
 #define UNORDERED_AUTO_TEST(x) \

Modified: branches/proto/v4/libs/unordered/test/unordered/move_tests.cpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/unordered/move_tests.cpp (original)
+++ branches/proto/v4/libs/unordered/test/unordered/move_tests.cpp 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -125,7 +125,13 @@
         {
             test::random_values<T> v(25);
             T y(create(v, count, hf, eq, al, 1.0), al);
+#if defined(BOOST_HAS_RVALUE_REFS)
             BOOST_CHECK(count == test::global_object_count);
+#else
+ BOOST_CHECK(test::global_object_count.constructions - count.constructions <=
+ (test::is_map<T>::value ? 50 : 25));
+ BOOST_CHECK(count.instances == test::global_object_count.instances);
+#endif
             test::check_container(y, v);
             BOOST_CHECK(test::equivalent(y.hash_function(), hf));
             BOOST_CHECK(test::equivalent(y.key_eq(), eq));

Modified: branches/proto/v4/tools/build/v2/tools/darwin.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/tools/darwin.jam (original)
+++ branches/proto/v4/tools/build/v2/tools/darwin.jam 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -102,6 +102,8 @@
 
 feature framework : : free ;
 
+flags darwin.compile OPTIONS <flags> ;
+
 # The following adds objective-c support to darwin.
 # Thanks to http://thread.gmane.org/gmane.comp.lib.boost.build/13759
 

Modified: branches/proto/v4/tools/regression/xsl_reports/build_results.sh
==============================================================================
--- branches/proto/v4/tools/regression/xsl_reports/build_results.sh (original)
+++ branches/proto/v4/tools/regression/xsl_reports/build_results.sh 2008-05-31 15:31:01 EDT (Sat, 31 May 2008)
@@ -132,7 +132,8 @@
     
     cd ${1}/all
     rm -f ../../${1}.zip*
- zip -q -r -9 ../../${1} * -x '*.xml'
+ #~ zip -q -r -9 ../../${1} * -x '*.xml'
+ 7za a -tzip -mx=9 ../../${1}.zip * '-x!*.xml'
     cd "${cwd}"
     mv ${1}.zip ${1}.zip.uploading
     rsync -vuzhh --rsh=ssh --stats \


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk