David Majnemer
8b51260274
Fix std::make_heap's worst case time complexity
...
std::make_heap is currently implemented by iteratively applying a
siftup-type algorithm. Since sift-up is O(ln n), this gives
std::make_heap a worst case time complexity of O(n ln n).
The C++ standard mandates that std::make_heap make no more than O(3n)
comparisons, this makes our std::make_heap out of spec.
Fix this by introducing an implementation of __sift_down and switch
std::make_heap to create the heap using it.
This gives std::make_heap linear time complexity in the worst case.
This fixes PR20161.
llvm-svn: 213615
2014-07-22 06:07:09 +00:00
Marshall Clow
9b0af34d96
Make the helper routines in string really be constexpr. This required a bit of refacoring in algorithm as well. Give them better names while we're at it. All of these are internal rotines; no visible functionality change.
...
llvm-svn: 210561
2014-06-10 18:51:55 +00:00
Marshall Clow
06965c1fd0
Per N3924, mark random_shuffle as deprecated in the synopsis for <algorithm>. Since we don't actually do anything when a call is deprecated, there is no functionality change. Maybe someday, we'll decide to warn when using a deprecated function.
...
llvm-svn: 202672
2014-03-03 06:14:19 +00:00
Marshall Clow
9d67c6d5fd
Implement LWG2350: min, max, and minmax should be constexpr.
...
llvm-svn: 201697
2014-02-19 16:51:35 +00:00
Howard Hinnant
5f878d4bd2
G M: Restore the ability for libcxx to compile again on mingw 64.
...
llvm-svn: 190837
2013-09-17 01:34:47 +00:00
Howard Hinnant
145afa17ca
Rename _LIBCPP_DEBUG2 to _LIBCPP_DEBUG.
...
llvm-svn: 189140
2013-08-23 20:10:18 +00:00
Howard Hinnant
fc88dbd298
Debug mode for string. This commit also marks the first time libc++ debug-mode has found a bug (found one in regex). Had to play with extern templates a bit to get this to work since string is heavily used within libc++.dylib.
...
llvm-svn: 189114
2013-08-23 17:37:05 +00:00
Howard Hinnant
179b1f8cf2
Zhihao Yuan noted that there were a few unneeded statements. Eliminated the unnecessary ones, and commented the ones that are there for non-obvious reasons such as to help things limp along in C++03 language mode.
...
llvm-svn: 189039
2013-08-22 18:29:50 +00:00
Howard Hinnant
5d1a701d6d
Xing Xue: port to IBM XLC++/AIX.
...
llvm-svn: 188396
2013-08-14 18:00:20 +00:00
Howard Hinnant
f0544c2086
Nico Rieck: this patch series fixes visibility issues on Windows as explained in < http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-August/031214.html >.
...
llvm-svn: 188192
2013-08-12 18:38:34 +00:00
Howard Hinnant
0be8f64c44
Nico Rieck: Currently _MSC_VER and _WIN32 are used to guard code which is
...
MSVC-specific, MSVCRT-specific, or Windows-specific. Because Clang can
also define _MSC_VER, and MSVCRT is not necessarily the only C runtime,
these macros should not be used interchangeably.
This patch divides all Windows-related bits into the aforementioned
categories. Two new macros are introduced:
- _LIBCPP_MSVC: Defined when compiling with MSVC. Detected using
_MSC_VER, excluding Clang.
- _LIBCPP_MSVCRT: Defined when using the Microsoft CRT. This is the default
when _WIN32 is defined.
This leaves _WIN32 for code using the Windows API.
This also corrects the spelling of _LIBCP_HAS_IS_BASE_OF to _LIBCPP_HAS_IS_BASE_OF.
Nico, please prepare a patch for CREDITS.TXT, thanks.
llvm-svn: 187593
2013-08-01 18:17:34 +00:00
Howard Hinnant
0f242bea10
Taking another swing at correctly optimizing fill_n.
...
llvm-svn: 187587
2013-08-01 17:29:28 +00:00
Howard Hinnant
ce075cf1aa
Constrain fill_n -> memset operations to include implicit convertibility to unsigned char. This fixes http://llvm.org/bugs/show_bug.cgi?id=16764 . Also a drive-by fix on a chrono test suite bug.
...
llvm-svn: 187552
2013-08-01 00:41:55 +00:00
Anders Carlsson
8bb1dbbf75
Fix a bug in std::fill_n where memset would end up being called in cases when it shouldn’t.
...
Reviewed by Howard.
llvm-svn: 186875
2013-07-22 21:08:00 +00:00
Marshall Clow
fce85ba455
Fix incorrect type usage; nice catch by Sebastian
...
llvm-svn: 181569
2013-05-10 00:16:10 +00:00
Marshall Clow
0b0bbd2f22
Implement n3607: 'equal', 'mismatch', and 'is_permutation'
...
llvm-svn: 181548
2013-05-09 21:14:23 +00:00
Howard Hinnant
b13fcad677
Somehow search_n never got tested, so of course it had a bug in it. This fixes http://llvm.org/bugs/show_bug.cgi?id=15667 .
...
llvm-svn: 178764
2013-04-04 15:40:48 +00:00
Marshall Clow
b6e5f854f5
Change the 'result_type' from unsigned to 'uint_fast32_t'. This eliminates truncation warnings on Linux
...
llvm-svn: 174669
2013-02-07 22:12:02 +00:00
Howard Hinnant
d3d4356f6e
Marcin Zalewski: Change the name of a template parameter in __copy_backward from _InputIterator to _BidirectionalIterator to better document the intent of the algorithm.
...
llvm-svn: 174544
2013-02-06 21:03:39 +00:00
Howard Hinnant
cd47cbc7a4
Provide a way to disable use of extern templates in libc++. This is intended for the clients of libc++, not the libc++ build. The dylib should always contain the extern templates. To disable the client needs to put -D'_LIBCPP_EXTERN_TEMPLATE(...)=' on the command line.
...
llvm-svn: 167486
2012-11-06 21:08:48 +00:00
Howard Hinnant
aca09de378
Performance tweaking rotate.
...
rotate is a critical algorithm because it is often used by other algorithms,
both std and non-std. The main thrust of this optimization is a specialized
algorithm when the 'distance' to be shifted is 1 (either left or right). To my
surprise, this 'optimization' was not effective for types like std::string.
std::string favors rotate algorithms which only use swap. But for types like
scalars, and especially when the sequence is random access, these new
specializations are a big win. If it is a vector<size_t> for example, the
rotate is done via a memmove and can be several times faster than the gcd
algorithm.
I'm using is_trivially_move_assignable to distinguish between types like int and
types like string. This is obviously an ad-hoc approximation, but I haven't
found a case where it doesn't give good results.
I've used a 'static if' (with is_trivially_move_assignable) in three places.
Testing with both -Os and -O3 showed that clang eliminated all code not be
executed by the 'static if' (including the 'static if' itself).
llvm-svn: 161247
2012-08-03 18:01:20 +00:00
Howard Hinnant
a1d07d57a7
<algorithm> no longer needs to include <cstdlib>, but can get away with just <cstddef>. This was brought to my attention by Salvatore Benedetto in his port to a bare-metal coretex-m3. This exposed two test bugs where an explicit #include <cstdlib> was needed.
...
llvm-svn: 160786
2012-07-26 17:09:09 +00:00
Howard Hinnant
e386b7b360
Update <random> with constexpr support. Patch contributed by Jonathan Sauer.
...
llvm-svn: 153896
2012-04-02 21:00:45 +00:00
Howard Hinnant
788c9979d9
This is an initial commit of constexpr support as proposed by Richard Smith. This by no means completes constexpr support. Indeed, it hardly scratches the surface. All it does is lay the foundation in <__config> and changes those few places in the library that are already using that foundation.
...
llvm-svn: 153856
2012-04-02 00:40:41 +00:00
Howard Hinnant
b34b48196c
The exception recovery mechanism for the uninitialized_* algorithms did not work for iterators into discontiguous memory.
...
llvm-svn: 147343
2011-12-29 17:45:35 +00:00
Howard Hinnant
c206366fd7
Quash a whole bunch of warnings
...
llvm-svn: 145624
2011-12-01 20:21:04 +00:00
Howard Hinnant
c003db1fca
Further macro protection by replacing _[A-Z] with _[A-Z]p
...
llvm-svn: 145410
2011-11-29 18:15:50 +00:00
Howard Hinnant
ab4f438239
Add protection from min/max macros
...
llvm-svn: 145407
2011-11-29 16:45:27 +00:00
Howard Hinnant
1c2c87c502
Remove redundant iterator assignment detected by Marshall Clow
...
llvm-svn: 145265
2011-11-28 19:49:26 +00:00
Howard Hinnant
0176bc6cf5
Fixed bug in __independent_bits_engine found by Nick (from stackoverflow)
...
llvm-svn: 143104
2011-10-27 16:12:10 +00:00
Howard Hinnant
e4383379ae
More windows port work by Ruben Van Boxem
...
llvm-svn: 142732
2011-10-22 20:59:45 +00:00
Howard Hinnant
073458b1ab
Windows support by Ruben Van Boxem.
...
llvm-svn: 142235
2011-10-17 20:05:10 +00:00
Howard Hinnant
f554add54e
Initial checkin for debug mode (version 2)
...
llvm-svn: 139711
2011-09-14 18:33:51 +00:00
Howard Hinnant
54976f2619
Fixed PR10574: http://llvm.org/bugs/show_bug.cgi?id=10574
...
llvm-svn: 137522
2011-08-12 21:56:02 +00:00
Howard Hinnant
ce48a1137d
_STD -> _VSTD to avoid macro clash on windows
...
llvm-svn: 134190
2011-06-30 21:18:19 +00:00
Howard Hinnant
a676f7d36a
noexcept for <utility>. This included a little repair on pair, and some noexcept workarounds.
...
llvm-svn: 132186
2011-05-27 15:04:19 +00:00
Howard Hinnant
99847d2bf1
Fix copy_n to increment only n-1 times for an input iterator. This works much better with std::istream_iterator<int>(std::cin). Credit: Matan Nassau.
...
llvm-svn: 126581
2011-02-27 20:55:39 +00:00
Howard Hinnant
a0fe8c436e
Chris Jefferson noted many places where function calls needed to be qualified (thanks Chris).
...
llvm-svn: 125510
2011-02-14 19:12:38 +00:00
Howard Hinnant
ca74048398
N3142. Many of these traits are just placeholders with medium quality emulation; waiting on compiler intrinsics to do it right.
...
llvm-svn: 119854
2010-11-19 22:17:28 +00:00
Howard Hinnant
fb34010258
LWG 1432
...
llvm-svn: 119611
2010-11-18 01:47:02 +00:00
Howard Hinnant
412dbebe1b
license change
...
llvm-svn: 119395
2010-11-16 22:09:02 +00:00
Howard Hinnant
007b26be68
Fixed bug in random_shuffle to avoid swapping with self
...
llvm-svn: 117098
2010-10-22 15:26:39 +00:00
Howard Hinnant
7609c9b665
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.
...
llvm-svn: 113086
2010-09-04 23:28:19 +00:00
Howard Hinnant
b3371f6f49
Fixing whitespace problems
...
llvm-svn: 111750
2010-08-22 00:02:43 +00:00
Howard Hinnant
4eb27b79c1
US 122, N3106
...
llvm-svn: 111742
2010-08-21 20:10:01 +00:00
Howard Hinnant
c8edcb3651
weekly test results plus a bug fix clang found
...
llvm-svn: 104877
2010-05-27 20:06:01 +00:00
Howard Hinnant
f9d540b062
Completed [alg.random.shuffle].
...
llvm-svn: 104708
2010-05-26 17:49:34 +00:00
Howard Hinnant
128ba7191d
patch by Jeffrey Yasskin for porting to Ubuntu Hardy. Everything was accepted except there were some bug fixes needed in <locale> for the __nolocale_* series. For the apple branch I ended up using templates instead of the var_args solution because it seemed both safer and more efficient.
...
llvm-svn: 104516
2010-05-24 17:49:41 +00:00
Howard Hinnant
5b08a8a432
Wiped out some non-ascii characters that snuck into the copyright.
...
llvm-svn: 103516
2010-05-11 21:36:01 +00:00
Howard Hinnant
3e519524c1
libcxx initial import
...
llvm-svn: 103490
2010-05-11 19:42:16 +00:00