|
Boost-Commit : |
From: igaztanaga_at_[hidden]
Date: 2008-06-21 05:08:14
Author: igaztanaga
Date: 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
New Revision: 46574
URL: http://svn.boost.org/trac/boost/changeset/46574
Log:
gcc 4.3 fixes for normal and -std=c++0x modes
Added:
trunk/libs/interprocess/example/doc_complex_map.cpp (contents, props changed)
trunk/libs/interprocess/proj/vc7ide/doc_complex_map.vcproj (contents, props changed)
trunk/libs/interprocess/proj/vc7ide/enable_shared_from_this_test.vcproj (contents, props changed)
Text files modified:
trunk/libs/interprocess/doc/interprocess.qbk | 108 +++++++++++++++++++++++++++++++++------
trunk/libs/interprocess/example/doc_managed_copy_on_write.cpp | 25 ++++++--
trunk/libs/interprocess/example/doc_move_containers.cpp | 4
trunk/libs/interprocess/example/doc_shared_memory2.cpp | 2
trunk/libs/interprocess/proj/to-do.txt | 20 -------
trunk/libs/interprocess/proj/vc7ide/Interprocess.sln | 16 +++++
6 files changed, 128 insertions(+), 47 deletions(-)
Modified: trunk/libs/interprocess/doc/interprocess.qbk
==============================================================================
--- trunk/libs/interprocess/doc/interprocess.qbk (original)
+++ trunk/libs/interprocess/doc/interprocess.qbk 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -171,6 +171,9 @@
[import ../example/doc_map.cpp]
[doc_map]
+For a more advanced example including containers of containers, see the section
+[link interprocess.allocators_containers.containers_explained.containers_of_containers Containers of containers].
+
[endsect]
[endsect]
@@ -2162,7 +2165,8 @@
[section:lock_conversions Lock Transfers Through Move Semantics]
-[blurb [*Interprocess uses its own move semantics emulation code.
+[blurb [*Interprocess uses its own move semantics emulation code for compilers
+that don't support rvalues references.
This is a temporary solution until a Boost move semantics library is accepted.]]
Scoped locks and similar utilities offer simple resource management possibilities,
@@ -3260,21 +3264,6 @@
we will use managed shared memory in our examples. We can do the same with
memory mapped files or other managed memory segment classes.
-[section:copy_on_write Opening managed shared memory and mapped files with Copy On Write mode]
-
-When mapping a memory segment based on shared memory or files, there is an option to
-open them using `open_copy_on_write` option. This option is similar to `open_only` but
-every change the programmer does with this managed segment is kept private to this process
-and is not translated to the underlying device (shared memory or file).
-
-The underlying shared memory or file is opened as read-only so several processes can
-share an initial managed segment and make private changes to it. Here's an example:
-
-[import ../example/doc_managed_copy_on_write.cpp]
-[doc_managed_copy_on_write]
-
-[endsect]
-
[section:allocate_deallocate Allocating fragments of a managed memory segment]
If a basic raw-byte allocation is needed from a managed memory
@@ -3569,6 +3558,36 @@
[endsect]
+[section:managed_memory_segment_atomic_func Executing an object function atomically]
+
+Sometimes the programmer must execute some code, and needs to execute it with the
+guarantee that no other process or thread will create or destroy any named, unique
+or anonymous object while executing the functor. A user might want to create several
+named objects and initialize them, but those objects should be available for the rest of processes
+at once.
+
+To achieve this, the programmer can use the `atomic_func()` function offered by
+managed classes:
+
+[c++]
+
+ //This object function will create several named objects
+ create_several_objects_func func(/**/);
+
+ //While executing the function, no other process will be
+ //able to create or destroy objects
+ managed_memory.atomic_func(func);
+
+
+Note that `atomic_func` does not prevent other processes from allocating raw memory
+or executing member functions for already constructed objects (e.g.: another process
+might be pushing elements into a vector placed in the segment). The atomic function
+only blocks named, unique and anonymous creation, search and destruction
+(concurrent calls to `construct<>`, `find<>`, `find_or_construct<>`, `destroy<>`...)
+from other processes.
+
+[endsect]
+
[endsect]
[section:managed_memory_segment_advanced_features Managed Memory Segment Advanced Features]
@@ -3985,6 +4004,43 @@
[endsect]
+[section:copy_on_write_read_only Opening managed shared memory and mapped files with Copy On Write or Read Only modes]
+
+When mapping a memory segment based on shared memory or files, there is an option to
+open them using [*open_copy_on_write] option. This option is similar to `open_only` but
+every change the programmer does with this managed segment is kept private to this process
+and is not translated to the underlying device (shared memory or file).
+
+The underlying shared memory or file is opened as read-only so several processes can
+share an initial managed segment and make private changes to it. If many processes
+open a managed segment in copy on write mode and not modified pages from the managed
+segment will be shared between all those processes, with considerable memory savings.
+
+Opening managed shared memory and mapped files with [*open_read_only] maps the the
+underlying device in memory with [*read-only] attributes. This means that any attempt
+to write that memory, either creating objects or locking any mutex might result in an
+page-fault error (and thus, program termination) from the OS. Read-only mode opens
+the underlying device (shared memory, file...) in read-only mode and
+can result in considerable memory savings if several processes just want to process
+a managed memory segment without modifying it. Read-only mode operations are limited:
+
+* Read-only mode must be used only from managed classes. If the programmer obtains
+ the segment manager and tries to use it directly it might result in an access violation.
+ The reason for this is that the segment manager is placed in the underlying device
+ and does not nothing about the mode it's been mapped in memory.
+
+* Only const member functions from managed segments should be used.
+
+* Additionally, the `find<>` member function avoids using internal locks and can be
+ used to look for named and unique objects.
+
+Here's an example that shows the use of these two open modes:
+
+[import ../example/doc_managed_copy_on_write.cpp]
+[doc_managed_copy_on_write]
+
+[endsect]
+
[endsect]
[section:managed_heap_memory_external_buffer Managed Heap Memory And Managed External Buffer]
@@ -4983,6 +5039,21 @@
[endsect]
+[section:containers_of_containers Containers of containers]
+
+When creating containers of containers, each container needs an allocator.
+To avoid using several allocators with complex type definitions, we can take
+advantage of the type erasure provided by void allocators and the ability
+to implicitly convert void allocators in allocators that allocate other types.
+
+Here we have an example that builds a map in shared memory. Key is a string
+and the mapped type is a class that stores several containers:
+
+[import ../example/doc_complex_map.cpp]
+[doc_complex_map]
+
+[endsect]
+
[endsect]
[section:additional_containers Boost containers compatible with Boost.Interprocess]
@@ -6475,7 +6546,10 @@
* Added anonymous shared memory for UNIX systems.
* Fixed erroneous `void` return types from `flat_map::erase()` functions.
* Fixed missing move semantics on managed memory classes.
-* Added copy_on_write option for shared memory and mapped file managed classes.
+* Added copy_on_write and open_read_only options for shared memory and mapped file managed classes.
+* [*ABI breaking]: Added to `mapped_region` the mode used to create it.
+* Corrected instantiation errors in void allocators.
+* `shared_ptr` is movable and supports aliasing.
[endsect]
Added: trunk/libs/interprocess/example/doc_complex_map.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/interprocess/example/doc_complex_map.cpp 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -0,0 +1,81 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2006-2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+//[doc_complex_map
+#include <boost/interprocess/managed_shared_memory.hpp>
+#include <boost/interprocess/allocators/allocator.hpp>
+#include <boost/interprocess/containers/map.hpp>
+#include <boost/interprocess/containers/vector.hpp>
+#include <boost/interprocess/containers/string.hpp>
+
+using namespace boost::interprocess;
+
+//Typedefs of allocators and containers
+typedef managed_shared_memory::segment_manager segment_manager_t;
+typedef allocator<void, segment_manager_t> void_allocator;
+typedef allocator<int, segment_manager_t> int_allocator;
+typedef vector<int, int_allocator> int_vector;
+typedef allocator<int_vector, segment_manager_t> int_vector_allocator;
+typedef vector<int_vector, int_vector_allocator> int_vector_vector;
+typedef allocator<char, segment_manager_t> char_allocator;
+typedef basic_string<char, std::char_traits<char>, char_allocator> char_string;
+
+class complex_data
+{
+ int id_;
+ char_string char_string_;
+ int_vector_vector int_vector_vector_;
+
+ public:
+ //Since void_allocator is convertible to any other allocator<T>, we can simplify
+ //the initialization taking just one allocator for all inner containers.
+ complex_data(int id, const char *name, const void_allocator &void_alloc)
+ : id_(id), char_string_(name, void_alloc), int_vector_vector_(void_alloc)
+ {}
+ //Other members...
+};
+
+//Definition of the map holding a string as key and complex_data as mapped type
+typedef std::pair<const char_string, complex_data> map_value_type;
+typedef std::pair<char_string, complex_data> movable_to_map_value_type;
+typedef allocator<map_value_type, segment_manager_t> map_value_type_allocator;
+typedef map< char_string, complex_data
+ , std::less<char_string>, map_value_type_allocator> complex_map_type;
+
+int main ()
+{
+ shared_memory_object::remove("MySharedMemory");
+ remove_shared_memory_on_destroy remove_on_destroy("MySharedMemory");
+ {
+ //Create shared memory
+ managed_shared_memory segment(create_only,"MySharedMemory", 65536);
+
+ //An allocator convertible to any allocator<T, segment_manager_t> type
+ void_allocator alloc_inst (segment.get_segment_manager());
+
+ //Construct the shared memory map and fill it
+ complex_map_type *mymap = segment.construct<complex_map_type>
+ //(object name), (first ctor parameter, second ctor parameter)
+ ("MyMap")(std::less<char_string>(), alloc_inst);
+
+ for(int i = 0; i < 100; ++i){
+ //Both key(string) and value(complex_data) need an allocator in their constructors
+ char_string key_object(alloc_inst);
+ complex_data mapped_object(i, "default_name", alloc_inst);
+ map_value_type value(key_object, mapped_object);
+ //Modify values and insert them in the map
+ mymap->insert(value);
+ }
+ }
+ return 0;
+}
+//]
+#include <boost/interprocess/detail/config_end.hpp>
Modified: trunk/libs/interprocess/example/doc_managed_copy_on_write.cpp
==============================================================================
--- trunk/libs/interprocess/example/doc_managed_copy_on_write.cpp (original)
+++ trunk/libs/interprocess/example/doc_managed_copy_on_write.cpp 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -12,6 +12,7 @@
#include <boost/interprocess/managed_mapped_file.hpp>
#include <fstream> //std::fstream
#include <cstdio> //std::remove
+#include <iterator>//std::distance
int main()
{
@@ -20,8 +21,10 @@
//Try to erase any previous managed segment with the same name
std::remove("MyManagedFile");
std::remove("MyManagedFile2");
+ remove_file_on_destroy destroyer1("MyManagedFile");
+ remove_file_on_destroy destroyer2("MyManagedFile2");
- try{
+ {
//Create an named integer in a managed mapped file
managed_mapped_file managed_file(create_only, "MyManagedFile", 65536);
managed_file.construct<int>("MyInt")(0u);
@@ -43,7 +46,7 @@
throw int(0);
{ //Dump the modified copy on write segment to a file
- std::fstream file("MyManagedFile2", std::ios_base::out | std::ios_base::trunc | std::ios_base::binary);
+ std::fstream file("MyManagedFile2", std::ios_base::out | std::ios_base::binary);
if(!file)
throw int(0);
file.write((const char *)managed_file_cow.get_address(), managed_file_cow.get_size());
@@ -54,13 +57,19 @@
if(managed_file_cow2.find<int>("MyInt").first && !managed_file_cow2.find<int>("MyInt2").first)
throw int(0);
}
- catch(...){
- std::remove("MyManagedFile");
- std::remove("MyManagedFile2");
- throw;
+ {
+ //Now create a read-only version
+ managed_mapped_file managed_file_ro(open_read_only, "MyManagedFile");
+
+ //Check the original is intact
+ if(!managed_file_ro.find<int>("MyInt").first && managed_file_ro.find<int>("MyInt2").first)
+ throw int(0);
+
+ //Check the number of named objects using the iterators
+ if(std::distance(managed_file_ro.named_begin(), managed_file_ro.named_end()) != 1 &&
+ std::distance(managed_file_ro.unique_begin(), managed_file_ro.unique_end()) != 0 )
+ throw int(0);
}
- std::remove("MyManagedFile");
- std::remove("MyManagedFile2");
return 0;
}
//]
Modified: trunk/libs/interprocess/example/doc_move_containers.cpp
==============================================================================
--- trunk/libs/interprocess/example/doc_move_containers.cpp (original)
+++ trunk/libs/interprocess/example/doc_move_containers.cpp 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -53,7 +53,7 @@
//In the following line, no string copy-constructor will be called.
//"move_me"'s contents will be transferred to the string created in
//the vector
- myshmvector->push_back(move(move_me));
+ myshmvector->push_back(boost::interprocess::move(move_me));
//The source string is in default constructed state
assert(move_me.empty());
@@ -69,7 +69,7 @@
//No string copy-constructor or assignments will be called, but
//move constructors and move-assignments. No memory allocation
//function will be called in this operations!!
- myshmvector->insert(myshmvector->begin(), move(string_to_compare));
+ myshmvector->insert(myshmvector->begin(), boost::interprocess::move(string_to_compare));
//Destroy vector. This will free all strings that the vector contains
shm.destroy_ptr(myshmvector);
Modified: trunk/libs/interprocess/example/doc_shared_memory2.cpp
==============================================================================
--- trunk/libs/interprocess/example/doc_shared_memory2.cpp (original)
+++ trunk/libs/interprocess/example/doc_shared_memory2.cpp 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -33,13 +33,13 @@
}
}
std::cout << "Test successful!" << std::endl;
- shared_memory_object::remove("shared_memory");
}
catch(interprocess_exception &ex){
std::cout << "Unexpected exception: " << ex.what() << std::endl;
shared_memory_object::remove("shared_memory");
return 1;
}
+ shared_memory_object::remove("shared_memory");
return 0;
}
//]
Modified: trunk/libs/interprocess/proj/to-do.txt
==============================================================================
--- trunk/libs/interprocess/proj/to-do.txt (original)
+++ trunk/libs/interprocess/proj/to-do.txt 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -24,25 +24,11 @@
-> Add default algorithm and index types. The user does not need to know how are
they implemented.
--> Add private mapping to managed classes.
-
--> Add unique_ptr documentation.
-
-> Pass max size check in allocation to node pools
--> Add atomic_func explanation in docs
-
--> Once shrink to fit indexes is implemented test all memory has been deallocated
- in tests to detect leaks/implementation failures.
-
--> Improve allocate_many functions to allocate all the nodes forming a singly
- linked list of nodes.
-
-> Use in-place expansion capabilities to shrink_to_fit and reserve functions
from iunordered_index.
--> Optimize copy_n with std::copy in vector. Revise other functions to improve optimizations
-
-> Keep an eye on container iterator constness issue to bring Interprocess containers up-to-date.
-> change unique_ptr to avoid using compressed_pair
@@ -51,10 +37,6 @@
-> barrier_test fails on MacOS X on PowerPC.
--> void allocator instantiations fail.
-
--> Read-only managed classes. They should avoid internal locking and map memory as read-only
-
-> add private_read_only to mapped_region to support MAP_PRIVATE plus PROT_READ
--> add contiguous_elements option to burst allocation
+-> add contiguous_elements option to burst allocation
\ No newline at end of file
Modified: trunk/libs/interprocess/proj/vc7ide/Interprocess.sln
==============================================================================
--- trunk/libs/interprocess/proj/vc7ide/Interprocess.sln (original)
+++ trunk/libs/interprocess/proj/vc7ide/Interprocess.sln 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -451,6 +451,14 @@
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enable_shared_from_this_test", "enable_shared_from_this_test.vcproj", "{571C3483-87C7-6921-1238-B086B3E766C9}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doc_complex_map", "doc_complex_map.vcproj", "{5C19CF83-4FB7-8219-8F6D-3BA9D2715A22}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
@@ -911,6 +919,14 @@
{8E0C437E-3613-FD46-F3AE-876A0731CA85}.Debug.Build.0 = Debug|Win32
{8E0C437E-3613-FD46-F3AE-876A0731CA85}.Release.ActiveCfg = Release|Win32
{8E0C437E-3613-FD46-F3AE-876A0731CA85}.Release.Build.0 = Release|Win32
+ {571C3483-87C7-6921-1238-B086B3E766C9}.Debug.ActiveCfg = Debug|Win32
+ {571C3483-87C7-6921-1238-B086B3E766C9}.Debug.Build.0 = Debug|Win32
+ {571C3483-87C7-6921-1238-B086B3E766C9}.Release.ActiveCfg = Release|Win32
+ {571C3483-87C7-6921-1238-B086B3E766C9}.Release.Build.0 = Release|Win32
+ {5C19CF83-4FB7-8219-8F6D-3BA9D2715A22}.Debug.ActiveCfg = Debug|Win32
+ {5C19CF83-4FB7-8219-8F6D-3BA9D2715A22}.Debug.Build.0 = Debug|Win32
+ {5C19CF83-4FB7-8219-8F6D-3BA9D2715A22}.Release.ActiveCfg = Release|Win32
+ {5C19CF83-4FB7-8219-8F6D-3BA9D2715A22}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
Added: trunk/libs/interprocess/proj/vc7ide/doc_complex_map.vcproj
==============================================================================
--- (empty file)
+++ trunk/libs/interprocess/proj/vc7ide/doc_complex_map.vcproj 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="doc_complex_map"
+ ProjectGUID="{5C19CF83-4FB7-8219-8F6D-3BA9D2715A22}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="../../Bin/Win32/Debug"
+ IntermediateDirectory="Debug/doc_complex_map"
+ 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_complex_map_d.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="../../../../stage/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/doc_complex_map.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_complex_map"
+ 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_complex_map.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="{4F53F3C1-7643-7A5F-A066-256A2EBF5C2A}">
+ <File
+ RelativePath="..\..\example\doc_complex_map.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: trunk/libs/interprocess/proj/vc7ide/enable_shared_from_this_test.vcproj
==============================================================================
--- (empty file)
+++ trunk/libs/interprocess/proj/vc7ide/enable_shared_from_this_test.vcproj 2008-06-21 05:08:13 EDT (Sat, 21 Jun 2008)
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="enable_shared_from_this_test"
+ ProjectGUID="{571C3483-87C7-6921-1238-B086B3E766C9}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="../../Bin/Win32/Debug"
+ IntermediateDirectory="Debug/enable_shared_from_this_test"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
+ MinimalRebuild="TRUE"
+ ExceptionHandling="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="FALSE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="winmm.lib"
+ OutputFile="$(OutDir)/enable_shared_from_this_test_d.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="../../../../stage/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/enable_shared_from_this_test.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/enable_shared_from_this_test"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
+ RuntimeLibrary="2"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="FALSE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="winmm.lib"
+ OutputFile="$(OutDir)/enable_shared_from_this_test.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="{F16F3144-4A07-4A37-9843-20FA2537BEBC}">
+ <File
+ RelativePath="..\..\test\enable_shared_from_this_test.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
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