https://github.com/bassiounix created https://github.com/llvm/llvm-project/pull/174820
None >From 46f91c8d9fc3b8e037217b5d5c44a300297e4791 Mon Sep 17 00:00:00 2001 From: bassiounix <[email protected]> Date: Wed, 7 Jan 2026 20:08:51 +0200 Subject: [PATCH] [libc][wctype] Upstream enumerate header from PtrHash-cc prototype to LLVM libc --- .../wctype/conversion/utils/CMakeLists.txt | 10 +++ .../wctype/conversion/utils/enumerate.hpp | 66 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 libc/src/__support/wctype/conversion/utils/enumerate.hpp diff --git a/libc/src/__support/wctype/conversion/utils/CMakeLists.txt b/libc/src/__support/wctype/conversion/utils/CMakeLists.txt index 2dcf45e4a0105..492b782c984c8 100644 --- a/libc/src/__support/wctype/conversion/utils/CMakeLists.txt +++ b/libc/src/__support/wctype/conversion/utils/CMakeLists.txt @@ -1,3 +1,13 @@ +add_header_library( + enumerate + HDRS + enumerate.h + DEPENDS + libc.hdr.types.size_t + libc.src.__support.CPP.tuple + libc.src.__support.common +) + add_header_library( slice HDRS diff --git a/libc/src/__support/wctype/conversion/utils/enumerate.hpp b/libc/src/__support/wctype/conversion/utils/enumerate.hpp new file mode 100644 index 0000000000000..74f6a568c935f --- /dev/null +++ b/libc/src/__support/wctype/conversion/utils/enumerate.hpp @@ -0,0 +1,66 @@ +//===-- Internal utils for wctype conversion code - enumerate ---*- 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 LLVM_LIBC_SRC___SUPPORT_WCTYPE_CONVERSION_UTILS_ENUMERATE_HPP +#define LLVM_LIBC_SRC___SUPPORT_WCTYPE_CONVERSION_UTILS_ENUMERATE_HPP + +#include "hdr/types/size_t.h" +#include "src/__support/CPP/tuple.h" +#include "src/__support/common.h" + +namespace LIBC_NAMESPACE_DECL { + +namespace internal_wctype_conversion_utils { + +namespace { + +template <typename Iterable> struct Enumerate { + Iterable &iterable; + + struct Iterator { + size_t index; + decltype(iterable.begin()) it; + + LIBC_INLINE constexpr auto operator*() const { + return cpp::tuple<size_t, decltype(*it)>(index, *it); + } + + LIBC_INLINE constexpr Iterator &operator++() { + ++index; + ++it; + return *this; + } + + LIBC_INLINE constexpr bool operator!=(const Iterator &other) const { + return it != other.it; + } + }; + + LIBC_INLINE constexpr Iterator begin() const { return {0, iterable.begin()}; } + + LIBC_INLINE constexpr Iterator end() const { return {0, iterable.end()}; } +}; + +} // namespace + +template <typename Iterable> +LIBC_INLINE static constexpr Enumerate<Iterable> enumerate(Iterable &iterable) { + return Enumerate<Iterable>{iterable}; +} + +template <typename Iterable> +LIBC_INLINE static constexpr Enumerate<Iterable> +enumerate(Iterable &&iterable) { + return Enumerate<Iterable>{iterable}; +} + +} // namespace internal_wctype_conversion_utils + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC___SUPPORT_WCTYPE_CONVERSION_UTILS_ENUMERATE_HPP _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
