| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 181569
|
|
|
|
| |
llvm-svn: 181548
|
|
|
|
|
|
| |
fixes http://llvm.org/bugs/show_bug.cgi?id=15667.
llvm-svn: 178764
|
|
|
|
|
|
| |
truncation warnings on Linux
llvm-svn: 174669
|
|
|
|
|
|
| |
from _InputIterator to _BidirectionalIterator to better document the intent of the algorithm.
llvm-svn: 174544
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
<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
|
|
|
|
| |
llvm-svn: 153896
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
work for iterators into discontiguous memory.
llvm-svn: 147343
|
|
|
|
| |
llvm-svn: 145624
|
|
|
|
| |
llvm-svn: 145410
|
|
|
|
| |
llvm-svn: 145407
|
|
|
|
| |
llvm-svn: 145265
|
|
|
|
| |
llvm-svn: 143104
|
|
|
|
| |
llvm-svn: 142732
|
|
|
|
| |
llvm-svn: 142235
|
|
|
|
| |
llvm-svn: 139711
|
|
|
|
| |
llvm-svn: 137522
|
|
|
|
| |
llvm-svn: 134190
|
|
|
|
|
|
| |
noexcept workarounds.
llvm-svn: 132186
|
|
|
|
|
|
| |
much better with std::istream_iterator<int>(std::cin). Credit: Matan Nassau.
llvm-svn: 126581
|
|
|
|
|
|
| |
qualified (thanks Chris).
llvm-svn: 125510
|
|
|
|
|
|
| |
emulation; waiting on compiler intrinsics to do it right.
llvm-svn: 119854
|
|
|
|
| |
llvm-svn: 119611
|
|
|
|
| |
llvm-svn: 119395
|
|
|
|
| |
llvm-svn: 117098
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 111750
|
|
|
|
| |
llvm-svn: 111742
|
|
|
|
| |
llvm-svn: 104877
|
|
|
|
| |
llvm-svn: 104708
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 103516
|
|
llvm-svn: 103490
|