[PATCH] D52697: Bug 39129: Speeding up partition_point/lower_bound/upper_bound by using unsigned difference_type when possible.

Denis Yaroshevskiy via Phabricator reviews at reviews.llvm.org
Sat Sep 29 14:46:36 PDT 2018


dyaroshev added a comment.

Unfortunately didn't manage to run a clang-format on my changes - it kept ignoring the library settings - so probably the formatting needs to be reviewed too.

Offtopic: compiling and running benchmarks is non-trivial - I had to lurk through Makefiles to realize how to compile them and then there was a link error with file system stuff. Updating the docs would be great.



================
Comment at: include/algorithm:3216
+};
+#endif  // _LIBCPP_STD_VER >= 11
+
----------------
If you know a better metaprogramming trick to do this, would be great.


================
Comment at: include/algorithm:4106
+    }
+};
+
----------------
We are not allowed (by default) to use C++11 for this file? A simple lambda would do this much better.


================
Comment at: include/algorithm:4119
 {
-    typedef typename iterator_traits<_ForwardIterator>::difference_type difference_type;
-    difference_type __len = _VSTD::distance(__first, __last);
-    while (__len != 0)
-    {
-        difference_type __l2 = __len / 2;
-        _ForwardIterator __m = __first;
-        _VSTD::advance(__m, __l2);
-        if (__comp(*__m, __value_))
-        {
-            __first = ++__m;
-            __len -= __l2 + 1;
-        }
-        else
-            __len = __l2;
-    }
-    return __first;
+    return _VSTD::partition_point(__first, __last, __less_than<_ForwardIterator>(__comp, __value_));
 }
----------------
Code duplication between partition_point, lower_bound and upper_bound doesn't seem to have any practical value.


================
Comment at: include/algorithm:4167
+    }
+};
+
----------------
Do you know of a good way to remove code duplication? Move common parts into a base class?


Repository:
  rCXX libc++

https://reviews.llvm.org/D52697





More information about the libcxx-commits mailing list