From 23e252ad4052e2150f99bfe954d5327821b666b8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 Nov 2024 12:36:56 +0000 Subject: [PATCH] Codechange: Replace FontMap's std::map with std::vector. (#13126) --- src/gfx_layout.cpp | 8 ++++---- src/gfx_layout.h | 2 +- src/os/macosx/string_osx.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index ea33b14acf..5778f5b3c5 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -105,8 +105,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s continue; } - if (fontMapping.count(buff - buff_begin) == 0) { - fontMapping[buff - buff_begin] = f; + if (fontMapping.empty() || fontMapping.back().first != buff - buff_begin) { + fontMapping.emplace_back(buff - buff_begin, f); } f = Layouter::GetFont(state.fontsize, state.cur_colour); } @@ -114,8 +114,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s /* Better safe than sorry. */ *buff = '\0'; - if (fontMapping.count(buff - buff_begin) == 0) { - fontMapping[buff - buff_begin] = f; + if (fontMapping.empty() || fontMapping.back().first != buff - buff_begin) { + fontMapping.emplace_back(buff - buff_begin, f); } line.layout = T::GetParagraphLayout(buff_begin, buff, fontMapping); line.state_after = state; diff --git a/src/gfx_layout.h b/src/gfx_layout.h index b400596c3e..33b976f29a 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -81,7 +81,7 @@ public: }; /** Mapping from index to font. The pointer is owned by FontColourMap. */ -using FontMap = std::map; +using FontMap = std::vector>; /** * Interface to glue fallback and normal layouter into one. diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index cac25b46df..bd4a7e8c1c 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -102,7 +102,7 @@ public: /* Extract font information for this run. */ CFRange chars = CTRunGetStringRange(run); - auto map = fontMapping.upper_bound(chars.location); + auto map = std::ranges::upper_bound(fontMapping, chars.location, std::less{}, &std::pair::first); this->emplace_back(run, map->second, buff); }