You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2005/12/08 20:11:48 UTC
svn commit: r355174 - /incubator/stdcxx/trunk/include/vector
Author: sebor
Date: Thu Dec 8 11:11:43 2005
New Revision: 355174
URL: http://svn.apache.org/viewcvs?rev=355174&view=rev
Log:
2005-12-08 Martin Sebor <se...@roguewave.com>
* vector (swap): Optimized for unequal allocators.
Modified:
incubator/stdcxx/trunk/include/vector
Modified: incubator/stdcxx/trunk/include/vector
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/include/vector?rev=355174&r1=355173&r2=355174&view=diff
==============================================================================
--- incubator/stdcxx/trunk/include/vector (original)
+++ incubator/stdcxx/trunk/include/vector Thu Dec 8 11:11:43 2005
@@ -627,13 +627,19 @@
}
else { // not exception-safe
- // avoid passing the whole objects to other vecto member
- // functions in case they are implemented in terms of
- // swap(); use iterators instead
+ // avoid passing the whole object to other vector member
+ // functions (i.e., assign()) in case they are implemented
+ // in terms of swap(); use iterators instead
- vector __tmp (begin (), end ());
- assign (__other.begin (), __other.end ());
- __other.assign (__tmp.begin (), __tmp.end ());
+ vector __tmp (__other.get_allocator ());
+
+ // assert that the copy of the allocator compares equal
+ // to the original (otherwise the swap() below will cause
+ // a recursive call)
+ _RWSTD_ASSERT (__tmp.get_allocator () == __other.get_allocator ());
+
+ __tmp.assign (begin (), end ());
+ __other.swap (__tmp);
}
}