diff --git a/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/PredefinedColors.cpp b/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/PredefinedColors.cpp index da8cc3e45..4fbfa8800 100644 --- a/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/PredefinedColors.cpp +++ b/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/PredefinedColors.cpp @@ -9,9 +9,10 @@ extern "C" JNIEXPORT jintArray JNICALL Java_app_organicmaps_sdk_bookmarks_data_PredefinedColors_nativeGetPredefinedColors(JNIEnv * env, jclass) { - std::array(kml::PredefinedColor::Count)> colors{}; - for (size_t i = 0; i < static_cast(kml::PredefinedColor::Count); ++i) - colors[i] = static_cast(kml::ColorFromPredefinedColor(static_cast(i)).GetARGB()); + using kml::kOrderedPredefinedColors; + std::array colors; + for (size_t i = 0; i < kOrderedPredefinedColors.size(); ++i) + colors[i] = static_cast(kml::ColorFromPredefinedColor(kOrderedPredefinedColors[i]).GetARGB()); jintArray jColors = env->NewIntArray(colors.size()); env->SetIntArrayRegion(jColors, 0, static_cast(colors.size()), colors.data()); diff --git a/libs/base/stl_helpers.hpp b/libs/base/stl_helpers.hpp index 95dabf331..c62070784 100644 --- a/libs/base/stl_helpers.hpp +++ b/libs/base/stl_helpers.hpp @@ -1,10 +1,11 @@ #pragma once #include +#include #include #include #include -#include +#include #include #include #include @@ -496,4 +497,12 @@ struct RetrieveSecond return pair.second; } }; + +template + requires std::totally_ordered> +consteval bool HasUniqueElements(Container container) +{ + std::sort(container.begin(), container.end()); + return std::adjacent_find(container.begin(), container.end()) == container.end(); +} } // namespace base diff --git a/libs/kml/types.hpp b/libs/kml/types.hpp index dcda3fcda..97c542a63 100644 --- a/libs/kml/types.hpp +++ b/libs/kml/types.hpp @@ -6,6 +6,7 @@ #include "base/assert.hpp" #include "base/internal/message.hpp" // DebugPrint(Timestamp) +#include "base/stl_helpers.hpp" #include "base/visitor.hpp" #include "drape/color.hpp" @@ -40,6 +41,31 @@ enum class PredefinedColor : uint8_t Count }; +std::array constexpr kOrderedPredefinedColors = { + // clang-format off + PredefinedColor::None, + PredefinedColor::Red, + PredefinedColor::Pink, + PredefinedColor::Purple, + PredefinedColor::DeepPurple, + PredefinedColor::Blue, + PredefinedColor::LightBlue, + PredefinedColor::Cyan, + PredefinedColor::Teal, + PredefinedColor::Green, + PredefinedColor::Lime, + PredefinedColor::Yellow, + PredefinedColor::Orange, + PredefinedColor::DeepOrange, + PredefinedColor::Brown, + PredefinedColor::Gray, + PredefinedColor::BlueGray + // clang-format on +}; +static_assert(kOrderedPredefinedColors.size() == static_cast(PredefinedColor::Count), + "kOrderedPredefinedColors size must match PredefinedColor::Count"); +static_assert(base::HasUniqueElements(kOrderedPredefinedColors), "All values must be unique"); + inline std::string DebugPrint(PredefinedColor color) { switch (color)