
Hi to all, I've just uploaded a new Interprocess version. It's an ABI/Source breaking release that is a bit experimental, because the library has suffered many implementation changes: * Implemented N1780 proposal to LWG issue 233: Insertion hints in associative containers in interprocess boost::interprocess::multiset and boost::interprocess::multimap class. * Source breaking: A shared memory object is now used including shared_memory_object.hpp header instead of shared memory.hpp. * ABI breaking: Changed global mutex when initializing managed shared memory and memory mapped files. This change tries to minimize deadlocks. [Note: This feature is experimental, and tries to avoid global Inteprocess deadlock when a process crashes holding the global lock. Now, the shared memory/memory mapped file contents are used to synchronize processes. Not sure if this change will be a step forward but, I need to know if users find it better than the old, global lock approach] * Source breaking: Changed shared memory, memory mapped files and mapped region's open mode to a single boost::interprocess::mode_t type. * Added extra WIN32_LEAN_AND_MEAN before including DateTime headers to avoid socket redefinition errors when using Interprocess and Asio in windows. * ABI breaking: mapped_region constructor no longer requires classes derived from memory_mappable, but classes that match the MemoryMappable concept (interface). * Added in-place reallocation capabilities to basic_string. * ABI breaking: Reimplemented and optimized small string optimization. The narrow string class has zero byte overhead with an internal 11 byte buffer in 32 systems! * Added move semantics to containers. Experimental and not documented yet. Improves performance when using containers of containers. * ABI breaking: End nodes of node containers (list, slist, map/set) are now embedded in the containers instead of allocated using the allocator. This allows no-throw move-constructors and improves performance. * ABI breaking: slist and list containers now have constant-time size() function. The size of the container is added as a member. Future work: -> I'm now working in Intrusive containers, adding non-raw pointer support. I want to base my container implementations in Intrusive, so I plan to pass Interprocess containers code to Intrusive code. My goal is to make sure that with Intrusive, everyone can construct containers easily. -> I plan to optimize tree containers embedding red/black bit in the parent pointer, to reduce the overhead of a node from 4 words to 3 words. I want to make this possible also with smart pointers. -> I want to use Intrusive containers to program more efficient memory allocation algorithms and name-object indexes. -> Implementation of process-shared sharable_mutex and convertible_mutex classes from N2094. -> Bug fixes. Regards, Ion