Howard Hinnant
|
d586248597
|
Add test for self-referencing emplace test.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159921 91177308-0d34-0410-b5e6-96231b3b80d8
|
2012-07-09 02:47:43 +00:00 |
|
Howard Hinnant
|
7a44515588
|
This commit establishes a new bucket_count policy in the unordered containers: The policy now allows a power-of-2 number of buckets to be requested (and that request honored) by the client. And if the number of buckets is set to a power of 2, then the constraint of the hash to the number of buckets uses & instead of %. If the client does not specify a number of buckets, then the policy remains unchanged: a prime number of buckets is selected. The growth policy is that the number of buckets is roughly doubled when needed. While growing, either the prime, or the power-of-2 strategy will be preserved. There is a small run time cost for putting in this switch. For very cheap hash functions, e.g. identity for int, the cost can be as high as 18%. However with more typical use cases, e.g. strings, the cost is in the noise level. I've measured cases with very cheap hash functions (int) that using a power-of-2 number of buckets can make look up about twice as fast. However I've also noted that a power-of-2 number of buckets is more susceptible to accidental catastrophic collisions. Though I've also noted that accidental catastrophic collisions are also possible when using a prime number of buckets (but seems far less likely). In short, this patch adds an extra tuning knob for those clients trying to get the last bit of performance squeezed out of their hash containers. Casual users of the hash containers will not notice the introduction of this tuning knob. Those clients who swear by power-of-2 hash containers can now opt-in to that strategy. Clients who prefer a prime number of buckets can continue as they have.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159836 91177308-0d34-0410-b5e6-96231b3b80d8
|
2012-07-06 17:31:14 +00:00 |
|
Howard Hinnant
|
635ce1d127
|
The rules for emplace in map, multimap, unordered_map and unordered_multimap changed a while back and I'm just now updating to these new rules. In a nutshell, you've got to know you're emplacing to a pair and use one of pair's constructors. I made one extension: If you want to emplace the key and default construct the mapped_type, you can just emplace(key), as opposed to emplace(piecewise_construct, forward_as_tuple(key), forward_as_tuple()).
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@157503 91177308-0d34-0410-b5e6-96231b3b80d8
|
2012-05-25 22:04:21 +00:00 |
|
Howard Hinnant
|
f836d531b4
|
unord test fixes by Edward Meewis
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@145707 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-12-02 21:23:14 +00:00 |
|
Howard Hinnant
|
1c3ec6d480
|
Another installment on debug mode. This addresses list. However this should be considered a temporary state. The API of the debug database and how vector and list use it, is unsatisfactory at the moment. It is both inefficient and overly verbose. I wanted to get this functionality checked in though. In the next day or so I'll refactor what is there in an attempt to streamline things.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@140660 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-09-27 23:55:03 +00:00 |
|
Howard Hinnant
|
0442b12591
|
The vector test suite now passes for no-debug, debug-lite and debug-regular
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@139930 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-09-16 18:41:29 +00:00 |
|
Howard Hinnant
|
e3e3291f3a
|
Fixed PR10574: http://llvm.org/bugs/show_bug.cgi?id=10574
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@137522 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-08-12 21:56:02 +00:00 |
|
Howard Hinnant
|
58cd8231d8
|
noexcept for <stack>. This completes noexcept for Chapter 23 [containers].
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132652 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-04 22:09:19 +00:00 |
|
Howard Hinnant
|
6a09441022
|
noexcept for <queue>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132650 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-04 21:32:33 +00:00 |
|
Howard Hinnant
|
04dae1df22
|
noexcept for <unordered_set>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132647 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-04 20:18:37 +00:00 |
|
Howard Hinnant
|
5f2f14c5d2
|
noexcept for <unordered_map>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132646 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-04 18:54:24 +00:00 |
|
Howard Hinnant
|
b2e2a8f6f3
|
noexcept for <set>. Plus a few fixes to noexcept for <map>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132640 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-04 15:22:34 +00:00 |
|
Howard Hinnant
|
7686add61e
|
noexcept for <map>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132639 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-04 14:31:57 +00:00 |
|
Howard Hinnant
|
d1d27a4afa
|
noexcept for <vector>. This also includes installing move_if_noexcept() into vector.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132577 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-03 19:40:40 +00:00 |
|
Howard Hinnant
|
c560727d5e
|
noexcept for <list>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132562 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-03 17:30:28 +00:00 |
|
Howard Hinnant
|
b965fed10b
|
noexcept for <forward_list>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132553 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-03 16:20:53 +00:00 |
|
Howard Hinnant
|
009b2c4583
|
After sleeping on it I've decided that all special members that can be noexcept, should be declared so. The client has the traits to detect and branch on this information, and it is often an important optimization. Give deque() a noexcept. Add test for deque default constructor and deque destructor.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132549 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-03 15:16:49 +00:00 |
|
Howard Hinnant
|
93f2764b16
|
Add noexcept tests for deque.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132523 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-06-03 01:46:22 +00:00 |
|
Howard Hinnant
|
2d01bf0665
|
Suppress some warings in the tests.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@131326 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-05-13 23:59:50 +00:00 |
|
Howard Hinnant
|
3e93e96dff
|
Corrected tests for http://llvm.org/bugs/show_bug.cgi?id=9351
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@128807 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-04-04 01:42:30 +00:00 |
|
Howard Hinnant
|
b8a03c763a
|
... And these wonderful tests.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@128797 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-04-03 20:06:31 +00:00 |
|
Howard Hinnant
|
211f0ee1be
|
Bug 9096 - list::iterator not default constructible
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@124508 91177308-0d34-0410-b5e6-96231b3b80d8
|
2011-01-28 23:46:28 +00:00 |
|
Howard Hinnant
|
cd2254b454
|
LWG 1191
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119545 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-11-17 19:52:17 +00:00 |
|
Howard Hinnant
|
b64f8b07c1
|
license change
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119395 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-11-16 22:09:02 +00:00 |
|
Howard Hinnant
|
0d5dff1897
|
Fix two test bugs
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@116515 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-10-14 21:08:32 +00:00 |
|
Howard Hinnant
|
e764f0b648
|
Updated by-chapter-summary with weekly test results, and fixed up some bad paths in some tests caused by aligning the test suite with N3126.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@113403 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-09-08 20:31:42 +00:00 |
|
Howard Hinnant
|
3991b553df
|
sync with N3126
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@113101 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-09-05 01:14:30 +00:00 |
|
Howard Hinnant
|
73d21a4f07
|
Changed __config to react to all of clang's currently documented has_feature flags, and renamed _LIBCPP_MOVE to _LIBCPP_HAS_NO_RVALUE_REFERENCES to be more consistent with the rest of the libc++'s flags, and with clang's nomenclature.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@113086 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-09-04 23:28:19 +00:00 |
|
Howard Hinnant
|
6046aced82
|
Fixing whitespace problems
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111755 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-08-22 00:15:28 +00:00 |
|
Howard Hinnant
|
7a2523b201
|
US 117
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111745 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-08-21 20:58:44 +00:00 |
|
Howard Hinnant
|
ba590bdc97
|
LWG 1278
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111532 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-08-19 17:40:04 +00:00 |
|
Howard Hinnant
|
f5256e16df
|
Wiped out some non-ascii characters that snuck into the copyright.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103516 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-05-11 21:36:01 +00:00 |
|
Howard Hinnant
|
bc8d3f97eb
|
libcxx initial import
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490 91177308-0d34-0410-b5e6-96231b3b80d8
|
2010-05-11 19:42:16 +00:00 |
|