From 95d40394daa1059d22e89cd462cac0ea8474276f Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Sat, 30 Sep 2023 15:08:51 +0200 Subject: [PATCH] Utils: Add C++ 20 converter function to_array That can be quite useful to create arrays: struct MyReallySpecialType { std::string_view name; std::string_view expression; }; std::string_view getExressionCArray(std::string_view name) { static constexpr MyReallySpecialType list[] = { {"Left", "true"}, {"Center", "execute(%1)"}, {"Right", "false"}}; auto found =std::find_if( std::begin(list), std::end(list), [&] (const auto &entry) { return entry.name == name; }); if (found != std::end(list)) return found->expression; return {}; } std::string_view getExressionStdArray(std::string_view name) { static constexpr auto list = Utils::to_array({ {"Left", "true"}, {"Center", "execute(%1)"}, {"Right", "false"}}); auto found = std::find_if( std::begin(list), std::end(list), [&] (const auto &entry) { return entry.name == name; }); if (found != std::end(list)) return found->expression; return {}; } Change-Id: Ifc737edb72d7a5f63b26203a5f22bfde19b5c2bc Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Tim Jenssen --- src/libs/utils/CMakeLists.txt | 1 + src/libs/utils/array.h | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/libs/utils/array.h diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt index a0ec62ac244..146aeafbe5f 100644 --- a/src/libs/utils/CMakeLists.txt +++ b/src/libs/utils/CMakeLists.txt @@ -11,6 +11,7 @@ add_qtc_library(Utils ansiescapecodehandler.cpp ansiescapecodehandler.h appmainwindow.cpp appmainwindow.h archive.cpp archive.h + array.h aspects.cpp aspects.h async.cpp async.h basetreeview.cpp basetreeview.h diff --git a/src/libs/utils/array.h b/src/libs/utils/array.h new file mode 100644 index 00000000000..0d9a6047281 --- /dev/null +++ b/src/libs/utils/array.h @@ -0,0 +1,23 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#pragma once + +namespace Utils { + +namespace Internal { +template +constexpr std::array, size> to_array_implementation( + Type (&&array)[size], std::index_sequence) +{ + return {{std::move(array[index])...}}; +} +} // namespace Internal + +template +constexpr std::array, size> to_array(Type (&&array)[size]) +{ + return Internal::to_array_implementation(std::move(array), std::make_index_sequence{}); +} + +} // namespace Utils