Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r65013 - in branches/release/libs: interprocess interprocess/doc interprocess/example interprocess/proj interprocess/proj/vc7ide interprocess/test intrusive intrusive/doc intrusive/example intrusive/proj/vc7ide intrusive/proj/vc7ide/_intrusivelib intrusive/proj/vc7ide/any_test intrusive/proj/vc7ide/avl_multiset intrusive/proj/vc7ide/avl_set intrusive/proj/vc7ide/custom_bucket_traits intrusive/proj/vc7ide/default_hook intrusive/proj/vc7ide/external_value_traits intrusive/proj/vc7ide/function_hook intrusive/proj/vc7ide/list intrusive/proj/vc7ide/make_functions intrusive/proj/vc7ide/multiset intrusive/proj/vc7ide/recursive intrusive/proj/vc7ide/set intrusive/proj/vc7ide/sg_multiset intrusive/proj/vc7ide/sg_set intrusive/proj/vc7ide/slist intrusive/proj/vc7ide/splay_multiset intrusive/proj/vc7ide/splay_set intrusive/proj/vc7ide/stateful_value_traits intrusive/proj/vc7ide/treap_multiset intrusive/proj/vc7ide/treap_set intrusive/proj/vc7ide/unordered_multiset intrusive/proj/vc7ide/unordered_set intrusive/proj/vc7ide/virtual_base intrusive/test
From: igaztanaga_at_[hidden]
Date: 2010-08-26 05:27:58


Author: igaztanaga
Date: 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
New Revision: 65013
URL: http://svn.boost.org/trac/boost/changeset/65013

Log:
Fixes for Boost 1.45
Added:
   branches/release/libs/interprocess/proj/vc7ide/intermodule_singleton_test.vcproj
      - copied unchanged from r65012, /trunk/libs/interprocess/proj/vc7ide/intermodule_singleton_test.vcproj
   branches/release/libs/interprocess/proj/vc7ide/robust_emulation_test.vcproj
      - copied unchanged from r65012, /trunk/libs/interprocess/proj/vc7ide/robust_emulation_test.vcproj
   branches/release/libs/interprocess/proj/vc7ide/robust_recursive_emulation_test.vcproj
      - copied unchanged from r65012, /trunk/libs/interprocess/proj/vc7ide/robust_recursive_emulation_test.vcproj
   branches/release/libs/interprocess/test/intermodule_singleton_test.cpp
      - copied unchanged from r65012, /trunk/libs/interprocess/test/intermodule_singleton_test.cpp
   branches/release/libs/interprocess/test/robust_emulation_test.cpp
      - copied unchanged from r65012, /trunk/libs/interprocess/test/robust_emulation_test.cpp
   branches/release/libs/interprocess/test/robust_mutex_test.hpp
      - copied unchanged from r65012, /trunk/libs/interprocess/test/robust_mutex_test.hpp
   branches/release/libs/interprocess/test/robust_recursive_emulation_test.cpp
      - copied unchanged from r65012, /trunk/libs/interprocess/test/robust_recursive_emulation_test.cpp
   branches/release/libs/intrusive/example/doc_function_hooks.cpp
      - copied unchanged from r65008, /trunk/libs/intrusive/example/doc_function_hooks.cpp
   branches/release/libs/intrusive/example/doc_recursive.cpp
      - copied unchanged from r65008, /trunk/libs/intrusive/example/doc_recursive.cpp
   branches/release/libs/intrusive/example/doc_recursive_member.cpp
      - copied unchanged from r65008, /trunk/libs/intrusive/example/doc_recursive_member.cpp
   branches/release/libs/intrusive/proj/vc7ide/function_hook/
      - copied from r65008, /trunk/libs/intrusive/proj/vc7ide/function_hook/
   branches/release/libs/intrusive/proj/vc7ide/function_hook/function_hook.vcproj
      - copied unchanged from r65008, /trunk/libs/intrusive/proj/vc7ide/function_hook/function_hook.vcproj
   branches/release/libs/intrusive/proj/vc7ide/recursive/
      - copied from r65008, /trunk/libs/intrusive/proj/vc7ide/recursive/
   branches/release/libs/intrusive/proj/vc7ide/recursive/recursive.vcproj
      - copied unchanged from r65008, /trunk/libs/intrusive/proj/vc7ide/recursive/recursive.vcproj
   branches/release/libs/intrusive/test/function_hook_test.cpp
      - copied unchanged from r65008, /trunk/libs/intrusive/test/function_hook_test.cpp
   branches/release/libs/intrusive/test/recursive_test.cpp
      - copied unchanged from r65008, /trunk/libs/intrusive/test/recursive_test.cpp
Removed:
   branches/release/libs/interprocess/proj/vc7ide/doc_windows_shared_memory2.vcproj
Properties modified:
   branches/release/libs/interprocess/ (props changed)
   branches/release/libs/intrusive/ (props changed)
Text files modified:
   branches/release/libs/interprocess/doc/Jamfile.v2 | 1
   branches/release/libs/interprocess/doc/interprocess.qbk | 110 ++++++++++++++++++-----
   branches/release/libs/interprocess/example/Jamfile.v2 | 1
   branches/release/libs/interprocess/example/comp_doc_anonymous_conditionA.cpp | 1
   branches/release/libs/interprocess/proj/to-do.txt | 181 +++++++++++++++++++++++++++++++++++++++
   branches/release/libs/interprocess/proj/vc7ide/Interprocess.sln | 40 +++++++-
   branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj | 24 ++--
   branches/release/libs/interprocess/proj/vc7ide/memory_algorithm_test.vcproj | 3
   branches/release/libs/interprocess/proj/vc7ide/stable_vector_test.vcproj | 2
   branches/release/libs/interprocess/test/Jamfile.v2 | 1
   branches/release/libs/interprocess/test/allocexcept_test.cpp | 3
   branches/release/libs/interprocess/test/boost_interprocess_check.hpp | 8
   branches/release/libs/interprocess/test/file_lock_test.cpp | 22 +++-
   branches/release/libs/interprocess/test/file_mapping_test.cpp | 22 +++-
   branches/release/libs/interprocess/test/managed_mapped_file_test.cpp | 47 +++++----
   branches/release/libs/interprocess/test/mapped_file_test.cpp | 25 +++-
   branches/release/libs/interprocess/test/memory_algorithm_test_template.hpp | 16 ++-
   branches/release/libs/interprocess/test/movable_int.hpp | 2
   branches/release/libs/interprocess/test/mutex_test.cpp | 3
   branches/release/libs/interprocess/test/mutex_test_template.hpp | 2
   branches/release/libs/interprocess/test/named_creation_template.hpp | 2
   branches/release/libs/interprocess/test/print_container.hpp | 6
   branches/release/libs/interprocess/test/shared_memory_mapping_test.cpp | 3
   branches/release/libs/interprocess/test/shared_memory_test.cpp | 8
   branches/release/libs/interprocess/test/vector_test.hpp | 5 +
   branches/release/libs/interprocess/test/windows_shared_memory_test.cpp | 6
   branches/release/libs/intrusive/doc/intrusive.qbk | 170 +++++++++++++++++++++++++++++-------
   branches/release/libs/intrusive/example/Jamfile.v2 | 4
   branches/release/libs/intrusive/proj/vc7ide/Intrusive.sln | 18 +++
   branches/release/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj | 12 ++
   branches/release/libs/intrusive/proj/vc7ide/any_test/any_test.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/avl_multiset/avl_multiset.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/avl_set/avl_set.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/custom_bucket_traits/custom_bucket_traits.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/default_hook/default_hook.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/external_value_traits/external_value_traits.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/list/list.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/make_functions/make_functions.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/multiset/multiset.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/set/set.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/sg_multiset/sg_multiset.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/sg_set/sg_set.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/slist/slist.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/splay_multiset/splay_multiset.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/splay_set/splay_set.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/stateful_value_traits/stateful_value_traits.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/to-do.txt | 1
   branches/release/libs/intrusive/proj/vc7ide/treap_multiset/treap_multiset.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/treap_set/treap_set.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/unordered_multiset/unordered_multiset.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/unordered_set/unordered_set.vcproj | 2
   branches/release/libs/intrusive/proj/vc7ide/virtual_base/virtual_base.vcproj | 2
   branches/release/libs/intrusive/test/Jamfile.v2 | 6 +
   branches/release/libs/intrusive/test/common_functors.hpp | 2
   branches/release/libs/intrusive/test/generic_assoc_test.hpp | 4
   branches/release/libs/intrusive/test/list_test.cpp | 3
   branches/release/libs/intrusive/test/set_test.cpp | 1
   branches/release/libs/intrusive/test/smart_ptr.hpp | 7
   58 files changed, 630 insertions(+), 184 deletions(-)

Modified: branches/release/libs/interprocess/doc/Jamfile.v2
==============================================================================
--- branches/release/libs/interprocess/doc/Jamfile.v2 (original)
+++ branches/release/libs/interprocess/doc/Jamfile.v2 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -44,6 +44,7 @@
       interprocess
    :
         <xsl:param>boost.root=../../../..
+ <xsl:param>boost.libraries=../../../../libs/libraries.htm
         <xsl:param>toc.max.depth=1
         <xsl:param>toc.section.depth=2
         <xsl:param>chunk.first.sections=1

Modified: branches/release/libs/interprocess/doc/interprocess.qbk
==============================================================================
--- branches/release/libs/interprocess/doc/interprocess.qbk (original)
+++ branches/release/libs/interprocess/doc/interprocess.qbk 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -8,7 +8,7 @@
 [library Boost.Interprocess
     [quickbook 1.4]
     [authors [Gaztanaga, Ion]]
- [copyright 2005- 2008 Ion Gaztanaga]
+ [copyright 2005- 2010 Ion Gaztanaga]
     [id interprocess]
     [dirname interprocess]
     [purpose Interprocess communication utilities]
@@ -311,6 +311,33 @@
 
 [endsect]
 
+[section:permissions Permissions]
+
+Named resources offered by [*Boost.Interprocess] must cope with platform-dependant
+permission issues also present when creating files. If a programmer wants to
+shared shared memory, memory mapped files or named synchronization mechanisms
+(mutexes, semaphores, etc...) between users, it's necessary to specify
+those permissions. Sadly, traditional UNIX and Windows permissions are very
+different and [*Boost.Interprocess] does not try to standardize permissions,
+but does not ignore them.
+
+All named resource creation functions take an optional
+[classref boost::interprocess::permissions permissions object] that can be
+configured with platform-dependant permissions.
+
+Since each mechanism can be emulated through diferent mechanisms
+(a semaphore might be implement using mapped files or native semaphores)
+permissions types could vary when the implementation of a named resource
+changes (eg.: in Windows mutexes require `synchronize permissions`, but
+that's not the case of files).
+To avoid this, [*Boost.Interprocess] relies on file-like permissions,
+requiring file read-write-delete permissions to open named synchronization mechanisms
+(mutex, semaphores, etc.) and appropiate read or read-write-delete permissions for
+shared memory. This approach has two advantages: it's similar to the UNIX philosophy
+and the programmer does not need to know how the named resource is implemented.
+
+[endsect]
+
 [endsect]
 
 [section:sharedmemorybetweenprocesses Sharing memory between processes]
@@ -609,6 +636,16 @@
 the user must somehow transmit the size of the segment to processes opening the
 segment.
 
+Sharing memory between services and user applications is also different. To share memory
+between services and user applications the name of the shared memory must start with the
+global namespace prefix `"Global\\"`. This global namespace enables processes on multiple
+client sessions to communicate with a service application. The server component can create
+the shared memory in the global namespace. Then a client session can use the "Global\" prefix
+to open that memory.
+
+The creation of a shared memory object in the global namespace from a session other than
+session zero is a privileged operation.
+
 Let's repeat the same example presented for the portable shared memory object:
 A server process creates a
 shared memory object, maps it and initializes all the bytes to a value. After that,
@@ -757,7 +794,8 @@
 not updated immediately, since that would hurt performance (writing to disk
 is several times slower than writing to memory). If the user wants to make sure
 that file's contents have been updated, it can flush a range from the view to disk.
-When the function returns, the data should have been written to disk:
+When the function returns, the flushing process has startd but there is not guarantee that
+all data has been written to disk:
 
 [c++]
 
@@ -3128,6 +3166,10 @@
 windows shared memory is detached from the memory (or ends/crashes) the memory is
 destroyed. So there is no persistence support for windows shared memory.
 
+To communicate between system services and user applications using `managed_windows_shared_memory`,
+please read the explanations given in chapter
+[interprocess.sharedmemorybetweenprocesses.sharedmemory.windows_shared_memory Native windows shared memory]
+
 [endsect]
 
 For more information about managed shared memory capabilities, see
@@ -5078,6 +5120,13 @@
 
 [endsect]
 
+Programmers can place [*Boost.CircularBuffer] containers in sharecd memory provided
+they disable debugging facilities with defines `BOOST_CB_DISABLE_DEBUG` or the more
+general `NDEBUG`. The reason is that those debugging facilities are only compatible
+with raw pointers.
+
+[endsect]
+
 [endsect]
 
 [section:memory_algorithms Memory allocation algorithms]
@@ -5192,9 +5241,6 @@
 This is the default allocation algorithm in [*Boost.Interprocess] managed memory
 segments.
                                                                                                                                
-
-[endsect]
-
 [endsect]
 
 [endsect]
@@ -6504,31 +6550,45 @@
 
 [endsect]
 
-[section:thanks_to_license_notes License notes]
+[endsect]
 
-[*Boost.Interprocess] STL containers are based on the SGI STL library implementation:
+[section:release_notes Release Notes]
 
-Copyright (c) 1996,1997 Silicon Graphics Computer Systems, Inc. Permission to use,
-copy, modify, distribute and sell this software and its documentation for any
-purpose is hereby granted without fee, provided that the above copyright notice
-appear in all copies and that both that copyright notice and this permission
-notice appear in supporting documentation. Silicon Graphics makes no representations
-about the suitability of this software for any purpose. It is provided "as is"
-without express or implied warranty.
-
-Copyright (c) 1994 Hewlett-Packard Company Permission to use, copy, modify,
-distribute and sell this software and its documentation for any purpose is hereby
-granted without fee, provided that the above copyright notice appear in all copies
-and that both that copyright notice and this permission notice appear in supporting
-documentation. Hewlett-Packard Company makes no representations about the suitability
-of this software for any purpose. It is provided "as is" without express or implied
-warranty.
+[section:release_notes_boost_1_45_00 Boost 1.45 Release]
 
-[endsect]
+* Fixed bugs
+ [@https://svn.boost.org/trac/boost/ticket/3439 #3439],
+ [@https://svn.boost.org/trac/boost/ticket/3448 #3448],
+ [@https://svn.boost.org/trac/boost/ticket/3582 #3582],
+ [@https://svn.boost.org/trac/boost/ticket/3682 #3682],
+ [@https://svn.boost.org/trac/boost/ticket/3829 #3829],
+ [@https://svn.boost.org/trac/boost/ticket/3846 #3846],
+ [@https://svn.boost.org/trac/boost/ticket/3947 #3947],
+ [@https://svn.boost.org/trac/boost/ticket/3950 #3950],
+ [@https://svn.boost.org/trac/boost/ticket/3951 #3951],
+ [@https://svn.boost.org/trac/boost/ticket/3985 #3985],
+ [@https://svn.boost.org/trac/boost/ticket/4010 #4010],
+ [@https://svn.boost.org/trac/boost/ticket/4019 #4019],
+ [@https://svn.boost.org/trac/boost/ticket/4039 #4039],
+ [@https://svn.boost.org/trac/boost/ticket/4218 #4218],
+ [@https://svn.boost.org/trac/boost/ticket/4230 #4230],
+ [@https://svn.boost.org/trac/boost/ticket/4230 #4352],
+ [@https://svn.boost.org/trac/boost/ticket/4230 #4352],
+ [@https://svn.boost.org/trac/boost/ticket/4516 #4516],
+ [@https://svn.boost.org/trac/boost/ticket/4524 #4524],
+ [@https://svn.boost.org/trac/boost/ticket/4557 #4557].
+
+* Added support for standard rvalue reference move semantics
+ (tested on GCC 4.5 and VC10).
 
-[endsect]
+* Permissions can be detailed for interprocess named resources.
 
-[section:release_notes Release Notes]
+* `mapped_region::flush` initiates disk flushing but does not guarantee it's completed
+ when returns, since it is not portable.
+
+* FreeBSD and MacOS now use posix semaphores to implement named semaphores and mutex.
+
+[endsect]
 
 [section:release_notes_boost_1_41_00 Boost 1.41 Release]
 

Modified: branches/release/libs/interprocess/example/Jamfile.v2
==============================================================================
--- branches/release/libs/interprocess/example/Jamfile.v2 (original)
+++ branches/release/libs/interprocess/example/Jamfile.v2 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -36,6 +36,7 @@
       : # requirements
         <toolset>acc:<linkflags>-lrt
         <toolset>acc-pa_risc:<linkflags>-lrt
+ <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32"
         <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
       ] ;
    }

Modified: branches/release/libs/interprocess/example/comp_doc_anonymous_conditionA.cpp
==============================================================================
--- branches/release/libs/interprocess/example/comp_doc_anonymous_conditionA.cpp (original)
+++ branches/release/libs/interprocess/example/comp_doc_anonymous_conditionA.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -77,4 +77,3 @@
    return 0;
 }
 //]
-#include <boost/interprocess/detail/config_end.hpp>

Modified: branches/release/libs/interprocess/proj/to-do.txt
==============================================================================
--- branches/release/libs/interprocess/proj/to-do.txt (original)
+++ branches/release/libs/interprocess/proj/to-do.txt 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -1,4 +1,46 @@
--> add private_read_only to mapped_region to support MAP_PRIVATE plus PROT_READ
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga. 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.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
+Platform conformance
+//////////////////////////////////////////////////////////////////////////////
+
+//////////
+FreeBSD
+//////////
+
+Tested until FreeBSD 9
+
+Shared memory: FreeBSD < 7 filesystem semantics
+
+ HISTORY
+ The shm_open() and shm_unlink() functions first appeared in FreeBSD 4.3.
+ The functions were reimplemented as system calls using shared memory
+ objects directly rather than files in FreeBSD 7.0.
+
+ BUG: MAP_PRIVATE requires read-write access to shared memory object (mapped files work fine)
+
+Named semaphore: _POSIX_SEMAPHORES not defined. Limited named semaphore support (short names)
+Process shared: _POSIX_THREAD_PROCESS_SHARED not defined
+
+//////////
+Linux 2.6
+//////////
+
+All Fine
+
+
+
+
+
 
 -> add contiguous_elements option to burst allocation
 
@@ -61,4 +103,139 @@
 
 -> MacOS shm_open is non-conformant. Is there a way to know the size of a shared memory object?
 
--> swap() of multiallocaiton iterator is wrong. Try to reimplement it with slist
\ No newline at end of file
+-> swap() of multiallocaiton iterator is wrong. Try to reimplement it with slist
+
+-> Could the mapped_file constructor allow a wchar_t filename on Windows?
+ Or some cross-platform way to get Unicode support?
+
+-> map::node_ptr p = m.create_node(my_special_cheap_key_value, mv1, mv2);
+//We would need to unconst-cast...
+const_cast<Key&>(p->first) = modify( p->second );
+m.insert( boost::move(p) );
+
+-> I found some bug in the interprocess library. I use
+ boost::interprocess::managed_mapped_file class and
+ managed_mapped_file::shrink_to_fit() method to decrease the size of file
+ on the disk. It works good but the thread hang up on shrink_to_fit() call
+ if the file exists already and it's size is zero. It makes me check the
+ file existance and it's size before shrink_to_fit() call.
+ Thank you!
+
+-> Ticket URL: <https://svn.boost.org/trac/boost/ticket/3375>
+
+->Robust mutex emulation:
+
+Two new fields:
+ - owner
+ - state
+
+Use intermodule singleton to store the lock file name
+
+LOCK
+ if (broken_id){
+ throw exception;
+ }
+
+ lock_own_unique_file();
+
+ while(1){
+ if (try_lock_mtx){
+ write unique_id
+ }
+ else{
+ sleep();
+ ++tries;
+ if(tries > 100)
+ if(!robust_check()){
+ tries = 0;
+ }
+ else{
+ break;
+ }
+ }
+ }
+ }
+
+
+UNLOCK
+ if (fixing_mode){
+ write_broken_id
+ }
+ else{
+ write invalid_id
+ }
+
+ unlock_mtx
+
+ROBUST_CHECK
+
+ if(check_if_owner_dead_and_take_ownership_atomically()){
+ return false;
+ }
+ write fixing_id
+
+CHECK_IF_OWNER_DEAD_AND_TAKE_OWNERSHIP_ATOMICALLY
+
+ do{
+ old_owner = read_owner_atomically()
+ if(check_owner_unique_resource_is_dead(old_owner){
+ return true;
+ }
+ }while(cas(old_owner, cur_owner) == old_owner);
+ return false;
+
+CHECK_OWNER_UNIQUE_RESOURCE_IS_DEAD(owner)
+
+ file = file_to_owner(owner);
+ if(file_exists(file)){
+ if(try_lock(file)){
+ write_owner_atomically();
+ remove(file);
+ unlock(file)
+ return true;
+ }
+ }
+ return false;
+
+
+LOCK_OWN_UNIQUE_FILE
+class MyRobustMutexLockFile
+{
+ int fd;
+};
+
+MyRobustMutexLockFile()
+{
+ //loop create_and_lock because another process
+ //can lock and erase it
+
+ //better create, lock and rename?
+ fd = create_file(lockfilename);
+ while(1){
+ lock_file(fd);
+ int fd2 = create_exclusive(lockfilename);
+ if(fd2){
+ close(fd);
+ fd = fd2;
+ continue;
+ }
+ else if(already_exist_error){ //must already exist
+ break;
+ }
+ else{
+ close(fd);
+ throw exception;
+ }
+ }
+}
+
+~MyRobustMutexLockFile()
+{
+ close(fd);
+ //No race condition because
+ //if any other thread tries to create the file
+ //the shm has a lock so constructor/destructor is serialized
+ unlink(lockfilename)
+}
+
+detail::intermodule_singleton<MyRobustMutexLockFile>::get();

Modified: branches/release/libs/interprocess/proj/vc7ide/Interprocess.sln
==============================================================================
--- branches/release/libs/interprocess/proj/vc7ide/Interprocess.sln (original)
+++ branches/release/libs/interprocess/proj/vc7ide/Interprocess.sln 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -199,10 +199,6 @@
         ProjectSection(ProjectDependencies) = postProject
         EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recursive_mutex_test", "recursive_mutex_test.vcproj", "{83581CCE-487E-3292-A4E7-BA07926D3A14}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "semaphore_test", "semaphore_test.vcproj", "{5CE28C83-48FE-1676-4FA7-B50D3A76A013}"
         ProjectSection(ProjectDependencies) = postProject
         EndProjectSection
@@ -435,6 +431,22 @@
         ProjectSection(ProjectDependencies) = postProject
         EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intermodule_singleton_test", "intermodule_singleton_test.vcproj", "{58CCE183-6092-48FE-A4F7-BA0D3A792608}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "robust_recursive_emulation_test", "robust_recursive_emulation_test.vcproj", "{58CCE183-4AFE-C4F5-6292-B25062C3A898}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "robust_emulation_test", "robust_emulation_test.vcproj", "{58CCE183-4AFE-6092-C4F5-BA0D3A692628}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recursive_mutex_test", "recursive_mutex_test.vcproj", "{83581CCE-487E-3292-A4E7-BA07926D3A14}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
 Global
         GlobalSection(SolutionConfiguration) = preSolution
                 Debug = Debug
@@ -641,10 +653,6 @@
                 {0000058C-0000-0000-0000-000000000021}.Debug.Build.0 = Debug|Win32
                 {0000058C-0000-0000-0000-000000000021}.Release.ActiveCfg = Release|Win32
                 {0000058C-0000-0000-0000-000000000021}.Release.Build.0 = Release|Win32
- {83581CCE-487E-3292-A4E7-BA07926D3A14}.Debug.ActiveCfg = Debug|Win32
- {83581CCE-487E-3292-A4E7-BA07926D3A14}.Debug.Build.0 = Debug|Win32
- {83581CCE-487E-3292-A4E7-BA07926D3A14}.Release.ActiveCfg = Release|Win32
- {83581CCE-487E-3292-A4E7-BA07926D3A14}.Release.Build.0 = Release|Win32
                 {5CE28C83-48FE-1676-4FA7-B50D3A76A013}.Debug.ActiveCfg = Debug|Win32
                 {5CE28C83-48FE-1676-4FA7-B50D3A76A013}.Debug.Build.0 = Debug|Win32
                 {5CE28C83-48FE-1676-4FA7-B50D3A76A013}.Release.ActiveCfg = Release|Win32
@@ -877,6 +885,22 @@
                 {58CC2563-6092-48FE-FAF7-BA046A792658}.Debug.Build.0 = Debug|Win32
                 {58CC2563-6092-48FE-FAF7-BA046A792658}.Release.ActiveCfg = Release|Win32
                 {58CC2563-6092-48FE-FAF7-BA046A792658}.Release.Build.0 = Release|Win32
+ {58CCE183-6092-48FE-A4F7-BA0D3A792608}.Debug.ActiveCfg = Debug|Win32
+ {58CCE183-6092-48FE-A4F7-BA0D3A792608}.Debug.Build.0 = Debug|Win32
+ {58CCE183-6092-48FE-A4F7-BA0D3A792608}.Release.ActiveCfg = Release|Win32
+ {58CCE183-6092-48FE-A4F7-BA0D3A792608}.Release.Build.0 = Release|Win32
+ {58CCE183-4AFE-C4F5-6292-B25062C3A898}.Debug.ActiveCfg = Debug|Win32
+ {58CCE183-4AFE-C4F5-6292-B25062C3A898}.Debug.Build.0 = Debug|Win32
+ {58CCE183-4AFE-C4F5-6292-B25062C3A898}.Release.ActiveCfg = Release|Win32
+ {58CCE183-4AFE-C4F5-6292-B25062C3A898}.Release.Build.0 = Release|Win32
+ {58CCE183-4AFE-6092-C4F5-BA0D3A692628}.Debug.ActiveCfg = Debug|Win32
+ {58CCE183-4AFE-6092-C4F5-BA0D3A692628}.Debug.Build.0 = Debug|Win32
+ {58CCE183-4AFE-6092-C4F5-BA0D3A692628}.Release.ActiveCfg = Release|Win32
+ {58CCE183-4AFE-6092-C4F5-BA0D3A692628}.Release.Build.0 = Release|Win32
+ {83581CCE-487E-3292-A4E7-BA07926D3A14}.Debug.ActiveCfg = Debug|Win32
+ {83581CCE-487E-3292-A4E7-BA07926D3A14}.Debug.Build.0 = Debug|Win32
+ {83581CCE-487E-3292-A4E7-BA07926D3A14}.Release.ActiveCfg = Release|Win32
+ {83581CCE-487E-3292-A4E7-BA07926D3A14}.Release.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(ExtensibilityGlobals) = postSolution
         EndGlobalSection

Deleted: branches/release/libs/interprocess/proj/vc7ide/doc_windows_shared_memory2.vcproj
==============================================================================
--- branches/release/libs/interprocess/proj/vc7ide/doc_windows_shared_memory2.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
+++ (empty file)
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="doc_windows_shared_memory2"
- ProjectGUID="{5E1D6C83-31DE-4F6F-6132-87A9FB663041}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../Bin/Win32/Debug"
- IntermediateDirectory="Debug/doc_windows_shared_memory2"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="winmm.lib"
- OutputFile="$(OutDir)/doc_windows_shared_memory2_d.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../stage/lib"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/doc_windows_shared_memoryB.pdb"
- SubSystem="1"
- TargetMachine="1"
- FixedBaseAddress="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../Bin/Win32/Release"
- IntermediateDirectory="Release/doc_windows_shared_memory2"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
- RuntimeLibrary="2"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="winmm.lib"
- OutputFile="$(OutDir)/doc_windows_shared_memoryB.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../stage/lib"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{437F71DF-CA9B-6637-0366-3E52D735BAFF}">
- <File
- RelativePath="..\..\example\comp_doc_windows_shared_memoryB.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>

Modified: branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj
==============================================================================
--- branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj (original)
+++ branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -265,22 +265,22 @@
                                 Name="emulation"
                                 Filter="">
                                 <File
- RelativePath="..\..\..\..\boost\interprocess\sync\emulation\interprocess_barrier.hpp">
+ RelativePath="..\..\..\..\boost\interprocess\sync\emulation\barrier.hpp">
                                 </File>
                                 <File
- RelativePath="..\..\..\..\boost\interprocess\sync\emulation\interprocess_condition.hpp">
+ RelativePath="..\..\..\..\boost\interprocess\sync\emulation\condition.hpp">
                                 </File>
                                 <File
- RelativePath="..\..\..\..\boost\interprocess\sync\emulation\interprocess_mutex.hpp">
+ RelativePath="..\..\..\..\boost\interprocess\sync\emulation\mutex.hpp">
                                 </File>
                                 <File
- RelativePath="..\..\..\..\boost\interprocess\sync\emulation\interprocess_recursive_mutex.hpp">
+ RelativePath="..\..\..\..\boost\interprocess\sync\emulation\named_creation_functor.hpp">
                                 </File>
                                 <File
- RelativePath="..\..\..\..\boost\interprocess\sync\emulation\interprocess_semaphore.hpp">
+ RelativePath="..\..\..\..\boost\interprocess\sync\emulation\recursive_mutex.hpp">
                                 </File>
                                 <File
- RelativePath="..\..\..\..\boost\interprocess\sync\emulation\named_creation_functor.hpp">
+ RelativePath="..\..\..\..\boost\interprocess\sync\emulation\semaphore.hpp">
                                 </File>
                         </Filter>
                 </Filter>
@@ -345,6 +345,9 @@
                                 RelativePath="..\..\..\..\boost\interprocess\mapped_region.hpp">
                         </File>
                         <File
+ RelativePath="..\..\..\..\boost\interprocess\permissions.hpp">
+ </File>
+ <File
                                 RelativePath="..\..\..\..\boost\interprocess\segment_manager.hpp">
                         </File>
                         <File
@@ -430,6 +433,9 @@
                                 RelativePath="..\..\..\..\boost\interprocess\detail\ptime_wrk.hpp">
                         </File>
                         <File
+ RelativePath="..\..\..\..\boost\interprocess\detail\robust_emulation.hpp">
+ </File>
+ <File
                                 RelativePath="..\..\..\..\boost\interprocess\detail\segment_manager_helper.hpp">
                         </File>
                         <File
@@ -535,15 +541,9 @@
                                 RelativePath="..\..\test\expand_bwd_test_template.hpp">
                         </File>
                         <File
- RelativePath="..\..\test\get_compiler_name.hpp">
- </File>
- <File
                                 RelativePath="..\..\test\get_process_id_name.hpp">
                         </File>
                         <File
- RelativePath="..\..\test\itestvalue.hpp">
- </File>
- <File
                                 RelativePath="..\..\test\list_test.hpp">
                         </File>
                         <File

Modified: branches/release/libs/interprocess/proj/vc7ide/memory_algorithm_test.vcproj
==============================================================================
--- branches/release/libs/interprocess/proj/vc7ide/memory_algorithm_test.vcproj (original)
+++ branches/release/libs/interprocess/proj/vc7ide/memory_algorithm_test.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -72,6 +72,7 @@
                         CharacterSet="2">
                         <Tool
                                 Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
                                 AdditionalIncludeDirectories="../../../.."
                                 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
                                 RuntimeLibrary="2"
@@ -80,7 +81,7 @@
                                 UsePrecompiledHeader="0"
                                 WarningLevel="4"
                                 Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
+ DebugInformationFormat="3"/>
                         <Tool
                                 Name="VCCustomBuildTool"/>
                         <Tool

Modified: branches/release/libs/interprocess/proj/vc7ide/stable_vector_test.vcproj
==============================================================================
--- branches/release/libs/interprocess/proj/vc7ide/stable_vector_test.vcproj (original)
+++ branches/release/libs/interprocess/proj/vc7ide/stable_vector_test.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -72,6 +72,8 @@
                         CharacterSet="2">
                         <Tool
                                 Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="0"
                                 AdditionalIncludeDirectories="../../../.."
                                 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
                                 RuntimeLibrary="2"

Modified: branches/release/libs/interprocess/test/Jamfile.v2
==============================================================================
--- branches/release/libs/interprocess/test/Jamfile.v2 (original)
+++ branches/release/libs/interprocess/test/Jamfile.v2 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,6 +27,7 @@
       : # requirements
         <toolset>acc:<linkflags>-lrt
         <toolset>acc-pa_risc:<linkflags>-lrt
+ <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32"
         <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
       ] ;
    }

Modified: branches/release/libs/interprocess/test/allocexcept_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/allocexcept_test.cpp (original)
+++ branches/release/libs/interprocess/test/allocexcept_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -71,8 +71,9 @@
       //Fill vector at the beginning until there is no more memory
       MyVect myvec(myallocator);
       int i;
+ InstanceCounter ic;
       for(i = 0; true; ++i){
- myvec.insert(myvec.begin(), i, InstanceCounter());
+ myvec.insert(myvec.begin(), i, ic);
       }
    }
    catch(boost::interprocess::bad_alloc &){

Modified: branches/release/libs/interprocess/test/boost_interprocess_check.hpp
==============================================================================
--- branches/release/libs/interprocess/test/boost_interprocess_check.hpp (original)
+++ branches/release/libs/interprocess/test/boost_interprocess_check.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -8,8 +8,8 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
-#ifndef BOOST_INTERPROCESS_TEST_HEADER
-#define BOOST_INTERPROCESS_TEST_HEADER
+#ifndef BOOST_INTERPROCESS_TEST_CHECK_HEADER
+#define BOOST_INTERPROCESS_TEST_CHECK_HEADER
 
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <boost/interprocess/exceptions.hpp>
@@ -18,10 +18,10 @@
 namespace boost { namespace interprocess { namespace test {
 
 #define BOOST_INTERPROCES_CHECK( P ) \
- if(!(P)) do{ std::cout << "Failed: " << #P << " file: " << __FILE__ << " line : " << __LINE__ << std::endl; throw boost::interprocess::interprocess_exception();}while(0)
+ if(!(P)) do{ std::cout << "Failed: " << #P << " file: " << __FILE__ << " line : " << __LINE__ << std::endl; throw boost::interprocess::interprocess_exception(#P);}while(0)
 
 }}} //namespace boost { namespace interprocess { namespace test {
 
 #include <boost/interprocess/detail/config_end.hpp>
 
-#endif //BOOST_INTERPROCESS_TEST_HEADER
+#endif //BOOST_INTERPROCESS_TEST_CHECK_HEADER

Modified: branches/release/libs/interprocess/test/file_lock_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/file_lock_test.cpp (original)
+++ branches/release/libs/interprocess/test/file_lock_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -20,6 +20,16 @@
 #include <cstdio> //std::remove
 
 using namespace boost::interprocess;
+
+static const std::size_t FileSize = 1000;
+inline std::string get_filename()
+{
+ std::string ret (detail::get_temporary_path());
+ ret += "/";
+ ret += test::get_process_id_name();
+ return ret;
+}
+
 //This wrapper is necessary to have a default constructor
 //in generic mutex_test_template functions
 class file_lock_lock_test_wrapper
@@ -27,7 +37,7 @@
 {
    public:
    file_lock_lock_test_wrapper()
- : boost::interprocess::file_lock(test::get_process_id_name())
+ : boost::interprocess::file_lock(get_filename().c_str())
    {}
 };
 
@@ -35,12 +45,12 @@
 {
    //Destroy and create file
    {
- std::remove(test::get_process_id_name());
- std::ofstream file(test::get_process_id_name());
+ std::remove(get_filename().c_str());
+ std::ofstream file(get_filename().c_str());
       if(!file){
          return 1;
       }
- file_lock flock(test::get_process_id_name());
+ file_lock flock(get_filename().c_str());
       {
       scoped_lock<file_lock> sl(flock);
       }
@@ -53,7 +63,7 @@
    }
    {
       //Now test move semantics
- file_lock mapping(test::get_process_id_name());
+ file_lock mapping(get_filename().c_str());
       file_lock move_ctor(boost::interprocess::move(mapping));
       file_lock move_assign;
       move_assign = boost::interprocess::move(move_ctor);
@@ -63,7 +73,7 @@
    //test::test_all_lock<file_lock_lock_test_wrapper>();
    //test::test_all_mutex<false, file_lock_lock_test_wrapper>();
    //test::test_all_sharable_mutex<false, file_lock_lock_test_wrapper>();
- std::remove(test::get_process_id_name());
+ std::remove(get_filename().c_str());
 
    return 0;
 }

Modified: branches/release/libs/interprocess/test/file_mapping_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/file_mapping_test.cpp (original)
+++ branches/release/libs/interprocess/test/file_mapping_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -21,6 +21,14 @@
 
 using namespace boost::interprocess;
 
+inline std::string get_filename()
+{
+ std::string ret (detail::get_temporary_path());
+ ret += "/";
+ ret += test::get_process_id_name();
+ return ret;
+}
+
 file_mapping get_file_mapping()
 {
    file_mapping f;
@@ -33,14 +41,14 @@
       const std::size_t FileSize = 99999*2;
       {
          //Create file with given size
- std::ofstream file(test::get_process_id_name(), std::ios::binary | std::ios::trunc);
+ std::ofstream file(get_filename().c_str(), std::ios::binary | std::ios::trunc);
          file.seekp(static_cast<std::streamoff>(FileSize-1));
          file.write("", 1);
       }
 
       {
          //Create a file mapping
- file_mapping mapping(test::get_process_id_name(), read_write);
+ file_mapping mapping(get_filename().c_str(), read_write);
          //Create two mapped regions, one half of the file each
          mapped_region region (mapping
                               ,read_write
@@ -73,7 +81,7 @@
       //See if the pattern is correct in the file
       {
          //Open the file
- std::ifstream file(test::get_process_id_name(), std::ios::binary);
+ std::ifstream file(get_filename().c_str(), std::ios::binary);
 
          //Create a memory buffer
          std::auto_ptr<unsigned char> memory (new unsigned char [FileSize/2 +1]);
@@ -110,7 +118,7 @@
       //Now check the pattern mapping a single read only mapped_region
       {
          //Create a file mapping
- file_mapping mapping(test::get_process_id_name(), read_only);
+ file_mapping mapping(get_filename().c_str(), read_only);
 
          //Create a single regions, mapping all the file
          mapped_region region (mapping
@@ -129,7 +137,7 @@
       }
       {
          //Now test move semantics
- file_mapping mapping(test::get_process_id_name(), read_only);
+ file_mapping mapping(get_filename().c_str(), read_only);
          file_mapping move_ctor(boost::interprocess::move(mapping));
          file_mapping move_assign;
          move_assign = boost::interprocess::move(move_ctor);
@@ -138,11 +146,11 @@
       }
    }
    catch(std::exception &exc){
- file_mapping::remove(test::get_process_id_name());
+ file_mapping::remove(get_filename().c_str());
       std::cout << "Unhandled exception: " << exc.what() << std::endl;
       throw;
    }
- file_mapping::remove(test::get_process_id_name());
+ file_mapping::remove(get_filename().c_str());
    return 0;
 }
 

Modified: branches/release/libs/interprocess/test/managed_mapped_file_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/managed_mapped_file_test.cpp (original)
+++ branches/release/libs/interprocess/test/managed_mapped_file_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -18,10 +18,17 @@
 
 using namespace boost::interprocess;
 
+inline std::string get_filename()
+{
+ std::string ret (detail::get_temporary_path());
+ ret += "/";
+ ret += test::get_process_id_name();
+ return ret;
+}
+
 int main ()
 {
    const int FileSize = 65536*10;
- const char *const FileName = test::get_process_id_name();
 
    //STL compatible allocator object for memory-mapped file
    typedef allocator<int, managed_mapped_file::segment_manager>
@@ -31,12 +38,12 @@
 
    {
       //Remove the file it is already created
- file_mapping::remove(FileName);
+ file_mapping::remove(get_filename().c_str());
 
       const int max = 100;
       void *array[max];
       //Named allocate capable shared memory allocator
- managed_mapped_file mfile(create_only, FileName, FileSize);
+ managed_mapped_file mfile(create_only, get_filename().c_str(), FileSize);
 
       int i;
       //Let's allocate some memory
@@ -52,10 +59,10 @@
 
    {
       //Remove the file it is already created
- file_mapping::remove(FileName);
+ file_mapping::remove(get_filename().c_str());
 
       //Named allocate capable memory mapped file managed memory class
- managed_mapped_file mfile(create_only, FileName, FileSize);
+ managed_mapped_file mfile(create_only, get_filename().c_str(), FileSize);
 
       //Construct the STL-like allocator with the segment manager
       const allocator_int_t myallocator (mfile.get_segment_manager());
@@ -80,7 +87,7 @@
    }
    {
       //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
 
       //Check vector is still there
       MyVect *mfile_vect = mfile.find<MyVect>("MyVector").first;
@@ -91,7 +98,7 @@
    {
       {
          //Map preexisting file again in copy-on-write
- managed_mapped_file mfile(open_copy_on_write, FileName);
+ managed_mapped_file mfile(open_copy_on_write, get_filename().c_str());
 
          //Check vector is still there
          MyVect *mfile_vect = mfile.find<MyVect>("MyVector").first;
@@ -109,7 +116,7 @@
       //Now check vector is still in the file
       {
          //Map preexisting file again in copy-on-write
- managed_mapped_file mfile(open_copy_on_write, FileName);
+ managed_mapped_file mfile(open_copy_on_write, get_filename().c_str());
 
          //Check vector is still there
          MyVect *mfile_vect = mfile.find<MyVect>("MyVector").first;
@@ -119,7 +126,7 @@
    }
    {
       //Map preexisting file again in copy-on-write
- managed_mapped_file mfile(open_read_only, FileName);
+ managed_mapped_file mfile(open_read_only, get_filename().c_str());
 
       //Check vector is still there
       MyVect *mfile_vect = mfile.find<MyVect>("MyVector").first;
@@ -130,15 +137,15 @@
       std::size_t old_free_memory;
       {
          //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
          old_free_memory = mfile.get_free_memory();
       }
 
       //Now grow the file
- managed_mapped_file::grow(FileName, FileSize);
+ managed_mapped_file::grow(get_filename().c_str(), FileSize);
 
       //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
 
       //Check vector is still there
       MyVect *mfile_vect = mfile.find<MyVect>("MyVector").first;
@@ -155,17 +162,17 @@
                   old_file_size, next_file_size, final_file_size;
       {
          //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
          old_free_memory = mfile.get_free_memory();
          old_file_size = mfile.get_size();
       }
 
       //Now shrink the file
- managed_mapped_file::shrink_to_fit(FileName);
+ managed_mapped_file::shrink_to_fit(get_filename().c_str());
 
       {
          //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
          next_file_size = mfile.get_size();
 
          //Check vector is still there
@@ -183,7 +190,7 @@
       //Now destroy the vector
       {
          //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
 
          //Destroy and check it is not present
          mfile.destroy<MyVect>("MyVector");
@@ -192,17 +199,17 @@
       }
 
       //Now shrink the file
- managed_mapped_file::shrink_to_fit(FileName);
+ managed_mapped_file::shrink_to_fit(get_filename().c_str());
       {
          //Map preexisting file again in memory
- managed_mapped_file mfile(open_only, FileName);
+ managed_mapped_file mfile(open_only, get_filename().c_str());
          final_file_size = mfile.get_size();
          if(next_file_size <= final_file_size)
             return -1;
       }
       {
          //Now test move semantics
- managed_mapped_file original(open_only, FileName);
+ managed_mapped_file original(open_only, get_filename().c_str());
          managed_mapped_file move_ctor(boost::interprocess::move(original));
          managed_mapped_file move_assign;
          move_assign = boost::interprocess::move(move_ctor);
@@ -210,7 +217,7 @@
       }
    }
 
- file_mapping::remove(FileName);
+ file_mapping::remove(get_filename().c_str());
    return 0;
 }
 

Modified: branches/release/libs/interprocess/test/mapped_file_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/mapped_file_test.cpp (original)
+++ branches/release/libs/interprocess/test/mapped_file_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -18,19 +18,26 @@
 #include <cstdio>
 #include <cstring>
 #include <string>
+#include <boost/interprocess/detail/os_file_functions.hpp>
 #include "get_process_id_name.hpp"
 
 using namespace boost::interprocess;
 
 static const std::size_t FileSize = 1000;
-static const char * FileName = test::get_process_id_name();
+inline std::string get_filename()
+{
+ std::string ret (detail::get_temporary_path());
+ ret += "/";
+ ret += test::get_process_id_name();
+ return ret;
+}
 
 struct file_destroyer
 {
    ~file_destroyer()
    {
       //The last destructor will destroy the file
- file_mapping::remove(FileName);
+ file_mapping::remove(get_filename().c_str());
    }
 };
 
@@ -45,15 +52,15 @@
       <boost::interprocess::detail::file_wrapper> mapped_file;
    public:
    mapped_file_creation_test_wrapper(boost::interprocess::create_only_t)
- : mapped_file(boost::interprocess::create_only, FileName, FileSize)
+ : mapped_file(boost::interprocess::create_only, get_filename().c_str(), FileSize, read_write, 0, permissions())
    {}
 
    mapped_file_creation_test_wrapper(boost::interprocess::open_only_t)
- : mapped_file(boost::interprocess::open_only, FileName)
+ : mapped_file(boost::interprocess::open_only, get_filename().c_str(), read_write, 0)
    {}
 
    mapped_file_creation_test_wrapper(boost::interprocess::open_or_create_t)
- : mapped_file(boost::interprocess::open_or_create, FileName, FileSize)
+ : mapped_file(boost::interprocess::open_or_create, get_filename().c_str(), FileSize, read_write, 0, permissions())
    {}
 };
 
@@ -61,15 +68,15 @@
 {
    typedef boost::interprocess::detail::managed_open_or_create_impl
       <boost::interprocess::detail::file_wrapper> mapped_file;
- file_mapping::remove(FileName);
+ file_mapping::remove(get_filename().c_str());
    test::test_named_creation<mapped_file_creation_test_wrapper>();
 
    //Create and get name, size and address
    {
- mapped_file file1(create_only, FileName, FileSize);
+ mapped_file file1(create_only, get_filename().c_str(), FileSize, read_write, 0, permissions());
 
       //Compare name
- if(std::strcmp(file1.get_name(), FileName) != 0){
+ if(std::strcmp(file1.get_name(), get_filename().c_str()) != 0){
          return 1;
       }
 
@@ -81,7 +88,7 @@
       mapped_file move_assign;
       move_assign = boost::interprocess::move(move_ctor);
    }
- file_mapping::remove(FileName);
+// file_mapping::remove(get_filename().c_str());
    return 0;
 }
 

Modified: branches/release/libs/interprocess/test/memory_algorithm_test_template.hpp
==============================================================================
--- branches/release/libs/interprocess/test/memory_algorithm_test_template.hpp (original)
+++ branches/release/libs/interprocess/test/memory_algorithm_test_template.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -501,17 +501,23 @@
 
    //Now test all allocated memory is zero
    //Allocate memory
+ const char *first_addr = 0;
    for(int i = 0; true; ++i){
       void *ptr = a.allocate(i, std::nothrow);
       if(!ptr)
          break;
+ if(i == 0){
+ first_addr = (char*)ptr;
+ }
+ std::size_t memsize = a.size(ptr);
       buffers.push_back(ptr);
- }
 
- //Test allocated memory is zero
- for(int i = 0, max = buffers.size(); i < max; ++i){
- for(int j = 0; j < i; ++j){
- if(static_cast<char*>(buffers[i])[j]) return false;
+ for(int j = 0; j < (int)memsize; ++j){
+ if(static_cast<char*>((char*)ptr)[j]){
+ std::cout << "Zero memory test failed. in buffer " << i
+ << " byte " << j << " first address " << (void*) first_addr << " offset " << ((char*)ptr+j) - (char*)first_addr << " memsize: " << memsize << std::endl;
+ return false;
+ }
       }
    }
 

Modified: branches/release/libs/interprocess/test/movable_int.hpp
==============================================================================
--- branches/release/libs/interprocess/test/movable_int.hpp (original)
+++ branches/release/libs/interprocess/test/movable_int.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -79,7 +79,7 @@
 
 class movable_and_copyable_int
 {
- BOOST_COPYABLE_AND_MOVABLE(movable_and_copyable_int)
+ BOOST_INTERPROCESS_COPYABLE_AND_MOVABLE(movable_and_copyable_int)
    public:
 
    movable_and_copyable_int()

Modified: branches/release/libs/interprocess/test/mutex_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/mutex_test.cpp (original)
+++ branches/release/libs/interprocess/test/mutex_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -10,10 +10,7 @@
 
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <boost/interprocess/sync/interprocess_mutex.hpp>
-#include <boost/interprocess/sync/scoped_lock.hpp>
-#include <boost/date_time/posix_time/posix_time_types.hpp>
 #include "mutex_test_template.hpp"
-#include "named_creation_template.hpp"
 
 int main ()
 {

Modified: branches/release/libs/interprocess/test/mutex_test_template.hpp
==============================================================================
--- branches/release/libs/interprocess/test/mutex_test_template.hpp (original)
+++ branches/release/libs/interprocess/test/mutex_test_template.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,6 +27,8 @@
 #include "util.hpp"
 #include <boost/thread/thread.hpp>
 #include <iostream>
+#include <boost/interprocess/sync/scoped_lock.hpp>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
 
 namespace boost { namespace interprocess { namespace test {
 

Modified: branches/release/libs/interprocess/test/named_creation_template.hpp
==============================================================================
--- branches/release/libs/interprocess/test/named_creation_template.hpp (original)
+++ branches/release/libs/interprocess/test/named_creation_template.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -31,7 +31,7 @@
    }
    catch(...){
       //This shouldn't throw so show the error
- BOOST_INTERPROCES_CHECK(false);
+ BOOST_INTERPROCES_CHECK( false );
    }
 }
 

Modified: branches/release/libs/interprocess/test/print_container.hpp
==============================================================================
--- branches/release/libs/interprocess/test/print_container.hpp (original)
+++ branches/release/libs/interprocess/test/print_container.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -8,8 +8,8 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
-#ifndef BOOST_PRINTCONTAINER_HPP
-#define BOOST_PRINTCONTAINER_HPP
+#ifndef BOOST_INTERPROCESS_TEST_PRINTCONTAINER_HPP
+#define BOOST_INTERPROCESS_TEST_PRINTCONTAINER_HPP
 
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <functional>
@@ -61,4 +61,4 @@
 
 #include <boost/interprocess/detail/config_end.hpp>
 
-#endif //#ifndef BOOST_PRINTCONTAINER_HPP
+#endif //#ifndef BOOST_INTERPROCESS_TEST_PRINTCONTAINER_HPP

Modified: branches/release/libs/interprocess/test/shared_memory_mapping_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/shared_memory_mapping_test.cpp (original)
+++ branches/release/libs/interprocess/test/shared_memory_mapping_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -69,6 +69,9 @@
             ;++i){
             *filler++ = static_cast<unsigned char>(i);
          }
+ if(!region.flush()){
+ return 1;
+ }
       }
 
       //See if the pattern is correct in the file using two mapped regions

Modified: branches/release/libs/interprocess/test/shared_memory_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/shared_memory_test.cpp (original)
+++ branches/release/libs/interprocess/test/shared_memory_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -42,15 +42,15 @@
 
    public:
    shared_memory_creation_test_wrapper(create_only_t)
- : shared_memory(create_only, ShmName, ShmSize)
+ : shared_memory(create_only, ShmName, ShmSize, read_write, 0, permissions())
    {}
 
    shared_memory_creation_test_wrapper(open_only_t)
- : shared_memory(open_only, ShmName)
+ : shared_memory(open_only, ShmName, read_write, 0)
    {}
 
    shared_memory_creation_test_wrapper(open_or_create_t)
- : shared_memory(open_or_create, ShmName, ShmSize)
+ : shared_memory(open_or_create, ShmName, ShmSize, read_write, 0, permissions())
    {}
 };
 
@@ -64,7 +64,7 @@
       //Create and get name, size and address
       {
          shared_memory_object::remove(ShmName);
- shared_memory shm1(create_only, ShmName, ShmSize);
+ shared_memory shm1(create_only, ShmName, ShmSize, read_write, 0, permissions());
 
          //Compare name
          if(std::strcmp(shm1.get_name(), ShmName) != 0){

Modified: branches/release/libs/interprocess/test/vector_test.hpp
==============================================================================
--- branches/release/libs/interprocess/test/vector_test.hpp (original)
+++ branches/release/libs/interprocess/test/vector_test.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -8,6 +8,9 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
+#ifndef BOOST_INTERPROCESS_TEST_VECTOR_TEST_HEADER
+#define BOOST_INTERPROCESS_TEST_VECTOR_TEST_HEADER
+
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <algorithm>
 #include <memory>
@@ -246,3 +249,5 @@
 } //namespace boost{
 
 #include <boost/interprocess/detail/config_end.hpp>
+
+#endif

Modified: branches/release/libs/interprocess/test/windows_shared_memory_test.cpp
==============================================================================
--- branches/release/libs/interprocess/test/windows_shared_memory_test.cpp (original)
+++ branches/release/libs/interprocess/test/windows_shared_memory_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -42,15 +42,15 @@
 {
    public:
    shared_memory_creation_test_wrapper(create_only_t)
- : windows_shared_memory_t(create_only, name_initialization_routine(), ShmSize)
+ : windows_shared_memory_t(create_only, name_initialization_routine(), ShmSize, read_write, 0, permissions())
    {}
 
    shared_memory_creation_test_wrapper(open_only_t)
- : windows_shared_memory_t(open_only, name_initialization_routine())
+ : windows_shared_memory_t(open_only, name_initialization_routine(), read_write, 0)
    {}
 
    shared_memory_creation_test_wrapper(open_or_create_t)
- : windows_shared_memory_t(open_or_create, name_initialization_routine(), ShmSize)
+ : windows_shared_memory_t(open_or_create, name_initialization_routine(), ShmSize, read_write, 0, permissions())
    {}
 };
 

Modified: branches/release/libs/intrusive/doc/intrusive.qbk
==============================================================================
--- branches/release/libs/intrusive/doc/intrusive.qbk (original)
+++ branches/release/libs/intrusive/doc/intrusive.qbk 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2007-2009 Ion Gaztanaga
+ / Copyright (c) 2007-2010 Ion Gaztanaga
  /
  / 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)
@@ -8,7 +8,7 @@
 [library Boost.Intrusive
     [quickbook 1.4]
     [authors [Krzikalla, Olaf], [Gaztanaga, Ion]]
- [copyright 2005 Olaf Krzikalla, 2006-2009 Ion Gaztanaga]
+ [copyright 2005 Olaf Krzikalla, 2006-2010 Ion Gaztanaga]
     [id intrusive]
     [dirname intrusive]
     [purpose Intrusive containers]
@@ -198,7 +198,7 @@
    swapping can be used to implement move capabilities. To ease the implementation of
    copy constructors and assignment operators of classes storing [*Boost.Intrusive]
    containers, [*Boost.Intrusive] offers special cloning functions. See
- [link intrusive.clone_from Cloning [*Boost.Intrusive] containers] section for more information.
+ [link intrusive.clone_from Cloning Boost.Intrusive containers] section for more information.
 
 * Analyzing the thread safety of a program that uses containers is harder with intrusive containers, because
    the container might be modified indirectly without an explicit call to a container member.
@@ -246,7 +246,10 @@
 Every class to be inserted in an intrusive container, needs to contain a hook that
 will offer the necessary data and resources to be insertable in the container.
 With [*Boost.Intrusive] you just choose the hook to be a public base class or
-a public member of the class to be inserted.
+a public member of the class to be inserted. [*Boost.Intrusive] also offers
+more flexible hooks for advanced users, as explained in the chapter
+[link intrusive.function_hooks Using function hooks], but usually base or member
+hooks are good enough for most users.
 
 [section:usage_base_hook Using base hooks]
 
@@ -451,6 +454,7 @@
 
 [endsect]
 
+
 [endsect]
 
 [section:usage_when When to use?]
@@ -2147,7 +2151,7 @@
 
 [endsect]
 
-[section:clone_from Cloning [*Boost.Intrusive] containers]
+[section:clone_from Cloning Boost.Intrusive containers]
 
 As previously mentioned, [*Boost.Intrusive] containers are [*non-copyable and non-assignable], because
 intrusive containers don't allocate memory at all. To implement a copy-constructor or assignment operator,
@@ -2190,6 +2194,105 @@
 
 [endsect]
 
+[section:function_hooks Using function hooks]
+
+A programmer might find that base or member hooks are not flexible enough in some situations.
+In some applications it would be optimal to put a hook deep inside a member of a class or just outside the class.
+[*Boost.Intrusive] has an easy option to allow such cases: [classref boost::intrusive::function_hook function_hook].
+
+This option is similar to [classref boost::intrusive::member_hook member_hook] or
+[classref boost::intrusive::base_hook base_hook], but the programmer can specify a function
+object that tells the container how to obtain a hook from a value and vice versa.
+The programmer just needs to define the following function object:
+
+[c++]
+
+ //This functor converts between value_type and a hook_type
+ struct Functor
+ {
+ //Required types
+ typedef /*impl-defined*/ hook_type;
+ typedef /*impl-defined*/ hook_ptr;
+ typedef /*impl-defined*/ const_hook_ptr;
+ typedef /*impl-defined*/ value_type;
+ typedef /*impl-defined*/ pointer;
+ typedef /*impl-defined*/ const_pointer;
+ //Required static functions
+ static hook_ptr to_hook_ptr (value_type &value);
+ static const_hook_ptr to_hook_ptr(const value_type &value);
+ static pointer to_value_ptr(hook_ptr n);
+ static const_pointer to_value_ptr(const_hook_ptr n);
+ };
+
+Converting from values to hooks is generally easy, since most hooks are
+in practice members or base classes of class data members. The inverse operation
+is a bit more complicated, but [*Boost.Intrusive] offers a bit of help with the function
+[funcref boost::intrusive::get_parent_from_member get_parent_from_member],
+which allows easy conversions from the address of a data member to the address of
+the parent holding that member. Let's see a little example of
+[classref boost::intrusive::function_hook function_hook]:
+
+[import ../example/doc_function_hooks.cpp]
+[doc_function_hooks]
+
+[endsect]
+
+
+[section:recursive Recursive Boost.Intrusive containers]
+
+[*Boost.Intrusive] containers can be used to define recursive structures very easily,
+allowing complex data structures with very low overhead. Let's see an example:
+
+[import ../example/doc_recursive.cpp]
+[doc_recursive]
+
+Recursive data structures using [*Boost.Intrusive] containers must avoid using hook deduction to avoid early type
+instantiation:
+
+[c++]
+
+ //This leads to compilation error (Recursive is instantiated by
+ //'list' to deduce hook properties (pointer type, tag, safe-mode...)
+ class Recursive
+ { //...
+
+ list< Recursive > l;
+ //...
+ };
+
+ //Ok, programmer must specify the hook type to avoid early Recursive instantiation
+ class Recursive
+ { //...
+ list< Recursive, base_hook<BaseHook> > l;
+ //...
+ };
+
+
+Member hooks are not suitable for recursive structures:
+
+[c++]
+
+ class Recursive
+ {
+ private:
+ Recursive(const Recursive&);
+ Recursive & operator=(const Recursive&);
+
+ public:
+ list_member_hook<> memhook;
+ list< Recursive, member_hook<Recursive, list_member_hook<>, &Recursive::memhook> > children;
+ };
+
+Specifying `&Recursive::memhook` (that is, the offset between memhook and Recursive) provokes an early
+instantiation of `Recursive`. To define recursive structures using member hooks, a programmer should use
+[classref ::boost::interprocess::function_hook function_hook]:
+
+[import ../example/doc_recursive_member.cpp]
+[doc_recursive_member]
+
+[endsect]
+
+
 [section:using_smart_pointers Using smart pointers with Boost.Intrusive containers]
 
 [*Boost.Intrusive] hooks can be configured to use other pointers than raw pointers.
@@ -3313,7 +3416,7 @@
 
 When designing [*Boost.Intrusive] the following guidelines have been taken into account:
 
-[section: Boost.Intrusive in performance sensitive environments]
+[section:performance_sensitive Boost.Intrusive in performance sensitive environments]
 
 [*Boost.Intrusive] should be a valuable tool in performance sensitive environments,
 and following this guideline, [*Boost.Intrusive] has been designed to offer well
@@ -3327,7 +3430,7 @@
 
 [endsect]
 
-[section: Boost.Intrusive in space constrained environments]
+[section:space_constrained Boost.Intrusive in space constrained environments]
 
 [*Boost.Intrusive] should be useful in space constrained environments,
 and following this guideline [*Boost.Intrusive] separates node algorithms
@@ -3344,7 +3447,7 @@
 
 [endsect]
 
-[section: Boost.Intrusive as a basic building block]
+[section:basic_building_block Boost.Intrusive as a basic building block]
 
 [*Boost.Intrusive] can be a basic building block to build more complex containers
 and this potential has motivated many design decisions. For example, the ability
@@ -3358,7 +3461,7 @@
 
 [endsect]
 
-[section: Extending Boost.Intrusive]
+[section:extending_intrusive Extending Boost.Intrusive]
 
 [*Boost.Intrusive] offers a wide range of containers but also allows the
 construction of custom containers reusing [*Boost.Intrusive] elements.
@@ -3728,6 +3831,28 @@
 
 [section:release_notes Release Notes]
 
+[section:release_notes_boost_1_45_00 Boost 1.45 Release]
+
+* Added `function_hook` option.
+* Fixed bugs
+ [@https://svn.boost.org/trac/boost/ticket/3668 #3668],
+ [@https://svn.boost.org/trac/boost/ticket/3339 #3688],
+ [@https://svn.boost.org/trac/boost/ticket/3698 #3698],
+ [@https://svn.boost.org/trac/boost/ticket/3706 #3706],
+ [@https://svn.boost.org/trac/boost/ticket/3721 #3721].
+ [@https://svn.boost.org/trac/boost/ticket/3729 #3729],
+ [@https://svn.boost.org/trac/boost/ticket/3746 #3746],
+ [@https://svn.boost.org/trac/boost/ticket/3781 #3781],
+ [@https://svn.boost.org/trac/boost/ticket/3829 #3829],
+ [@https://svn.boost.org/trac/boost/ticket/3840 #3840],
+ [@https://svn.boost.org/trac/boost/ticket/3339 #3339],
+ [@https://svn.boost.org/trac/boost/ticket/3419 #3419],
+ [@https://svn.boost.org/trac/boost/ticket/3431 #3431],
+ [@https://svn.boost.org/trac/boost/ticket/4021 #4021],
+
+[endsect]
+
+
 [section:release_notes_boost_1_40_00 Boost 1.40 Release]
 
 * Code cleanup in tree_algorithms.hpp and avl_tree_algorithms.hpp
@@ -3849,29 +3974,4 @@
 
 [endsect]
 
-[xinclude autodoc.xml]
-
-[section:license_notices License notices]
-
-Most of the internal implementation of red-black trees is based on that of SGI STL stl_tree.h file:
-
-['Copyright (c) 1996,1997 Silicon Graphics Computer Systems, Inc.
-Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Silicon Graphics makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.]
-
-['Copyright (c) 1994 Hewlett-Packard Company
-Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Hewlett-Packard Company makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.]
-
-The tree destruction algorithm is based on Julienne Walker and The EC Team code:
-
-['This code is in the public domain. Anyone may
-use it or change it in any way that they see
-fit. The author assumes no responsibility for
-damages incurred through use of the original
-code or any variations thereof.]
-
-['It is requested, but not required, that due
-credit is given to the original author and
-anyone who has modified the code through
-a header comment, such as this one.]
-
-[endsect]
+[xinclude autodoc.xml]
\ No newline at end of file

Modified: branches/release/libs/intrusive/example/Jamfile.v2
==============================================================================
--- branches/release/libs/intrusive/example/Jamfile.v2 (original)
+++ branches/release/libs/intrusive/example/Jamfile.v2 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -25,6 +25,10 @@
       : # additional args
       : # test-files
       : # requirements
+ <toolset>acc:<linkflags>-lrt
+ <toolset>acc-pa_risc:<linkflags>-lrt
+ <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32"
+ <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
       ] ;
    }
 

Modified: branches/release/libs/intrusive/proj/vc7ide/Intrusive.sln
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/Intrusive.sln (original)
+++ branches/release/libs/intrusive/proj/vc7ide/Intrusive.sln 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -91,13 +91,19 @@
         ProjectSection(ProjectDependencies) = postProject
         EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recursive", "recursive\recursive.vcproj", "{7679B41B-F2B4-9176-CB81-35449467B435}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "function_hook", "function_hook\function_hook.vcproj", "{761A79B4-9968-CB81-F02B-2A4497345475}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
 Global
         GlobalSection(SolutionConfiguration) = preSolution
                 Debug = Debug
                 Release = Release
         EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- EndGlobalSection
         GlobalSection(ProjectConfiguration) = postSolution
                 {977B61B4-9968-497C-9F0B-24A8145473B8}.Debug.ActiveCfg = Debug|Win32
                 {977B61B4-9968-497C-9F0B-24A8145473B8}.Debug.Build.0 = Debug|Win32
@@ -191,6 +197,14 @@
                 {16E09E95-F4A2-C971-BC76-9BA407191C59}.Debug.Build.0 = Debug|Win32
                 {16E09E95-F4A2-C971-BC76-9BA407191C59}.Release.ActiveCfg = Release|Win32
                 {16E09E95-F4A2-C971-BC76-9BA407191C59}.Release.Build.0 = Release|Win32
+ {7679B41B-F2B4-9176-CB81-35449467B435}.Debug.ActiveCfg = Debug|Win32
+ {7679B41B-F2B4-9176-CB81-35449467B435}.Debug.Build.0 = Debug|Win32
+ {7679B41B-F2B4-9176-CB81-35449467B435}.Release.ActiveCfg = Release|Win32
+ {7679B41B-F2B4-9176-CB81-35449467B435}.Release.Build.0 = Release|Win32
+ {761A79B4-9968-CB81-F02B-2A4497345475}.Debug.ActiveCfg = Debug|Win32
+ {761A79B4-9968-CB81-F02B-2A4497345475}.Debug.Build.0 = Debug|Win32
+ {761A79B4-9968-CB81-F02B-2A4497345475}.Release.ActiveCfg = Release|Win32
+ {761A79B4-9968-CB81-F02B-2A4497345475}.Release.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(ExtensibilityGlobals) = postSolution
         EndGlobalSection

Modified: branches/release/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -157,6 +157,9 @@
                                 RelativePath="..\..\..\..\..\boost\intrusive\options.hpp">
                         </File>
                         <File
+ RelativePath="..\..\..\..\..\boost\intrusive\parent_from_member.hpp">
+ </File>
+ <File
                                 RelativePath="..\..\..\..\..\boost\intrusive\pointer_plus_bits.hpp">
                         </File>
                         <File
@@ -374,6 +377,9 @@
                                 RelativePath="..\..\..\example\doc_external_value_traits.cpp">
                         </File>
                         <File
+ RelativePath="..\..\..\example\doc_function_hooks.cpp">
+ </File>
+ <File
                                 RelativePath="..\..\..\example\doc_how_to_use.cpp">
                         </File>
                         <File
@@ -395,6 +401,12 @@
                                 RelativePath="..\..\..\example\doc_rbtree_algorithms.cpp">
                         </File>
                         <File
+ RelativePath="..\..\..\example\doc_recursive.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\example\doc_recursive_member.cpp">
+ </File>
+ <File
                                 RelativePath="..\..\..\example\doc_set.cpp">
                         </File>
                         <File

Modified: branches/release/libs/intrusive/proj/vc7ide/any_test/any_test.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/any_test/any_test.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/any_test/any_test.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/avl_multiset/avl_multiset.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/avl_multiset/avl_multiset.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/avl_multiset/avl_multiset.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -25,7 +25,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/avl_set/avl_set.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/avl_set/avl_set.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/avl_set/avl_set.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/custom_bucket_traits/custom_bucket_traits.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/custom_bucket_traits/custom_bucket_traits.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/custom_bucket_traits/custom_bucket_traits.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/default_hook/default_hook.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/default_hook/default_hook.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/default_hook/default_hook.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/external_value_traits/external_value_traits.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/external_value_traits/external_value_traits.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/external_value_traits/external_value_traits.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/list/list.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/list/list.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/list/list.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/make_functions/make_functions.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/make_functions/make_functions.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/make_functions/make_functions.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/multiset/multiset.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/multiset/multiset.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/multiset/multiset.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/set/set.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/set/set.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/set/set.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/sg_multiset/sg_multiset.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/sg_multiset/sg_multiset.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/sg_multiset/sg_multiset.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -25,7 +25,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/sg_set/sg_set.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/sg_set/sg_set.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/sg_set/sg_set.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/slist/slist.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/slist/slist.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/slist/slist.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/splay_multiset/splay_multiset.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/splay_multiset/splay_multiset.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/splay_multiset/splay_multiset.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -25,7 +25,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/splay_set/splay_set.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/splay_set/splay_set.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/splay_set/splay_set.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/stateful_value_traits/stateful_value_traits.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/stateful_value_traits/stateful_value_traits.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/stateful_value_traits/stateful_value_traits.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/to-do.txt
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/to-do.txt (original)
+++ branches/release/libs/intrusive/proj/vc7ide/to-do.txt 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -14,3 +14,4 @@
 -> Non-array buckets
 -> Document incremental<> option better
 -> Assure stable order for optimize_multikey and inverse order otherwise
+-> add an option to unordered containers to get O(1) traversal and begin()/end() even with very low load factors

Modified: branches/release/libs/intrusive/proj/vc7ide/treap_multiset/treap_multiset.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/treap_multiset/treap_multiset.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/treap_multiset/treap_multiset.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/treap_set/treap_set.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/treap_set/treap_set.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/treap_set/treap_set.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -24,7 +24,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/unordered_multiset/unordered_multiset.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/unordered_multiset/unordered_multiset.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/unordered_multiset/unordered_multiset.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -25,7 +25,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/unordered_set/unordered_set.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/unordered_set/unordered_set.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/unordered_set/unordered_set.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -25,7 +25,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/proj/vc7ide/virtual_base/virtual_base.vcproj
==============================================================================
--- branches/release/libs/intrusive/proj/vc7ide/virtual_base/virtual_base.vcproj (original)
+++ branches/release/libs/intrusive/proj/vc7ide/virtual_base/virtual_base.vcproj 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -27,7 +27,7 @@
                                 MinimalRebuild="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="5"
- DisableLanguageExtensions="TRUE"
+ DisableLanguageExtensions="FALSE"
                                 TreatWChar_tAsBuiltInType="TRUE"
                                 ForceConformanceInForLoopScope="TRUE"
                                 UsePrecompiledHeader="0"

Modified: branches/release/libs/intrusive/test/Jamfile.v2
==============================================================================
--- branches/release/libs/intrusive/test/Jamfile.v2 (original)
+++ branches/release/libs/intrusive/test/Jamfile.v2 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -20,10 +20,14 @@
 
    for local fileb in [ glob *.cpp ]
    {
- all_rules += [ run $(fileb)
+ all_rules += [ run $(fileb) /boost/thread//boost_thread
       : # additional args
       : # test-files
       : # requirements
+ <toolset>acc:<linkflags>-lrt
+ <toolset>acc-pa_risc:<linkflags>-lrt
+ <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32"
+ <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
       ] ;
    }
 

Modified: branches/release/libs/intrusive/test/common_functors.hpp
==============================================================================
--- branches/release/libs/intrusive/test/common_functors.hpp (original)
+++ branches/release/libs/intrusive/test/common_functors.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -29,7 +29,7 @@
    {
       typedef typename std::iterator_traits<Pointer>::value_type value_type;
       BOOST_INTRUSIVE_INVARIANT_ASSERT(( detail::is_same<T, value_type>::value ));
- delete detail::get_pointer(p);
+ delete detail::boost_intrusive_get_pointer(p);
    }
 };
 

Modified: branches/release/libs/intrusive/test/generic_assoc_test.hpp
==============================================================================
--- branches/release/libs/intrusive/test/generic_assoc_test.hpp (original)
+++ branches/release/libs/intrusive/test/generic_assoc_test.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -402,9 +402,9 @@
       
       for(vec_iterator it(--values.end()); true; --it){
          testset.push_front(*it);
- if(it == values.begin()){
+ if(it == values.begin()){
             break;
- }
+ }
       }
       BOOST_TEST(testset.size() == values.size());
       TEST_INTRUSIVE_SEQUENCE_EXPECTED(values, testset.begin());

Modified: branches/release/libs/intrusive/test/list_test.cpp
==============================================================================
--- branches/release/libs/intrusive/test/list_test.cpp (original)
+++ branches/release/libs/intrusive/test/list_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -10,10 +10,8 @@
 // See http://www.boost.org/libs/intrusive for documentation.
 //
 /////////////////////////////////////////////////////////////////////////////
-
 #include <boost/intrusive/detail/config_begin.hpp>
 #include <boost/intrusive/list.hpp>
-
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include "itestvalue.hpp"
 #include "smart_ptr.hpp"
@@ -500,4 +498,3 @@
 
    return boost::report_errors();
 }
-#include <boost/intrusive/detail/config_end.hpp>

Modified: branches/release/libs/intrusive/test/set_test.cpp
==============================================================================
--- branches/release/libs/intrusive/test/set_test.cpp (original)
+++ branches/release/libs/intrusive/test/set_test.cpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -147,6 +147,7 @@
    }
 };
 
+
 int main( int, char* [] )
 {
    test_main_template<void*, false>()();

Modified: branches/release/libs/intrusive/test/smart_ptr.hpp
==============================================================================
--- branches/release/libs/intrusive/test/smart_ptr.hpp (original)
+++ branches/release/libs/intrusive/test/smart_ptr.hpp 2010-08-26 05:27:50 EDT (Thu, 26 Aug 2010)
@@ -13,6 +13,7 @@
 
 #include <boost/iterator.hpp>
 #include <boost/intrusive/pointer_plus_bits.hpp>
+#include <boost/pointer_cast.hpp>
 
 #if (defined _MSC_VER) && (_MSC_VER >= 1200)
 # pragma once
@@ -303,16 +304,16 @@
    pt2 = ptr;
 }
 
-//!detail::get_pointer() enables boost::mem_fn to recognize smart_ptr.
+//!detail::boost_intrusive_get_pointer() enables boost::mem_fn to recognize smart_ptr.
 //!Never throws.
 template<class T>
-inline T* get_pointer(const smart_ptr<T> & p)
+inline T* boost_intrusive_get_pointer(const smart_ptr<T> & p)
 { return p.get(); }
 
 //!Simulation of static_cast between pointers. Never throws.
 template<class T, class U>
 inline smart_ptr<T>
- static_pointer_cast(smart_ptr<U> const & r)
+ static_pointer_cast(const smart_ptr<U> & r)
 {
    return smart_ptr<T>(r, detail::static_cast_tag());
 }


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