Nikolas Klauser 4cc8860f8f
[libc++] Refactor std::equal to forward to the 3-leg overload if the size of the ranges is known (#171585)
This allows us to merge some optimizations common between the 3-leg
overload and the two ranges overload.

In some cases this could also improve performance, since we avoid
checking one of the iterators if the size if the ranges is known. I
haven't been able to show any improvements though.

This is also a prerequisite for optimizing `std::search`.
2025-12-23 09:04:12 +01:00

26 lines
963 B
C++

// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LIBCPP_TEST_STD_UTILITIES_MEMORY_SPECIALIZED_ALGORITHMS_BUFFER_H
#define LIBCPP_TEST_STD_UTILITIES_MEMORY_SPECIALIZED_ALGORITHMS_BUFFER_H
template <typename T, int N>
struct Buffer {
alignas(T) char buffer[sizeof(T) * N] = {};
T* begin() { return reinterpret_cast<T*>(buffer); }
T* end() { return begin() + N; }
const T* cbegin() const { return reinterpret_cast<const T*>(buffer); }
const T* cend() const { return cbegin() + N; }
constexpr unsigned size() const { return N; }
};
#endif // LIBCPP_TEST_STD_UTILITIES_MEMORY_SPECIALIZED_ALGORITHMS_BUFFER_H