From 04de80ebf749c1ad7bb453f1fff877c1320dafe5 Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Sun, 31 May 2026 20:46:22 -0500 Subject: [PATCH 1/8] miscellaneous code quality fixes --- src/global/AnsiOstream.h | 2 +- src/mapstorage/mapstorage.cpp | 2 +- src/mapstorage/mapstorage.h | 4 ++-- src/opengl/legacy/FBO.h | 8 ++++---- src/parser/abstractparser.h | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/global/AnsiOstream.h b/src/global/AnsiOstream.h index e51800b74..dd17e1ff9 100644 --- a/src/global/AnsiOstream.h +++ b/src/global/AnsiOstream.h @@ -211,7 +211,7 @@ class NODISCARD AnsiOstream final // Parses and interprets ansi codes embedded in the input string, and combines them with // stream's current state, as if by writing alternating RawAnsi and string_view writes. // - // Just as with regular RawAnsi writes, this function will ignores the REMOVAL of Ansi flags + // Just as with regular RawAnsi writes, this function ignores the REMOVAL of Ansi flags // that are NOT currently in use, and it ignores ADDITION of states that ARE currently in use. // // For example, if the current state is bold+italic+underline, then writing diff --git a/src/mapstorage/mapstorage.cpp b/src/mapstorage/mapstorage.cpp index f532a5b82..f05eb2349 100644 --- a/src/mapstorage/mapstorage.cpp +++ b/src/mapstorage/mapstorage.cpp @@ -218,7 +218,7 @@ NODISCARD std::optional getMM2FileVersion(LoadRoomHelper &helper } const auto version = helper.read_u32(); - using R = MM2FileVersion::Relative; + using R = MM2FileVersion::RelativeEnum; const R relative = (version == schema::CURRENT) ? R::Current : ((version < schema::CURRENT) ? R::Older : R::Newer); diff --git a/src/mapstorage/mapstorage.h b/src/mapstorage/mapstorage.h index 56f592950..c4938c88a 100644 --- a/src/mapstorage/mapstorage.h +++ b/src/mapstorage/mapstorage.h @@ -50,10 +50,10 @@ class NODISCARD_QOBJECT MapStorage final : public AbstractMapStorage struct NODISCARD MM2FileVersion final { - enum class NODISCARD Relative : uint8_t { Older, Current, Newer }; + enum class NODISCARD RelativeEnum : uint8_t { Older, Current, Newer }; uint32_t version = 0; - Relative relative = Relative::Older; + RelativeEnum relative = RelativeEnum::Older; }; NODISCARD extern std::optional getMM2FileVersion(QIODevice &file); diff --git a/src/opengl/legacy/FBO.h b/src/opengl/legacy/FBO.h index bbddaa8c1..0db14a6a2 100644 --- a/src/opengl/legacy/FBO.h +++ b/src/opengl/legacy/FBO.h @@ -16,6 +16,10 @@ extern bool LOG_FBO_ALLOCATIONS; class FBO final { +private: + std::unique_ptr m_multisamplingFbo; + std::unique_ptr m_resolvedFbo; + public: FBO() = default; ~FBO() = default; @@ -28,10 +32,6 @@ class FBO final void resolve(); NODISCARD GLuint resolvedTextureId() const; - -private: - std::unique_ptr m_multisamplingFbo; - std::unique_ptr m_resolvedFbo; }; } // namespace Legacy diff --git a/src/parser/abstractparser.h b/src/parser/abstractparser.h index 9e2672e41..f8b5d325b 100644 --- a/src/parser/abstractparser.h +++ b/src/parser/abstractparser.h @@ -133,7 +133,7 @@ struct NODISCARD ParserCommonData final ServerExitIds exitIds; PromptFlagsType promptFlags; ConnectedRoomFlagsType connectedRoomFlags; - RoomTerrainEnum terrain; + RoomTerrainEnum terrain = RoomTerrainEnum::UNDEFINED; // REVISIT: Is there any point to having a distinction between null and empty? std::optional roomArea; From 08cd6de9d9472db40c49f1d983b4185c3a5b21e9 Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Sun, 31 May 2026 20:49:40 -0500 Subject: [PATCH 2/8] move implementation details from headers to cpp files --- src/client/Hotkey.cpp | 20 +++++++++++++++ src/client/Hotkey.h | 20 --------------- src/client/HotkeyManager.cpp | 48 ++++++++++++++++++++++++++++++++++++ src/client/HotkeyManager.h | 48 ------------------------------------ src/map/CommandId.cpp | 5 ++++ src/map/CommandId.h | 6 +---- 6 files changed, 74 insertions(+), 73 deletions(-) diff --git a/src/client/Hotkey.cpp b/src/client/Hotkey.cpp index d69679557..5c20ab8b2 100644 --- a/src/client/Hotkey.cpp +++ b/src/client/Hotkey.cpp @@ -10,6 +10,26 @@ #include +namespace { +constexpr bool isUppercase(const char *s) +{ + while (*s) { + if (*s >= 'a' && *s <= 'z') + return false; + s++; + } + return true; +} +#define X_CHECK_UPPER(id, name, qkey, policy) \ + static_assert(isUppercase(name), "Hotkey name must be uppercase: " name); +XFOREACH_HOTKEY_BASE_KEYS(X_CHECK_UPPER) +#undef X_CHECK_UPPER +#define X_CHECK_UPPER(name, camel, qtenum) \ + static_assert(isUppercase(#name), "Hotkey modifier must be uppercase: " #name); +XFOREACH_HOTKEY_MODIFIER(X_CHECK_UPPER) +#undef X_CHECK_UPPER +} // namespace + bool Hotkey::isPolicySatisfied() const { const auto mods = modifiers(); diff --git a/src/client/Hotkey.h b/src/client/Hotkey.h index 5f42a8a28..162e383c3 100644 --- a/src/client/Hotkey.h +++ b/src/client/Hotkey.h @@ -155,26 +155,6 @@ class NODISCARD HotkeyModifiers final #undef X_IS_POLICY }; -namespace { -constexpr bool isUppercase(const char *s) -{ - while (*s) { - if (*s >= 'a' && *s <= 'z') - return false; - s++; - } - return true; -} -#define X_CHECK_UPPER(id, name, qkey, policy) \ - static_assert(isUppercase(name), "Hotkey name must be uppercase: " name); -XFOREACH_HOTKEY_BASE_KEYS(X_CHECK_UPPER) -#undef X_CHECK_UPPER -#define X_CHECK_UPPER(name, camel, qtenum) \ - static_assert(isUppercase(#name), "Hotkey modifier must be uppercase: " #name); -XFOREACH_HOTKEY_MODIFIER(X_CHECK_UPPER) -#undef X_CHECK_UPPER -} // namespace - class NODISCARD Hotkey final { private: diff --git a/src/client/HotkeyManager.cpp b/src/client/HotkeyManager.cpp index ca15a7e9e..7612c3efb 100644 --- a/src/client/HotkeyManager.cpp +++ b/src/client/HotkeyManager.cpp @@ -10,6 +10,54 @@ #include #include +namespace { + +constexpr bool is_valid_hotkey(std::string_view hotkey_str) +{ + // Find the base key (the part after the last '+') + size_t last_plus = hotkey_str.rfind('+'); + std::string_view base_part = (last_plus == std::string_view::npos) + ? hotkey_str + : hotkey_str.substr(last_plus + 1); + + // Determine which modifiers are present + bool has_ctrl = hotkey_str.find("CTRL") != std::string_view::npos; + bool has_alt = hotkey_str.find("ALT") != std::string_view::npos; + bool has_shift = hotkey_str.find("SHIFT") != std::string_view::npos; + bool has_meta = hotkey_str.find("META") != std::string_view::npos; + bool has_any_mod = has_ctrl || has_alt || has_shift || has_meta; + + // Match against the base key and check policy +#define CHECK_POLICY(id, name, key, policy) \ + if (base_part == name) { \ + if (policy == HotkeyPolicyEnum::ModifierRequired) \ + return has_any_mod; \ + if (policy == HotkeyPolicyEnum::ModifierNotShift) \ + return (has_ctrl || has_alt || has_meta); \ + return true; \ + } + + XFOREACH_HOTKEY_BASE_KEYS(CHECK_POLICY) +#undef CHECK_POLICY + + // Key name not found + return false; +} + +// This template trick ensures the compiler evaluates the expression for every macro entry +template +struct Validate +{ + static_assert(V, "Hotkey policy violation detected!"); +}; + +#define APPLY_VALIDATION(SerializedKey, Command) \ + static_assert(is_valid_hotkey(SerializedKey), "Invalid Hotkey Policy for: " SerializedKey); +XFOREACH_DEFAULT_HOTKEYS(APPLY_VALIDATION) +#undef APPLY_VALIDATION + +} // namespace + HotkeyManager::HotkeyManager() { setConfig().hotkeys.registerChangeCallback(m_configLifetime, diff --git a/src/client/HotkeyManager.h b/src/client/HotkeyManager.h index 335986781..009c54eb9 100644 --- a/src/client/HotkeyManager.h +++ b/src/client/HotkeyManager.h @@ -61,54 +61,6 @@ X("NUMPAD1", "ride") \ X("NUMPAD3", "stand") -namespace { - -constexpr bool is_valid_hotkey(std::string_view hotkey_str) -{ - // Find the base key (the part after the last '+') - size_t last_plus = hotkey_str.rfind('+'); - std::string_view base_part = (last_plus == std::string_view::npos) - ? hotkey_str - : hotkey_str.substr(last_plus + 1); - - // Determine which modifiers are present - bool has_ctrl = hotkey_str.find("CTRL") != std::string_view::npos; - bool has_alt = hotkey_str.find("ALT") != std::string_view::npos; - bool has_shift = hotkey_str.find("SHIFT") != std::string_view::npos; - bool has_meta = hotkey_str.find("META") != std::string_view::npos; - bool has_any_mod = has_ctrl || has_alt || has_shift || has_meta; - - // Match against the base key and check policy -#define CHECK_POLICY(id, name, key, policy) \ - if (base_part == name) { \ - if (policy == HotkeyPolicyEnum::ModifierRequired) \ - return has_any_mod; \ - if (policy == HotkeyPolicyEnum::ModifierNotShift) \ - return (has_ctrl || has_alt || has_meta); \ - return true; \ - } - - XFOREACH_HOTKEY_BASE_KEYS(CHECK_POLICY) -#undef CHECK_POLICY - - // Key name not found - return false; -} - -// This template trick ensures the compiler evaluates the expression for every macro entry -template -struct Validate -{ - static_assert(V, "Hotkey policy violation detected!"); -}; - -#define APPLY_VALIDATION(SerializedKey, Command) \ - static_assert(is_valid_hotkey(SerializedKey), "Invalid Hotkey Policy for: " SerializedKey); -XFOREACH_DEFAULT_HOTKEYS(APPLY_VALIDATION) -#undef APPLY_VALIDATION - -} // namespace - class NODISCARD HotkeyManager final { private: diff --git a/src/map/CommandId.cpp b/src/map/CommandId.cpp index 83a7ea6c4..68e0688dd 100644 --- a/src/map/CommandId.cpp +++ b/src/map/CommandId.cpp @@ -9,6 +9,11 @@ #include +static_assert(CommandEnum::FLEE > CommandEnum::UNKNOWN, "Code expects FLEE to be above UNKNOWN"); +static_assert(CommandEnum::FLEE > CommandEnum::LOOK, "Code expects FLEE to be above LOOK"); +static_assert(CommandEnum::FLEE < CommandEnum::SCOUT, "Code expects FLEE to be below SCOUT"); +static_assert(CommandEnum::FLEE < CommandEnum::NONE, "Code expects FLEE to be below NONE"); + namespace enums { const MMapper::Array &getAllCommands() { diff --git a/src/map/CommandId.h b/src/map/CommandId.h index c47b19a51..531d24060 100644 --- a/src/map/CommandId.h +++ b/src/map/CommandId.h @@ -20,13 +20,9 @@ enum class NODISCARD CommandEnum : uint8_t { /*SYNC, RESET, */ NONE }; -static_assert(CommandEnum::FLEE > CommandEnum::UNKNOWN, "Code expects FLEE to be above UNKNOWN"); -static_assert(CommandEnum::FLEE > CommandEnum::LOOK, "Code expects FLEE to be above LOOK"); -static_assert(CommandEnum::FLEE < CommandEnum::SCOUT, "Code expects FLEE to be below SCOUT"); -static_assert(CommandEnum::FLEE < CommandEnum::NONE, "Code expects FLEE to be below NONE"); /* does not include NONE */ -static constexpr const int NUM_COMMANDS = 10; +static constexpr int NUM_COMMANDS = 10; namespace enums { From 6f5ba1423e5e1f0032cdb4467f467d5d5de483e6 Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Sun, 31 May 2026 20:52:52 -0500 Subject: [PATCH 3/8] HotkeyManager code improvements --- src/client/Hotkey.cpp | 2 +- src/client/HotkeyManager.cpp | 23 ++++++++++++----------- src/client/HotkeyManager.h | 2 +- src/map/ChangeList.h | 2 +- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/client/Hotkey.cpp b/src/client/Hotkey.cpp index 5c20ab8b2..1679a98aa 100644 --- a/src/client/Hotkey.cpp +++ b/src/client/Hotkey.cpp @@ -11,7 +11,7 @@ #include namespace { -constexpr bool isUppercase(const char *s) +NODISCARD constexpr bool isUppercase(const char *s) { while (*s) { if (*s >= 'a' && *s <= 'z') diff --git a/src/client/HotkeyManager.cpp b/src/client/HotkeyManager.cpp index 7612c3efb..36916c4f3 100644 --- a/src/client/HotkeyManager.cpp +++ b/src/client/HotkeyManager.cpp @@ -12,20 +12,20 @@ namespace { -constexpr bool is_valid_hotkey(std::string_view hotkey_str) +NODISCARD constexpr bool is_valid_hotkey(const std::string_view hotkey_str) { // Find the base key (the part after the last '+') - size_t last_plus = hotkey_str.rfind('+'); - std::string_view base_part = (last_plus == std::string_view::npos) - ? hotkey_str - : hotkey_str.substr(last_plus + 1); + const size_t last_plus = hotkey_str.rfind('+'); + const std::string_view base_part = (last_plus == std::string_view::npos) + ? hotkey_str + : hotkey_str.substr(last_plus + 1); // Determine which modifiers are present - bool has_ctrl = hotkey_str.find("CTRL") != std::string_view::npos; - bool has_alt = hotkey_str.find("ALT") != std::string_view::npos; - bool has_shift = hotkey_str.find("SHIFT") != std::string_view::npos; - bool has_meta = hotkey_str.find("META") != std::string_view::npos; - bool has_any_mod = has_ctrl || has_alt || has_shift || has_meta; + const bool has_ctrl = hotkey_str.find("CTRL") != std::string_view::npos; + const bool has_alt = hotkey_str.find("ALT") != std::string_view::npos; + const bool has_shift = hotkey_str.find("SHIFT") != std::string_view::npos; + const bool has_meta = hotkey_str.find("META") != std::string_view::npos; + const bool has_any_mod = has_ctrl || has_alt || has_shift || has_meta; // Match against the base key and check policy #define CHECK_POLICY(id, name, key, policy) \ @@ -86,7 +86,7 @@ void HotkeyManager::syncFromConfig() } } -bool HotkeyManager::setHotkey(const Hotkey &hk, std::string command) +bool HotkeyManager::setHotkey(const Hotkey &hk, const std::string_view command) { if (!hk.isValid()) { return false; @@ -129,6 +129,7 @@ std::optional HotkeyManager::getCommand(const Hotkey &hk) const std::vector> HotkeyManager::getAllHotkeys() const { std::vector> result; + result.reserve(m_hotkeys.size()); for (const auto &[hk, cmd] : m_hotkeys) { result.emplace_back(hk, cmd); } diff --git a/src/client/HotkeyManager.h b/src/client/HotkeyManager.h index 009c54eb9..831c4be15 100644 --- a/src/client/HotkeyManager.h +++ b/src/client/HotkeyManager.h @@ -77,7 +77,7 @@ class NODISCARD HotkeyManager final void syncFromConfig(); public: - NODISCARD bool setHotkey(const Hotkey &hk, std::string command); + NODISCARD bool setHotkey(const Hotkey &hk, std::string_view command); NODISCARD bool removeHotkey(const Hotkey &hk); public: diff --git a/src/map/ChangeList.h b/src/map/ChangeList.h index e5e7cbff4..fb49ff842 100644 --- a/src/map/ChangeList.h +++ b/src/map/ChangeList.h @@ -24,7 +24,7 @@ class NODISCARD ChangeList final #undef X_NOP public: - const std::vector &getChanges() const { return m_changes; } + NODISCARD const std::vector &getChanges() const { return m_changes; } NODISCARD bool empty() const { return m_changes.empty(); } }; From 0ddd2e3c6d869e0453cc39c71de266f5a1ae8a00 Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Sat, 11 Apr 2026 23:13:40 -0500 Subject: [PATCH 4/8] avoid special case for std::unique_ptr in EnumIndexedArray --- src/global/EnumIndexedArray.h | 38 +++++++++++++++--------------- src/mainwindow/roomeditattrdlg.cpp | 8 +++---- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/global/EnumIndexedArray.h b/src/global/EnumIndexedArray.h index 80f5d787e..16d41f3d7 100644 --- a/src/global/EnumIndexedArray.h +++ b/src/global/EnumIndexedArray.h @@ -42,36 +42,36 @@ class NODISCARD EnumIndexedArray : private MMapper::Array using base::cend; using base::end; -private: - template - NODISCARD static bool my_equals(const U &a, const U &b) - { - return a == b; - } - template - NODISCARD static bool my_equals(U *const a, const std::unique_ptr &b) - { - return a == b.get(); - } +public: template - NODISCARD static bool my_equals(const std::unique_ptr &a, U *const b) + NODISCARD std::optional findIndexOf(const U element) const { - return a.get() == b; + const auto beg = this->begin(); + const auto end = this->end(); + const auto it = std::find_if(beg, end, [element](auto &x) -> bool { return x == element; }); + if (it == end) { + return std::nullopt; + } + return static_cast(it - beg); } - -public: + // This is a custom variation of findIndexOf() that allows searching pointer + // values when the pointer lives in a smart pointer, an optional, etc. + // + // Note: findIndexOf() would write "x == ptr" but this uses "std::addressof(deref(x)) == ptr" instead. + // Also: "deref(x)" can throw, and std::addressof() ignores overloaded "operator&". template - NODISCARD std::optional findIndexOf(const U element) const + NODISCARD std::optional findIndexOfPointer(U *const pointer) const { + static_assert( + std::is_same_v())))>); const auto beg = this->begin(); const auto end = this->end(); - const auto it = std::find_if(beg, end, [element](auto &x) -> bool { - return my_equals(x, element); + const auto it = std::find_if(beg, end, [pointer](auto &x) -> bool { + return std::addressof(deref(x)) == pointer; }); if (it == end) { return std::nullopt; } - return static_cast(it - beg); } diff --git a/src/mainwindow/roomeditattrdlg.cpp b/src/mainwindow/roomeditattrdlg.cpp index 07fcd2823..9a7ca1d95 100644 --- a/src/mainwindow/roomeditattrdlg.cpp +++ b/src/mainwindow/roomeditattrdlg.cpp @@ -1089,7 +1089,7 @@ void RoomEditAttrDlg::sundeathUndefRadioButtonToggled(const bool val) void RoomEditAttrDlg::mobFlagsListItemChanged(QListWidgetItem *const item) { std::ignore = deref(item); - const auto optFlag = m_mobListItems.findIndexOf( + const auto optFlag = m_mobListItems.findIndexOfPointer( checked_dynamic_downcast(item)); if (!optFlag) { qWarning() << "oops" << __FILE__ << ":" << __LINE__; @@ -1113,7 +1113,7 @@ void RoomEditAttrDlg::loadFlagsListItemChanged(QListWidgetItem *const item) { std::ignore = deref(item); - const auto optFlag = m_loadListItems.findIndexOf( + const auto optFlag = m_loadListItems.findIndexOfPointer( checked_dynamic_downcast(item)); if (!optFlag) { qWarning() << "oops: " << __FILE__ << ":" << __LINE__; @@ -1138,7 +1138,7 @@ void RoomEditAttrDlg::exitFlagsListItemChanged(QListWidgetItem *const item) { std::ignore = deref(item); - const auto optFlag = m_exitListItems.findIndexOf( + const auto optFlag = m_exitListItems.findIndexOfPointer( checked_dynamic_downcast(item)); if (!optFlag) { qWarning() << "oops: " << __FILE__ << ":" << __LINE__; @@ -1181,7 +1181,7 @@ void RoomEditAttrDlg::doorFlagsListItemChanged(QListWidgetItem *const item) { std::ignore = deref(item); - const auto optFlag = m_doorListItems.findIndexOf( + const auto optFlag = m_doorListItems.findIndexOfPointer( checked_dynamic_downcast(item)); if (!optFlag) { qWarning() << "oops: " << __FILE__ << ":" << __LINE__; From 69cf2e5fc4eb4af83220b2b5b4378b0bda53386e Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Wed, 15 Apr 2026 06:30:19 -0500 Subject: [PATCH 5/8] remove unused WithEmptyCallbackEnum option --- src/global/io.h | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/src/global/io.h b/src/global/io.h index f4051d0d9..e86700769 100644 --- a/src/global/io.h +++ b/src/global/io.h @@ -50,22 +50,14 @@ class NODISCARD buffer final enum class NODISCARD IOResultEnum : uint8_t { SUCCESS, FAILURE, EXCEPTION }; -enum class NODISCARD WithEmptyCallbackEnum : uint8_t { No, Yes }; - template -NODISCARD IOResultEnum readAllAvailable_ext(QIODevice &dev, - buffer &buffer, - Callback &&callback, - const WithEmptyCallbackEnum withEmptyCallback) +NODISCARD IOResultEnum readAllAvailable(QIODevice &dev, buffer &buffer, Callback &&callback) { - static constexpr const auto MAX_SIZE = static_cast(N); + static constexpr auto MAX_SIZE = static_cast(N); char *const data = buffer.data(); while (dev.bytesAvailable() > 0) { const auto got = dev.read(data, MAX_SIZE); if (got <= 0) { - if (withEmptyCallback == WithEmptyCallbackEnum::Yes) { - callback(QByteArray::fromRawData(data, 0)); - } return IOResultEnum::FAILURE; } @@ -77,21 +69,9 @@ NODISCARD IOResultEnum readAllAvailable_ext(QIODevice &dev, // contents of data the next time we read into the buffer. callback(QByteArray::fromRawData(data, igot)); } - if (withEmptyCallback == WithEmptyCallbackEnum::Yes) { - callback(QByteArray::fromRawData(data, 0)); - } return IOResultEnum::SUCCESS; } -template -NODISCARD IOResultEnum readAllAvailable(QIODevice &dev, buffer &buffer, Callback &&callback) -{ - return readAllAvailable_ext(dev, - buffer, - std::forward(callback), - WithEmptyCallbackEnum::No); -} - class NODISCARD IOException : public std::runtime_error { public: From 6a80c05e42688ba0474dc19f8bba4784fb9b7bcf Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Mon, 13 Apr 2026 08:24:40 -0500 Subject: [PATCH 6/8] add a View class --- src/CMakeLists.txt | 1 + src/display/Connections.cpp | 4 +- src/display/Connections.h | 9 ++-- src/display/Infomarks.cpp | 2 +- src/display/Textures.cpp | 3 +- src/global/CharUtils.cpp | 25 +++++----- src/global/View.h | 66 +++++++++++++++++++++++++ src/map/Map.cpp | 10 ++-- src/map/Map.h | 13 ++--- src/map/World.cpp | 8 +-- src/map/World.h | 8 ++- src/opengl/Font.cpp | 10 ++-- src/opengl/Font.h | 11 +++-- src/opengl/OpenGL.cpp | 39 +++++++-------- src/opengl/OpenGL.h | 67 +++++++++++--------------- src/opengl/UboManager.h | 5 +- src/opengl/legacy/FontMesh3d.cpp | 2 +- src/opengl/legacy/FontMesh3d.h | 6 +-- src/opengl/legacy/Legacy.cpp | 36 +++++++------- src/opengl/legacy/Legacy.h | 61 +++++++++++------------ src/opengl/legacy/SimpleMesh.h | 10 ++-- src/parser/AbstractParser-Commands.cpp | 39 +++++++-------- tests/testadventure.cpp | 3 +- 23 files changed, 242 insertions(+), 196 deletions(-) create mode 100644 src/global/View.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index efc40e91a..7b50a0c06 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -182,6 +182,7 @@ set(mmapper_SRCS global/Timer.cpp global/Timer.h global/Version.h + global/View.h global/WeakHandle.cpp global/WeakHandle.h global/WinSock.cpp diff --git a/src/display/Connections.cpp b/src/display/Connections.cpp index af65ee019..d19258815 100644 --- a/src/display/Connections.cpp +++ b/src/display/Connections.cpp @@ -482,7 +482,7 @@ void ConnectionDrawer::drawConnectionLine(const ExitDirEnum startDir, drawLineStrip(points); } -void ConnectionDrawer::drawLineStrip(const std::vector &points) +void ConnectionDrawer::drawLineStrip(const View points) { getFakeGL().drawLineStrip(points); } @@ -793,7 +793,7 @@ void ConnectionDrawer::ConnectionFakeGL::drawTriangle(const glm::vec3 &a, verts.emplace_back(color, c + m_offset); } -void ConnectionDrawer::ConnectionFakeGL::drawLineStrip(const std::vector &points) +void ConnectionDrawer::ConnectionFakeGL::drawLineStrip(const View points) { const auto transform = [this](const glm::vec3 &vert) { return vert + m_offset; }; const float extension = CONNECTION_LINE_WIDTH * 0.5f; diff --git a/src/display/Connections.h b/src/display/Connections.h index aefccf423..7d0b4d20b 100644 --- a/src/display/Connections.h +++ b/src/display/Connections.h @@ -4,6 +4,7 @@ #include "../global/Array.h" #include "../global/RuleOf5.h" +#include "../global/View.h" #include "../global/utils.h" #include "../map/ExitDirection.h" #include "../map/RoomHandle.h" @@ -35,11 +36,11 @@ struct NODISCARD RoomNameBatchIntermediate final void clear() { verts.clear(); } template - static void append(std::vector &v, const std::vector &other) + static void append(std::vector &v, const View other) { v.insert(v.end(), other.begin(), other.end()); } - void append(const std::vector &other) { append(verts, other); } + void append(const View other) { append(verts, other); } }; struct NODISCARD RoomNameBatch final @@ -144,7 +145,7 @@ struct NODISCARD ConnectionDrawer final public: void drawTriangle(const glm::vec3 &a, const glm::vec3 &b, const glm::vec3 &c); - void drawLineStrip(const std::vector &points); + void drawLineStrip(View points); }; private: @@ -182,7 +183,7 @@ struct NODISCARD ConnectionDrawer final const RoomHandle &targetRoom, ExitDirEnum targetDir); - void drawLineStrip(const std::vector &points); + void drawLineStrip(View points); void drawConnection(const RoomHandle &leftRoom, const RoomHandle &rightRoom, diff --git a/src/display/Infomarks.cpp b/src/display/Infomarks.cpp index 9daf74bb0..bb47fd43b 100644 --- a/src/display/Infomarks.cpp +++ b/src/display/Infomarks.cpp @@ -306,7 +306,7 @@ void MapCanvas::paintNewInfomarkSelection() const auto infomarksLineStyle = GLRenderState() .withColor(Color{Qt::yellow}) .withLineParams(LineParams{INFOMARK_GUIDE_LINE_WIDTH}); - const std::vector verts{glm::vec3{pos1, layer}, glm::vec3{pos2, layer}}; + const std::array verts{glm::vec3{pos1, layer}, glm::vec3{pos2, layer}}; gl.renderPlainLines(verts, infomarksLineStyle); } } diff --git a/src/display/Textures.cpp b/src/display/Textures.cpp index e190fe18d..b430d2e8e 100644 --- a/src/display/Textures.cpp +++ b/src/display/Textures.cpp @@ -599,7 +599,8 @@ void MapCanvas::initTextures() Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } - opengl.uploadArrayLayer(pArrayTex, pos, {image}); + + opengl.uploadArrayLayer(pArrayTex, pos, std::array{std::move(image)}); } x->setArrayPosition(MMTexArrayPosition{id, pos}); pos += 1; diff --git a/src/global/CharUtils.cpp b/src/global/CharUtils.cpp index 14b924871..66c5ca318 100644 --- a/src/global/CharUtils.cpp +++ b/src/global/CharUtils.cpp @@ -4,6 +4,7 @@ #include "CharUtils.h" #include "Consts.h" +#include "View.h" #include "tests.h" #include @@ -18,7 +19,7 @@ void test_foreachCharSingle() using namespace char_consts; using namespace string_consts; - auto testcase = [](std::string_view input, std::vector expect) { + auto testcase = [](const std::string_view input, const View expect) { size_t arg = 0; foreachAsciiCharSingle( input, @@ -37,17 +38,17 @@ void test_foreachCharSingle() TEST_ASSERT(arg == expect.size()); }; - testcase("", {""}); - testcase("a", {"a"}); - testcase("ab", {"ab"}); - testcase(";", {"", ";", ""}); - testcase(";;", {"", ";", "", ";", ""}); - testcase("a;", {"a", ";", ""}); - testcase("a;;", {"a", ";", "", ";", ""}); - testcase(";a", {"", ";", "a"}); - testcase(";;a", {"", ";", "", ";", "a"}); - testcase(";;a;", {"", ";", "", ";", "a", ";", ""}); - testcase("ab;;c;", {"ab", ";", "", ";", "c", ";", ""}); + testcase("", {{""}}); + testcase("a", {{"a"}}); + testcase("ab", {{"ab"}}); + testcase(";", {{"", ";", ""}}); + testcase(";;", {{"", ";", "", ";", ""}}); + testcase("a;", {{"a", ";", ""}}); + testcase("a;;", {{"a", ";", "", ";", ""}}); + testcase(";a", {{"", ";", "a"}}); + testcase(";;a", {{"", ";", "", ";", "a"}}); + testcase(";;a;", {{"", ";", "", ";", "a", ";", ""}}); + testcase("ab;;c;", {{"ab", ";", "", ";", "c", ";", ""}}); } void test_foreachCharMulti2() diff --git a/src/global/View.h b/src/global/View.h new file mode 100644 index 000000000..fea36b43a --- /dev/null +++ b/src/global/View.h @@ -0,0 +1,66 @@ +#pragma once +// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright (C) 2026 The MMapper Authors + +#include "macros.h" + +#include +#include +#include + +template +struct NODISCARD View +{ +private: + const T *m_ptr = nullptr; + size_t m_size = 0; + +public: + using reference = const T &; + using pointer = const T *; + using size_type = size_t; + +public: + View() = default; + + explicit View(const T *const ptr, const size_t size) + : m_ptr{ptr} + , m_size{size} + { + if (ptr == nullptr && size != 0) { + throw std::invalid_argument("ptr"); + } + } + + IMPLICIT View(const std::vector &v) + : View{v.data(), v.size()} + {} + + template + IMPLICIT View(const std::array &v) + : View{v.data(), v.size()} + {} + +public: + NODISCARD auto begin() const { return data(); } + NODISCARD auto end() const { return begin() + size(); } + NODISCARD bool empty() const { return size() == 0; } + NODISCARD pointer data() const { return m_ptr; } + NODISCARD size_type size() const { return m_size; } + +public: + NODISCARD reference at(const size_type pos) const + { + if (!(pos < size())) { + throw std::out_of_range("pos"); + } + return m_ptr[pos]; + } + NODISCARD reference operator[](const size_type pos) const { return at(pos); } +}; + +template +View(const std::vector &) -> View; + +template +View(const std::array &) -> View; diff --git a/src/map/Map.cpp b/src/map/Map.cpp index f151b2979..4d445d298 100644 --- a/src/map/Map.cpp +++ b/src/map/Map.cpp @@ -308,7 +308,7 @@ Map Map::filterBaseMap(ProgressCounter &pc) const return mar.map; } -MapApplyResult Map::apply(ProgressCounter &pc, const std::vector &changes) const +MapApplyResult Map::apply(ProgressCounter &pc, const View changes) const { if (changes.empty()) { throw InvalidMapOperation("Changes are empty"); @@ -318,7 +318,7 @@ MapApplyResult Map::apply(ProgressCounter &pc, const std::vector &change const auto count = changes.size(); MMLOG() << "[map] Applying " << count << " change" << ((count == 1) ? "" : "s") << "...\n"; } - return update(m_world, pc, [&changes](ProgressCounter &pc2, World &w) { + return update(m_world, pc, [changes](ProgressCounter &pc2, World &w) { w.applyAll(pc2, changes); }); } @@ -1258,7 +1258,7 @@ void Map::printChange(AnsiOstream &aos, const Change &change) const getWorld().printChange(aos, change); } void Map::printChanges(AnsiOstream &aos, - const std::vector &changes, + const View changes, const std::string_view sep) const { getWorld().printChanges(aos, changes, sep); @@ -1270,7 +1270,7 @@ void Map::printChange(std::ostream &os, const Change &change) const printChange(aos, change); } void Map::printChanges(std::ostream &os, - const std::vector &changes, + const View changes, const std::string_view sep) const { AnsiOstream aos{os}; @@ -1284,7 +1284,7 @@ void Map::printChange(mm::AbstractDebugOStream &os, const Change &change) const os.writeUtf8(oss.str()); } void Map::printChanges(mm::AbstractDebugOStream &os, - const std::vector &changes, + const View changes, std::string_view sep) const { std::ostringstream oss; diff --git a/src/map/Map.h b/src/map/Map.h index 7ee173d6e..85631206d 100644 --- a/src/map/Map.h +++ b/src/map/Map.h @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later // Copyright (C) 2021 The MMapper Authors +#include "../global/View.h" #include "../global/macros.h" #include "DoorFlags.h" #include "ExitDirection.h" @@ -89,7 +90,7 @@ class NODISCARD Map final NODISCARD bool operator!=(const Map &other) const { return !operator==(other); } public: - NODISCARD MapApplyResult apply(ProgressCounter &pc, const std::vector &changes) const; + NODISCARD MapApplyResult apply(ProgressCounter &pc, View changes) const; NODISCARD MapApplyResult apply(ProgressCounter &pc, const ChangeList &changes) const; NODISCARD MapApplyResult applySingleChange(ProgressCounter &pc, const Change &change) const; @@ -153,20 +154,16 @@ class NODISCARD Map final public: void printChange(AnsiOstream &aos, const Change &change) const; - void printChanges(AnsiOstream &aos, - const std::vector &changes, - std::string_view sep) const; + void printChanges(AnsiOstream &aos, View changes, std::string_view sep) const; public: void printChange(std::ostream &os, const Change &change) const; - void printChanges(std::ostream &os, - const std::vector &changes, - std::string_view sep) const; + void printChanges(std::ostream &os, View changes, std::string_view sep) const; public: void printChange(mm::AbstractDebugOStream &os, const Change &change) const; void printChanges(mm::AbstractDebugOStream &os, - const std::vector &changes, + View changes, std::string_view sep) const; public: diff --git a/src/map/World.cpp b/src/map/World.cpp index bd18059b2..1dbd1d6b3 100644 --- a/src/map/World.cpp +++ b/src/map/World.cpp @@ -1960,7 +1960,7 @@ struct NODISCARD WorldChangePrinter final aos} {} void print(const Change &change) { m_cp.print(change); } - void print(const std::vector &changes, const std::string_view sep) + void print(const View changes, const std::string_view sep) { size_t num_printed = 0; std::string_view prefix = ""; @@ -1985,7 +1985,7 @@ void World::printChange(AnsiOstream &aos, const Change &change) const } void World::printChanges(AnsiOstream &aos, - const std::vector &changes, + const View changes, const std::string_view sep) const { WorldChangePrinter{*this, aos}.print(changes, sep); @@ -2010,7 +2010,7 @@ void World::applyOne(ProgressCounter &pc, const Change &change) post_change_updates(pc); } -void World::applyAll(ProgressCounter &pc, const std::vector &changes) +void World::applyAll(ProgressCounter &pc, const View changes) { applyAll_internal(pc, changes); post_change_updates(pc); @@ -2068,7 +2068,7 @@ void World::zapRooms_unsafe(ProgressCounter &pc, const RoomIdSet &rooms) } } -void World::applyAll_internal(ProgressCounter &pc, const std::vector &changes) +void World::applyAll_internal(ProgressCounter &pc, const View changes) { DECL_TIMER(t, __FUNCTION__); diff --git a/src/map/World.h b/src/map/World.h index e35d178be..3146997da 100644 --- a/src/map/World.h +++ b/src/map/World.h @@ -165,7 +165,7 @@ class NODISCARD World final public: void applyOne(ProgressCounter &pc, const Change &change); - void applyAll(ProgressCounter &pc, const std::vector &changes); + void applyAll(ProgressCounter &pc, View changes); public: NODISCARD bool isTemporary(RoomId id) const; @@ -291,7 +291,7 @@ class NODISCARD World final private: void post_change_updates(ProgressCounter &pc); - void applyAll_internal(ProgressCounter &pc, const std::vector &changes); + void applyAll_internal(ProgressCounter &pc, View changes); private: NODISCARD bool containsRoomsNotIn(const World &other) const; @@ -301,9 +301,7 @@ class NODISCARD World final public: void printChange(AnsiOstream &aos, const Change &change) const; - void printChanges(AnsiOstream &aos, - const std::vector &changes, - std::string_view sep) const; + void printChanges(AnsiOstream &aos, View changes, std::string_view sep) const; public: friend bool hasMeshDifference(const World &a, const World &b); diff --git a/src/opengl/Font.cpp b/src/opengl/Font.cpp index 2229e74ea..469e1a1e6 100644 --- a/src/opengl/Font.cpp +++ b/src/opengl/Font.cpp @@ -840,7 +840,7 @@ void FontMetrics::getFontBatchRawData(const GLText *const text, assert(output.size() == before + expectedVerts); } -void GLFont::render2dTextImmediate(const std::vector &text) +void GLFont::render2dTextImmediate(const View text) { if (text.empty()) { return; @@ -861,7 +861,7 @@ void GLFont::render2dTextImmediate(const std::vector &text) m_gl.setProjectionMatrix(oldProj); } -void GLFont::render3dTextImmediate(const std::vector &rawVerts) +void GLFont::render3dTextImmediate(const View rawVerts) { if (rawVerts.empty()) { return; @@ -870,7 +870,7 @@ void GLFont::render3dTextImmediate(const std::vector &rawVerts) m_gl.renderFont3d(m_texture, rawVerts); } -void GLFont::render3dTextImmediate(const std::vector &text) +void GLFont::render3dTextImmediate(const View text) { if (text.empty()) { return; @@ -880,14 +880,14 @@ void GLFont::render3dTextImmediate(const std::vector &text) render3dTextImmediate(rawVerts); } -std::vector GLFont::getFontMeshIntermediate(const std::vector &text) +std::vector GLFont::getFontMeshIntermediate(const View text) { std::vector output; getFontMetrics().getFontBatchRawData(text.data(), text.size(), output); return output; } -UniqueMesh GLFont::getFontMesh(const std::vector &rawVerts) +UniqueMesh GLFont::getFontMesh(const View rawVerts) { return m_gl.createFontMesh(m_texture, DrawModeEnum::QUADS, rawVerts); } diff --git a/src/opengl/Font.h b/src/opengl/Font.h index 96661c8c9..6a19046a7 100644 --- a/src/opengl/Font.h +++ b/src/opengl/Font.h @@ -4,6 +4,7 @@ #include "../global/Color.h" #include "../global/RuleOf5.h" +#include "../global/View.h" #include "../global/utils.h" #include "FontFormatFlags.h" #include "OpenGL.h" @@ -90,13 +91,13 @@ class NODISCARD GLFont final void renderTextCentered(const QString &text, Color color = {}, std::optional bgcolor = {}); - void render2dTextImmediate(const std::vector &text); - void render3dTextImmediate(const std::vector &text); - void render3dTextImmediate(const std::vector &rawVerts); + void render2dTextImmediate(View text); + void render3dTextImmediate(View text); + void render3dTextImmediate(View rawVerts); public: - NODISCARD std::vector getFontMeshIntermediate(const std::vector &text); - NODISCARD UniqueMesh getFontMesh(const std::vector &text); + NODISCARD std::vector getFontMeshIntermediate(View text); + NODISCARD UniqueMesh getFontMesh(View text); }; extern void getFontBatchRawData(const FontMetrics &fm, diff --git a/src/opengl/OpenGL.cpp b/src/opengl/OpenGL.cpp index 36c7ded8f..4358d9922 100644 --- a/src/opengl/OpenGL.cpp +++ b/src/opengl/OpenGL.cpp @@ -87,54 +87,53 @@ void OpenGL::blitFboToDefault() getFunctions().blitFboToDefault(); } -UniqueMesh OpenGL::createPointBatch(const std::vector &batch) +UniqueMesh OpenGL::createPointBatch(const View batch) { return getFunctions().createPointBatch(batch); } -UniqueMesh OpenGL::createPlainLineBatch(const std::vector &batch) +UniqueMesh OpenGL::createPlainLineBatch(const View batch) { return getFunctions().createPlainBatch(DrawModeEnum::LINES, batch); } -UniqueMesh OpenGL::createColoredLineBatch(const std::vector &batch) +UniqueMesh OpenGL::createColoredLineBatch(const View batch) { return getFunctions().createColoredBatch(DrawModeEnum::LINES, batch); } -UniqueMesh OpenGL::createPlainTriBatch(const std::vector &batch) +UniqueMesh OpenGL::createPlainTriBatch(const View batch) { return getFunctions().createPlainBatch(DrawModeEnum::TRIANGLES, batch); } -UniqueMesh OpenGL::createColoredTriBatch(const std::vector &batch) +UniqueMesh OpenGL::createColoredTriBatch(const View batch) { return getFunctions().createColoredBatch(DrawModeEnum::TRIANGLES, batch); } -UniqueMesh OpenGL::createPlainQuadBatch(const std::vector &batch) +UniqueMesh OpenGL::createPlainQuadBatch(const View batch) { return getFunctions().createPlainBatch(DrawModeEnum::QUADS, batch); } -UniqueMesh OpenGL::createColoredQuadBatch(const std::vector &batch) +UniqueMesh OpenGL::createColoredQuadBatch(const View batch) { return getFunctions().createColoredBatch(DrawModeEnum::QUADS, batch); } -UniqueMesh OpenGL::createTexturedQuadBatch(const std::vector &batch, - const MMTextureId texture) +UniqueMesh OpenGL::createTexturedQuadBatch(const View batch, const MMTextureId texture) { return getFunctions().createTexturedBatch(DrawModeEnum::QUADS, batch, texture); } -UniqueMesh OpenGL::createColoredTexturedQuadBatch(const std::vector &batch, +UniqueMesh OpenGL::createColoredTexturedQuadBatch(const View batch, const MMTextureId texture) { return getFunctions().createColoredTexturedBatch(DrawModeEnum::QUADS, batch, texture); } -UniqueMesh OpenGL::createRoomQuadTexBatch(const std::vector &batch, +UniqueMesh OpenGL::createRoomQuadTexBatch(const View batch, const MMTextureId texture) { return getFunctions().createRoomQuadTexBatch(batch, texture); @@ -142,7 +141,7 @@ UniqueMesh OpenGL::createRoomQuadTexBatch(const std::vector &ba UniqueMesh OpenGL::createFontMesh(const SharedMMTexture &texture, const DrawModeEnum mode, - const std::vector &batch) + const View batch) { return getFunctions().createFontMesh(texture, mode, batch); } @@ -162,33 +161,33 @@ void OpenGL::clearDepth() } void OpenGL::renderPlain(const DrawModeEnum type, - const std::vector &verts, + const View verts, const GLRenderState &state) { getFunctions().renderPlain(type, verts, state); } void OpenGL::renderColored(const DrawModeEnum type, - const std::vector &verts, + const View verts, const GLRenderState &state) { getFunctions().renderColored(type, verts, state); } -void OpenGL::renderPoints(const std::vector &verts, const GLRenderState &state) +void OpenGL::renderPoints(const View verts, const GLRenderState &state) { getFunctions().renderPoints(verts, state); } void OpenGL::renderTextured(const DrawModeEnum type, - const std::vector &verts, + const View verts, const GLRenderState &state) { getFunctions().renderTextured(type, verts, state); } void OpenGL::renderColoredTextured(const DrawModeEnum type, - const std::vector &verts, + const View verts, const GLRenderState &state) { getFunctions().renderColoredTextured(type, verts, state); @@ -235,7 +234,7 @@ void OpenGL::initializeRenderer(const float devicePixelRatio) m_rendererInitialized = true; } -void OpenGL::renderFont3d(const SharedMMTexture &texture, const std::vector &verts) +void OpenGL::renderFont3d(const SharedMMTexture &texture, const View verts) { getFunctions().renderFont3d(texture, verts); } @@ -272,9 +271,7 @@ void OpenGL::setTextureLookup(const MMTextureId id, SharedMMTexture tex) getFunctions().getTexLookup().set(id, std::move(tex)); } -void OpenGL::uploadArrayLayer(const SharedMMTexture &array, - int layer, - const std::vector &images) +void OpenGL::uploadArrayLayer(const SharedMMTexture &array, int layer, const View images) { auto &gl = getFunctions(); MMTexture &tex = deref(array); diff --git a/src/opengl/OpenGL.h b/src/opengl/OpenGL.h index 6d8b1f9c3..dac2105e5 100644 --- a/src/opengl/OpenGL.h +++ b/src/opengl/OpenGL.h @@ -4,12 +4,12 @@ // Author: Nils Schimmelmann (Jahara) #include "../global/Badge.h" +#include "../global/View.h" #include "../global/utils.h" #include "OpenGLTypes.h" #include "UboManager.h" #include -#include #include @@ -70,101 +70,92 @@ class NODISCARD OpenGL final void blitFboToDefault(); public: - NODISCARD UniqueMesh createPointBatch(const std::vector &verts); + NODISCARD UniqueMesh createPointBatch(View verts); public: // plain means the color is defined by uniform - NODISCARD UniqueMesh createPlainLineBatch(const std::vector &verts); + NODISCARD UniqueMesh createPlainLineBatch(View verts); // colored means the color is defined by attribute - NODISCARD UniqueMesh createColoredLineBatch(const std::vector &verts); + NODISCARD UniqueMesh createColoredLineBatch(View verts); public: // plain means the color is defined by uniform - NODISCARD UniqueMesh createPlainTriBatch(const std::vector &verts); - NODISCARD UniqueMesh createColoredTriBatch(const std::vector &verts); + NODISCARD UniqueMesh createPlainTriBatch(View verts); + NODISCARD UniqueMesh createColoredTriBatch(View verts); public: // plain means the color is defined by uniform - NODISCARD UniqueMesh createPlainQuadBatch(const std::vector &verts); + NODISCARD UniqueMesh createPlainQuadBatch(View verts); // colored means the color is defined by attribute - NODISCARD UniqueMesh createColoredQuadBatch(const std::vector &verts); - NODISCARD UniqueMesh createTexturedQuadBatch(const std::vector &verts, - MMTextureId texture); - NODISCARD UniqueMesh createColoredTexturedQuadBatch(const std::vector &verts, + NODISCARD UniqueMesh createColoredQuadBatch(View verts); + NODISCARD UniqueMesh createTexturedQuadBatch(View verts, MMTextureId texture); + NODISCARD UniqueMesh createColoredTexturedQuadBatch(View verts, MMTextureId texture); public: - NODISCARD UniqueMesh createRoomQuadTexBatch(const std::vector &verts, - MMTextureId texture); + NODISCARD UniqueMesh createRoomQuadTexBatch(View verts, MMTextureId texture); public: NODISCARD UniqueMesh createFontMesh(const SharedMMTexture &texture, DrawModeEnum mode, - const std::vector &batch); + View batch); protected: - void renderPlain(DrawModeEnum type, - const std::vector &verts, - const GLRenderState &state); - void renderColored(DrawModeEnum type, - const std::vector &verts, - const GLRenderState &state); - void renderTextured(DrawModeEnum type, - const std::vector &verts, - const GLRenderState &state); + void renderPlain(DrawModeEnum type, View verts, const GLRenderState &state); + void renderColored(DrawModeEnum type, View verts, const GLRenderState &state); + void renderTextured(DrawModeEnum type, View verts, const GLRenderState &state); void renderColoredTextured(DrawModeEnum type, - const std::vector &verts, + View verts, const GLRenderState &state); public: - void renderPoints(const std::vector &verts, const GLRenderState &state); + void renderPoints(View verts, const GLRenderState &state); public: - void renderPlainLines(const std::vector &verts, const GLRenderState &state) + void renderPlainLines(View verts, const GLRenderState &state) { renderPlain(DrawModeEnum::LINES, verts, state); } - void renderPlainTris(const std::vector &verts, const GLRenderState &state) + void renderPlainTris(View verts, const GLRenderState &state) { renderPlain(DrawModeEnum::TRIANGLES, verts, state); } - void renderPlainQuads(const std::vector &verts, const GLRenderState &state) + void renderPlainQuads(View verts, const GLRenderState &state) { renderPlain(DrawModeEnum::QUADS, verts, state); } public: - void renderColoredLines(const std::vector &verts, const GLRenderState &state) + void renderColoredLines(View verts, const GLRenderState &state) { renderColored(DrawModeEnum::LINES, verts, state); } - void renderColoredTris(const std::vector &verts, const GLRenderState &state) + void renderColoredTris(View verts, const GLRenderState &state) { renderColored(DrawModeEnum::TRIANGLES, verts, state); } - void renderColoredQuads(const std::vector &verts, const GLRenderState &state) + void renderColoredQuads(View verts, const GLRenderState &state) { renderColored(DrawModeEnum::QUADS, verts, state); } public: - void renderTexturedQuads(const std::vector &verts, const GLRenderState &state) + void renderTexturedQuads(View verts, const GLRenderState &state) { renderTextured(DrawModeEnum::QUADS, verts, state); } public: - void renderColoredTexturedQuads(const std::vector &verts, - const GLRenderState &state) + void renderColoredTexturedQuads(View verts, const GLRenderState &state) { renderColoredTextured(DrawModeEnum::QUADS, verts, state); } public: - void renderFont3d(const SharedMMTexture &texture, const std::vector &verts); + void renderFont3d(const SharedMMTexture &texture, View verts); public: - void clear(const Color color); + void clear(Color color); void clearDepth(); void renderPlainFullScreenQuad(const GLRenderState &state); @@ -177,8 +168,6 @@ class NODISCARD OpenGL final NODISCARD Legacy::UboManager &getUboManager() { return m_uboManager; } public: - void uploadArrayLayer(const SharedMMTexture &array, - int layer, - const std::vector &images); + void uploadArrayLayer(const SharedMMTexture &array, int layer, View images); void generateMipmaps(const SharedMMTexture &array); }; diff --git a/src/opengl/UboManager.h b/src/opengl/UboManager.h index 3cdcabaaf..9640f5b60 100644 --- a/src/opengl/UboManager.h +++ b/src/opengl/UboManager.h @@ -4,6 +4,7 @@ #include "../global/EnumIndexedArray.h" #include "../global/RuleOf5.h" +#include "../global/View.h" #include "../global/logging.h" #include "../global/utils.h" #include "UboBlocks.h" @@ -143,8 +144,8 @@ class UboManager final * * Overload for bulk vector data. */ - template - GLuint update(Legacy::Functions &gl, Legacy::SharedVboEnum block, const std::vector &data) + template + ALLOW_DISCARD GLuint update(Functions &gl, const SharedVboEnum block, const View data) { Legacy::VBO &vbo = getOrCreateVbo(gl, block); static_cast( diff --git a/src/opengl/legacy/FontMesh3d.cpp b/src/opengl/legacy/FontMesh3d.cpp index a81a2810b..a6e6ee671 100644 --- a/src/opengl/legacy/FontMesh3d.cpp +++ b/src/opengl/legacy/FontMesh3d.cpp @@ -14,7 +14,7 @@ FontMesh3d::FontMesh3d(const SharedFunctions &functions, const std::shared_ptr &sharedShader, SharedMMTexture texture, const DrawModeEnum mode, - const std::vector &verts) + const View verts) : Base{functions, sharedShader, mode, verts} , m_texture{std::move(texture)} {} diff --git a/src/opengl/legacy/FontMesh3d.h b/src/opengl/legacy/FontMesh3d.h index 18b108153..d7db8f480 100644 --- a/src/opengl/legacy/FontMesh3d.h +++ b/src/opengl/legacy/FontMesh3d.h @@ -2,12 +2,12 @@ // SPDX-License-Identifier: GPL-2.0-or-later // Copyright (C) 2019 The MMapper Authors +#include "../../global/View.h" #include "Shaders.h" #include "SimpleMesh.h" #include #include -#include #define VOIDPTR_OFFSETOF(x, y) reinterpret_cast(offsetof(x, y)) #define VPO(x) VOIDPTR_OFFSETOF(VertexType_, x) @@ -53,7 +53,7 @@ class NODISCARD SimpleFont3dMesh : public SimpleMesh explicit SimpleFont3dMesh(const SharedFunctions &sharedFunctions, const std::shared_ptr &sharedProgram, const DrawModeEnum mode, - const std::vector &verts) + const View verts) : Base(sharedFunctions, sharedProgram, mode, verts) {} @@ -105,7 +105,7 @@ class NODISCARD FontMesh3d final : public SimpleFont3dMesh const std::shared_ptr &sharedShader, SharedMMTexture texture, DrawModeEnum mode, - const std::vector &verts); + View verts); public: ~FontMesh3d() final; diff --git a/src/opengl/legacy/Legacy.cpp b/src/opengl/legacy/Legacy.cpp index c8cb265d1..36043cf0a 100644 --- a/src/opengl/legacy/Legacy.cpp +++ b/src/opengl/legacy/Legacy.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -76,7 +75,7 @@ void Functions::applyDefaultUniformBlockBindings(const GLuint program) template typename Mesh_, typename VertType_, typename ProgType_> NODISCARD static auto createMesh(const SharedFunctions &functions, const DrawModeEnum mode, - const std::vector &batch, + const View batch, const std::shared_ptr &prog) { using Mesh = Mesh_; @@ -87,7 +86,7 @@ NODISCARD static auto createMesh(const SharedFunctions &functions, template typename Mesh_, typename VertType_, typename ProgType_> NODISCARD static UniqueMesh createUniqueMesh(const SharedFunctions &functions, const DrawModeEnum mode, - const std::vector &batch, + const View batch, const std::shared_ptr &prog) { assert(mode != DrawModeEnum::INVALID); @@ -97,7 +96,7 @@ NODISCARD static UniqueMesh createUniqueMesh(const SharedFunctions &functions, template typename Mesh_, typename VertType_, typename ProgType_> NODISCARD static UniqueMesh createTexturedMesh(const SharedFunctions &functions, const DrawModeEnum mode, - const std::vector &batch, + const View batch, const std::shared_ptr &prog, const MMTextureId texture) { @@ -106,21 +105,20 @@ NODISCARD static UniqueMesh createTexturedMesh(const SharedFunctions &functions, texture, createMesh(functions, mode, batch, prog))}; } -UniqueMesh Functions::createPointBatch(const std::vector &batch) +UniqueMesh Functions::createPointBatch(const View batch) { const auto &prog = getShaderPrograms().getPointShader(); return createUniqueMesh(shared_from_this(), DrawModeEnum::POINTS, batch, prog); } -UniqueMesh Functions::createPlainBatch(const DrawModeEnum mode, const std::vector &batch) +UniqueMesh Functions::createPlainBatch(const DrawModeEnum mode, const View batch) { assert(static_cast(mode) >= VERTS_PER_LINE); const auto &prog = getShaderPrograms().getPlainUColorShader(); return createUniqueMesh(shared_from_this(), mode, batch, prog); } -UniqueMesh Functions::createColoredBatch(const DrawModeEnum mode, - const std::vector &batch) +UniqueMesh Functions::createColoredBatch(const DrawModeEnum mode, const View batch) { assert(static_cast(mode) >= VERTS_PER_LINE); const auto &prog = getShaderPrograms().getPlainAColorShader(); @@ -128,7 +126,7 @@ UniqueMesh Functions::createColoredBatch(const DrawModeEnum mode, } UniqueMesh Functions::createTexturedBatch(const DrawModeEnum mode, - const std::vector &batch, + const View batch, const MMTextureId texture) { assert(static_cast(mode) >= VERTS_PER_TRI); @@ -137,7 +135,7 @@ UniqueMesh Functions::createTexturedBatch(const DrawModeEnum mode, } UniqueMesh Functions::createColoredTexturedBatch(const DrawModeEnum mode, - const std::vector &batch, + const View batch, const MMTextureId texture) { assert(static_cast(mode) >= VERTS_PER_TRI); @@ -145,7 +143,7 @@ UniqueMesh Functions::createColoredTexturedBatch(const DrawModeEnum mode, return createTexturedMesh(shared_from_this(), mode, batch, prog, texture); } -UniqueMesh Functions::createRoomQuadTexBatch(const std::vector &batch, +UniqueMesh Functions::createRoomQuadTexBatch(const View batch, const MMTextureId texture) { const auto mode = DrawModeEnum::INSTANCED_QUADS; @@ -156,7 +154,7 @@ UniqueMesh Functions::createRoomQuadTexBatch(const std::vector template typename Mesh_, typename ShaderType_> static void renderImmediate(const SharedFunctions &sharedFunctions, const DrawModeEnum mode, - const std::vector &verts, + const View verts, const std::shared_ptr &sharedShader, const GLRenderState &renderState) { @@ -202,7 +200,7 @@ static void renderImmediate(const SharedFunctions &sharedFunctions, } void Functions::renderPlain(const DrawModeEnum mode, - const std::vector &verts, + const View verts, const GLRenderState &state) { assert(static_cast(mode) >= VERTS_PER_LINE); @@ -212,7 +210,7 @@ void Functions::renderPlain(const DrawModeEnum mode, } void Functions::renderColored(const DrawModeEnum mode, - const std::vector &verts, + const View verts, const GLRenderState &state) { assert(static_cast(mode) >= VERTS_PER_LINE); @@ -220,7 +218,7 @@ void Functions::renderColored(const DrawModeEnum mode, renderImmediate(shared_from_this(), mode, verts, prog, state); } -void Functions::renderPoints(const std::vector &verts, const GLRenderState &state) +void Functions::renderPoints(const View verts, const GLRenderState &state) { assert(state.uniforms.pointSize); const auto &prog = getShaderPrograms().getPointShader(); @@ -232,7 +230,7 @@ void Functions::renderPoints(const std::vector &verts, const GLRender } void Functions::renderTextured(const DrawModeEnum mode, - const std::vector &verts, + const View verts, const GLRenderState &state) { assert(static_cast(mode) >= VERTS_PER_TRI); @@ -241,7 +239,7 @@ void Functions::renderTextured(const DrawModeEnum mode, } void Functions::renderColoredTextured(const DrawModeEnum mode, - const std::vector &verts, + const View verts, const GLRenderState &state) { assert(static_cast(mode) >= VERTS_PER_TRI); @@ -253,7 +251,7 @@ void Functions::renderColoredTextured(const DrawModeEnum mode, state); } -void Functions::renderFont3d(const SharedMMTexture &texture, const std::vector &verts) +void Functions::renderFont3d(const SharedMMTexture &texture, const View verts) { const auto state = GLRenderState() @@ -271,7 +269,7 @@ void Functions::renderFont3d(const SharedMMTexture &texture, const std::vector &batch) + const View batch) { assert(static_cast(mode) >= VERTS_PER_TRI); const auto &prog = getShaderPrograms().getFontShader(); diff --git a/src/opengl/legacy/Legacy.h b/src/opengl/legacy/Legacy.h index d6f67065f..9bfb670cb 100644 --- a/src/opengl/legacy/Legacy.h +++ b/src/opengl/legacy/Legacy.h @@ -4,6 +4,7 @@ #include "../../global/Badge.h" #include "../../global/RuleOf5.h" +#include "../../global/View.h" #include "../../global/utils.h" #include "../OpenGLConfig.h" #include "../OpenGLTypes.h" @@ -85,8 +86,7 @@ NODISCARD static inline GLenum toGLenum(const BufferUsageEnum usage) // Note: This version is only suitable for drawArrays(). You'll need another function // to transform indices if you want to use it with drawElements(). template -NODISCARD static inline std::vector convertQuadsToTris( - const std::vector &quads) +NODISCARD static inline std::vector convertQuadsToTris(const View quads) { // d-c // |/| @@ -377,10 +377,10 @@ class NODISCARD Functions : protected QOpenGLExtraFunctions, Base::glVertexAttribIPointer(index, size, type, stride, pointer); } - template + template NODISCARD GLsizei setVbo(const GLenum target, const GLuint buffer, - const std::vector &batch, + const View batch, const BufferUsageEnum usage = BufferUsageEnum::DYNAMIC_DRAW) { enforceTriviallyCopyable(); @@ -405,18 +405,18 @@ class NODISCARD Functions : protected QOpenGLExtraFunctions, Base::glBindBuffer(target, 0); } - template - NODISCARD std::pair setVbo( - const DrawModeEnum mode, - const GLuint vbo, - const std::vector &batch, - const BufferUsageEnum usage = BufferUsageEnum::DYNAMIC_DRAW) + template + NODISCARD auto setVbo(const DrawModeEnum mode, + const GLuint vbo, + View batch, + const BufferUsageEnum usage = BufferUsageEnum::DYNAMIC_DRAW) { + using Pair = std::pair; if (mode == DrawModeEnum::QUADS && !canRenderQuads()) { - return std::pair(DrawModeEnum::TRIANGLES, - setVbo(GL_ARRAY_BUFFER, vbo, convertQuadsToTris(batch), usage)); + const auto tris = convertQuadsToTris(batch); + return Pair{DrawModeEnum::TRIANGLES, setVbo(GL_ARRAY_BUFFER, vbo, View{tris}, usage)}; } - return std::pair(mode, setVbo(GL_ARRAY_BUFFER, vbo, batch, usage)); + return Pair{mode, setVbo(GL_ARRAY_BUFFER, vbo, batch, usage)}; } void clearVbo(const GLuint vbo, const BufferUsageEnum usage = BufferUsageEnum::DYNAMIC_DRAW) @@ -427,43 +427,36 @@ class NODISCARD Functions : protected QOpenGLExtraFunctions, } public: - NODISCARD UniqueMesh createPointBatch(const std::vector &batch); + NODISCARD UniqueMesh createPointBatch(View batch); public: - NODISCARD UniqueMesh createPlainBatch(DrawModeEnum mode, const std::vector &batch); - NODISCARD UniqueMesh createColoredBatch(DrawModeEnum mode, const std::vector &batch); + NODISCARD UniqueMesh createPlainBatch(DrawModeEnum mode, View batch); + NODISCARD UniqueMesh createColoredBatch(DrawModeEnum mode, View batch); NODISCARD UniqueMesh createTexturedBatch(DrawModeEnum mode, - const std::vector &batch, + View batch, MMTextureId texture); NODISCARD UniqueMesh createColoredTexturedBatch(DrawModeEnum mode, - const std::vector &batch, + View batch, MMTextureId texture); public: - NODISCARD UniqueMesh createRoomQuadTexBatch(const std::vector &batch, - MMTextureId texture); + NODISCARD UniqueMesh createRoomQuadTexBatch(View batch, MMTextureId texture); public: NODISCARD UniqueMesh createFontMesh(const SharedMMTexture &texture, DrawModeEnum mode, - const std::vector &batch); + View batch); public: - void renderPoints(const std::vector &verts, const GLRenderState &state); - - void renderPlain(DrawModeEnum mode, - const std::vector &verts, - const GLRenderState &state); - void renderColored(DrawModeEnum mode, - const std::vector &verts, - const GLRenderState &state); - void renderTextured(DrawModeEnum mode, - const std::vector &verts, - const GLRenderState &state); + void renderPoints(View verts, const GLRenderState &state); + + void renderPlain(DrawModeEnum mode, View verts, const GLRenderState &state); + void renderColored(DrawModeEnum mode, View verts, const GLRenderState &state); + void renderTextured(DrawModeEnum mode, View verts, const GLRenderState &state); void renderColoredTextured(DrawModeEnum mode, - const std::vector &verts, + View verts, const GLRenderState &state); - void renderFont3d(const SharedMMTexture &texture, const std::vector &verts); + void renderFont3d(const SharedMMTexture &texture, View verts); public: void renderFullScreenTriangle(const std::shared_ptr &prog, diff --git a/src/opengl/legacy/SimpleMesh.h b/src/opengl/legacy/SimpleMesh.h index 765318e6c..a5e7bc5fd 100644 --- a/src/opengl/legacy/SimpleMesh.h +++ b/src/opengl/legacy/SimpleMesh.h @@ -3,6 +3,7 @@ // Copyright (C) 2019 The MMapper Authors #include "../../global/RAII.h" +#include "../../global/View.h" #include "../OpenGLTypes.h" #include "AbstractShaderProgram.h" #include "Binders.h" @@ -13,7 +14,6 @@ #include #include #include -#include namespace Legacy { @@ -49,7 +49,7 @@ class NODISCARD SimpleMesh : public IRenderable explicit SimpleMesh(const SharedFunctions &sharedFunctions, const std::shared_ptr &sharedProgram, const DrawModeEnum mode, - const std::vector &verts) + const View verts) : SimpleMesh{sharedFunctions, sharedProgram} { setStatic(mode, verts); @@ -95,18 +95,18 @@ class NODISCARD SimpleMesh : public IRenderable void unsafe_swapVboId(VBO &vbo) { return m_vbo.unsafe_swapVboId(vbo); } public: - void setDynamic(const DrawModeEnum mode, const std::vector &verts) + void setDynamic(const DrawModeEnum mode, const View verts) { setCommon(mode, verts, BufferUsageEnum::DYNAMIC_DRAW); } - void setStatic(const DrawModeEnum mode, const std::vector &verts) + void setStatic(const DrawModeEnum mode, const View verts) { setCommon(mode, verts, BufferUsageEnum::STATIC_DRAW); } private: void setCommon(const DrawModeEnum mode, - const std::vector &verts, + const View verts, const BufferUsageEnum usage) { const auto numVerts = verts.size(); diff --git a/src/parser/AbstractParser-Commands.cpp b/src/parser/AbstractParser-Commands.cpp index 40659f7f7..44632e9d1 100644 --- a/src/parser/AbstractParser-Commands.cpp +++ b/src/parser/AbstractParser-Commands.cpp @@ -10,6 +10,7 @@ #include "../global/LineUtils.h" #include "../global/StringView.h" #include "../global/TextUtils.h" +#include "../global/View.h" #include "../global/progresscounter.h" #include "../map/CommandId.h" #include "../map/DoorFlags.h" @@ -915,7 +916,7 @@ void AbstractParser::initSpecialCommandMap() add( cmdHelp, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { this->parseHelp(rest); return true; }, @@ -927,7 +928,7 @@ void AbstractParser::initSpecialCommandMap() if (auto cmd = getParserCommandName(x)) { add( cmd, - [this, x](const std::vector & /*s*/, StringView rest) { + [this, x](const View /*s*/, StringView rest) { return parseDoorAction(x, rest); }, makeSimpleHelp("Sets door action: " + std::string{cmd.getCommand()})); @@ -938,7 +939,7 @@ void AbstractParser::initSpecialCommandMap() add( cmdBack, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { if (!rest.isEmpty()) { return false; } @@ -948,35 +949,35 @@ void AbstractParser::initSpecialCommandMap() makeSimpleHelp("Delete prespammed commands from queue.")); add( cmdConfig, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { this->doConfig(rest); return true; }, makeSimpleHelp("Configuration commands.")); add( cmdConnect, - [this](const std::vector & /*s*/, StringView /*rest*/) { + [this](const View /*s*/, StringView /*rest*/) { this->doConnectToHost(); return true; }, makeSimpleHelp("Connect to the MUD.")); add( cmdDirections, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { this->parseDirections(rest); return true; }, makeSimpleHelp("Prints directions to matching rooms.")); add( cmdDisconnect, - [this](const std::vector & /*s*/, StringView /*rest*/) { + [this](const View /*s*/, StringView /*rest*/) { this->doDisconnectFromHost(); return true; }, makeSimpleHelp("Disconnect from the MUD.")); add( cmdRemoveDoorNames, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { if (!rest.isEmpty()) { return false; } @@ -986,7 +987,7 @@ void AbstractParser::initSpecialCommandMap() makeSimpleHelp("Remove hidden door names.")); add( cmdGenerateBaseMap, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { if (!rest.isEmpty()) { return false; } @@ -996,21 +997,21 @@ void AbstractParser::initSpecialCommandMap() makeSimpleHelp("Generate the base map.")); add( cmdMap, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { doMapCommand(rest); return true; }, makeSimpleHelp("Print the changes changes since the last save")); add( cmdSearch, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { this->parseSearch(rest); return true; }, makeSimpleHelp("Highlight matching rooms on the map.")); add( cmdSet, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { this->parseSetCommand(rest); return true; }, @@ -1046,7 +1047,7 @@ void AbstractParser::initSpecialCommandMap() }); add( cmdTime, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { if (!rest.isEmpty()) { return false; } @@ -1056,7 +1057,7 @@ void AbstractParser::initSpecialCommandMap() makeSimpleHelp("Displays the current MUME time.")); add( cmdVote, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { if (!rest.isEmpty()) { return false; } @@ -1068,7 +1069,7 @@ void AbstractParser::initSpecialCommandMap() /* mark commands */ add( cmdMark, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { parseMark(rest); return true; }, @@ -1077,7 +1078,7 @@ void AbstractParser::initSpecialCommandMap() /* room commands */ add( cmdRoom, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { parseRoom(rest); return true; }, @@ -1086,7 +1087,7 @@ void AbstractParser::initSpecialCommandMap() /* group commands */ add( cmdGroup, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { parseGroup(rest); return true; }, @@ -1095,7 +1096,7 @@ void AbstractParser::initSpecialCommandMap() /* hpotkey commands */ add( cmdHotkey, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { parseHotkey(rest); return true; }, @@ -1104,7 +1105,7 @@ void AbstractParser::initSpecialCommandMap() /* timers command */ add( cmdTimer, - [this](const std::vector & /*s*/, StringView rest) { + [this](const View /*s*/, StringView rest) { parseTimer(rest); return true; }, diff --git a/tests/testadventure.cpp b/tests/testadventure.cpp index 68706a443..98fde6b92 100644 --- a/tests/testadventure.cpp +++ b/tests/testadventure.cpp @@ -7,6 +7,7 @@ #include "../src/adventure/adventuretracker.h" #include "../src/global/Charset.h" #include "../src/global/HideQDebug.h" +#include "../src/global/View.h" #include "../src/global/tests.h" #include "../src/observer/gameobserver.h" @@ -273,7 +274,7 @@ void TestAdventure::testE2E() killedMobs.push_back(x); }); - auto pump = [&observer](const std::vector &lines) { + auto pump = [&observer](const View lines) { mmqt::HideQDebug forThisFunction; for (const TestLine &tl : lines) { observer.observeSentToUser(tl.line); From 3aa61d6570f922d9583b3cd86e2323e8df17f205 Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Sun, 31 May 2026 20:59:45 -0500 Subject: [PATCH 7/8] pass more small types by value --- src/display/Characters.cpp | 36 ++++++++++----------- src/display/Characters.h | 42 ++++++++++-------------- src/display/Connections.cpp | 34 ++++++++++---------- src/display/Connections.h | 7 ++-- src/display/InfomarkSelection.cpp | 12 +++---- src/display/InfomarkSelection.h | 21 ++++++------ src/display/Infomarks.cpp | 23 ++++++------- src/display/Infomarks.h | 16 +++++----- src/display/MapCanvasData.cpp | 22 ++++++------- src/display/MapCanvasData.h | 28 ++++++++-------- src/display/ProjectionUtils.cpp | 10 +++--- src/display/ProjectionUtils.h | 8 ++--- src/display/RoomSelections.cpp | 2 +- src/display/mapcanvas.cpp | 18 +++++------ src/display/mapcanvas.h | 12 +++---- src/display/mapwindow.cpp | 10 +++--- src/display/mapwindow.h | 12 +++---- src/global/Charset.h | 4 +-- src/global/Color.cpp | 6 ++-- src/global/Color.h | 4 +-- src/global/Connections.h | 2 +- src/mainwindow/findroomsdlg.cpp | 2 +- src/mainwindow/findroomsdlg.h | 2 +- src/mainwindow/mainwindow.cpp | 6 ++-- src/mainwindow/mainwindow.h | 4 +-- src/map/ChangePrinter.cpp | 2 +- src/map/ChangePrinter.h | 4 +-- src/map/ChangeTypes.h | 2 +- src/map/Changes.cpp | 4 +-- src/map/ExitDirection.cpp | 4 +-- src/map/ExitDirection.h | 4 +-- src/map/Map.cpp | 10 +++--- src/map/Map.h | 8 ++--- src/map/RawRoom.h | 6 ++-- src/map/RawRooms.h | 9 ++---- src/map/RoomHandle.cpp | 2 +- src/map/RoomHandle.h | 2 +- src/map/SpatialDb.cpp | 14 ++++---- src/map/SpatialDb.h | 12 +++---- src/map/World.cpp | 34 ++++++++++---------- src/map/World.h | 19 ++++++----- src/map/WorldBuilder.cpp | 2 +- src/map/coordinate.cpp | 26 +++++++-------- src/map/coordinate.h | 48 ++++++++++++++-------------- src/map/infomark.h | 6 ++-- src/map/utils.cpp | 3 +- src/map/utils.h | 4 +-- src/mapdata/mapdata.cpp | 2 +- src/mapdata/mapdata.h | 6 ++-- src/mapfrontend/MapHistory.h | 11 ++++--- src/mapfrontend/mapfrontend.cpp | 10 +++--- src/mapfrontend/mapfrontend.h | 24 +++++++------- src/mapstorage/MmpMapStorage.cpp | 2 +- src/mapstorage/PandoraMapStorage.cpp | 2 +- src/mapstorage/XmlMapStorage.cpp | 2 +- src/mapstorage/XmlMapStorage.h | 2 +- src/mapstorage/jsonmapstorage.cpp | 8 ++--- src/mapstorage/mapstorage.cpp | 2 +- src/opengl/Font.cpp | 16 +++++----- src/opengl/Font.h | 2 +- src/opengl/LineRendering.cpp | 20 ++++++------ src/opengl/LineRendering.h | 26 ++++++--------- src/opengl/OpenGLTypes.h | 24 +++++++------- src/opengl/legacy/Legacy.h | 4 +-- src/parser/AbstractParser-Mark.cpp | 2 +- src/pathmachine/path.cpp | 2 +- src/pathmachine/path.h | 2 +- src/pathmachine/pathmachine.cpp | 4 +-- 68 files changed, 363 insertions(+), 378 deletions(-) diff --git a/src/display/Characters.cpp b/src/display/Characters.cpp index abc0b1fd5..e9ba5e6f3 100644 --- a/src/display/Characters.cpp +++ b/src/display/Characters.cpp @@ -31,7 +31,7 @@ static constexpr float CHAR_ARROW_LINE_WIDTH = 2.f; static constexpr float PATH_LINE_WIDTH = 0.1f; static constexpr float PATH_POINT_SIZE = 8.f; -DistantObjectTransform DistantObjectTransform::construct(const glm::vec3 &pos, +DistantObjectTransform DistantObjectTransform::construct(const glm::vec3 pos, const MapScreen &mapScreen, const float marginPixels) { @@ -44,12 +44,12 @@ DistantObjectTransform DistantObjectTransform::construct(const glm::vec3 &pos, return DistantObjectTransform{hint, degrees}; } -bool CharacterBatch::isVisible(const Coordinate &c, float margin) const +bool CharacterBatch::isVisible(const Coordinate c, float margin) const { return m_mapScreen.isRoomVisible(c, margin); } -void CharacterBatch::drawCharacter(const Coordinate &c, const Color color, bool fill) +void CharacterBatch::drawCharacter(const Coordinate c, const Color color, bool fill) { const Configuration::CanvasSettings &settings = getConfig().canvas; @@ -103,14 +103,14 @@ void CharacterBatch::drawCharacter(const Coordinate &c, const Color color, bool gl.drawBox(c, fill, beacon, isFar); } -void CharacterBatch::CharFakeGL::drawPathSegment(const glm::vec3 &p1, - const glm::vec3 &p2, +void CharacterBatch::CharFakeGL::drawPathSegment(const glm::vec3 p1, + const glm::vec3 p2, const Color color) { mmgl::generateLineQuadsSafe(m_pathLineQuads, p1, p2, PATH_LINE_WIDTH, color); } -void CharacterBatch::drawPreSpammedPath(const Coordinate &c1, +void CharacterBatch::drawPreSpammedPath(const Coordinate c1, const std::vector &path, const Color color) { @@ -123,13 +123,13 @@ void CharacterBatch::drawPreSpammedPath(const Coordinate &c1, TranslatedVerts translated; translated.reserve(path.size() + 1); - const auto add = [&translated](const Coordinate &c) -> void { + const auto add = [&translated](const Coordinate c) -> void { static const glm::vec3 PATH_OFFSET{0.5f, 0.5f, 0.f}; translated.push_back(c.to_vec3() + PATH_OFFSET); }; add(c1); - for (const Coordinate &c2 : path) { + for (const Coordinate c2 : path) { add(c2); } return translated; @@ -146,14 +146,14 @@ void CharacterBatch::drawPreSpammedPath(const Coordinate &c1, gl.drawPathPoint(color, verts.back()); } -void CharacterBatch::CharFakeGL::drawQuadCommon(const glm::vec2 &in_a, - const glm::vec2 &in_b, - const glm::vec2 &in_c, - const glm::vec2 &in_d, +void CharacterBatch::CharFakeGL::drawQuadCommon(const glm::vec2 in_a, + const glm::vec2 in_b, + const glm::vec2 in_c, + const glm::vec2 in_d, const QuadOptsEnum options) { const auto &m = m_stack.top().modelView; - const auto transform = [&m](const glm::vec2 &vin) -> glm::vec3 { + const auto transform = [&m](const glm::vec2 vin) -> glm::vec3 { const auto vtmp = m * glm::vec4(vin, 0.f, 1.f); return glm::vec3{vtmp / vtmp.w}; }; @@ -226,7 +226,7 @@ void CharacterBatch::CharFakeGL::drawQuadCommon(const glm::vec2 &in_a, } } -void CharacterBatch::CharFakeGL::drawBox(const Coordinate &coord, +void CharacterBatch::CharFakeGL::drawBox(const Coordinate coord, bool fill, bool beacon, const bool isFar) @@ -280,7 +280,7 @@ void CharacterBatch::CharFakeGL::drawBox(const Coordinate &coord, const auto &color = m_color; const auto &m = m_stack.top().modelView; - const auto addTransformed = [this, &color, &m](const glm::vec2 &in_vert) -> void { + const auto addTransformed = [this, &color, &m](const glm::vec2 in_vert) -> void { const auto tmp = m * glm::vec4(in_vert, 0.f, 1.f); m_charRoomQuads.emplace_back(color, glm::vec3{in_vert, 0}, glm::vec3{tmp / tmp.w}); }; @@ -364,7 +364,7 @@ void CharacterBatch::CharFakeGL::reallyDrawPaths(OpenGL &gl) } } -void CharacterBatch::CharFakeGL::addScreenSpaceArrow(const glm::vec3 &pos, +void CharacterBatch::CharFakeGL::addScreenSpaceArrow(const glm::vec3 pos, const float degrees, const Color color, const bool fill) @@ -381,7 +381,7 @@ void CharacterBatch::CharFakeGL::addScreenSpaceArrow(const glm::vec3 &pos, const glm::vec3 z{0, 0, 1}; const glm::mat4 rotation = glm::rotate(glm::mat4(1), radians, z); for (size_t i = 0; i < 4; ++i) { - const glm::vec2 &tc = texCoords[i]; + const glm::vec2 tc = texCoords[i]; const auto tmp = rotation * glm::vec4(tc * 2.f - 1.f, 0, 1); const glm::vec2 screenSpaceOffset = scale * glm::vec2(tmp) / tmp.w; // solid |filled @@ -393,7 +393,7 @@ void CharacterBatch::CharFakeGL::addScreenSpaceArrow(const glm::vec3 &pos, } } -void CharacterBatch::CharFakeGL::addName(const Coordinate &c, +void CharacterBatch::CharFakeGL::addName(const Coordinate c, const std::string &name, const Color color, const MapScreen &mapScreen) diff --git a/src/display/Characters.h b/src/display/Characters.h index 106a93cca..549cd1a06 100644 --- a/src/display/Characters.h +++ b/src/display/Characters.h @@ -33,14 +33,14 @@ class NODISCARD DistantObjectTransform final const float rotationDegrees = 0.f; public: - explicit DistantObjectTransform(const glm::vec3 &offset_, const float rotationDegrees_) + explicit DistantObjectTransform(const glm::vec3 offset_, const float rotationDegrees_) : offset{offset_} , rotationDegrees{rotationDegrees_} {} public: // Caller must apply the correct translation and rotation. - NODISCARD static DistantObjectTransform construct(const glm::vec3 &pos, + NODISCARD static DistantObjectTransform construct(glm::vec3 pos, const MapScreen &mapScreen, float marginPixels); }; @@ -79,7 +79,7 @@ class NODISCARD CharacterBatch final { // REVISIT: just make this the global operator<(), // so it can be picked up by std::less. - bool operator()(const Coordinate &lhs, const Coordinate &rhs) const + NODISCARD bool operator()(const Coordinate lhs, const Coordinate rhs) const { if (lhs.x < rhs.x) { return true; @@ -146,22 +146,19 @@ class NODISCARD CharacterBatch final auto &m = m_stack.top().modelView; m = glm::scale(m, glm::vec3{x, y, z}); } - void glTranslatef(const glm::vec3 &v) + void glTranslatef(const glm::vec3 v) { auto &m = m_stack.top().modelView; m = glm::translate(m, v); } void drawArrow(bool fill, bool beacon); - void drawBox(const Coordinate &coord, bool fill, bool beacon, bool isFar); - void addScreenSpaceArrow(const glm::vec3 &pos, float degrees, const Color color, bool fill); - void addName(const Coordinate &c, - const std::string &name, - const Color color, - const MapScreen &mapScreen); - void drawPathSegment(const glm::vec3 &p1, const glm::vec3 &p2, const Color color); + void drawBox(Coordinate coord, bool fill, bool beacon, bool isFar); + void addScreenSpaceArrow(glm::vec3 pos, float degrees, Color color, bool fill); + void addName(Coordinate c, const std::string &name, Color color, const MapScreen &mapScreen); + void drawPathSegment(glm::vec3 p1, glm::vec3 p2, Color color); // with blending, without depth; always size 8 - void drawPathPoint(const Color color, const glm::vec3 &pos) + void drawPathPoint(const Color color, const glm::vec3 pos) { m_pathPoints.emplace_back(color, pos); } @@ -183,11 +180,8 @@ class NODISCARD CharacterBatch final return static_cast(static_cast(lhs) & static_cast(rhs)); } - void drawQuadCommon(const glm::vec2 &a, - const glm::vec2 &b, - const glm::vec2 &c, - const glm::vec2 &d, - QuadOptsEnum options); + + void drawQuadCommon(glm::vec2 a, glm::vec2 b, glm::vec2 c, glm::vec2 d, QuadOptsEnum options); }; private: @@ -207,23 +201,21 @@ class NODISCARD CharacterBatch final NODISCARD CharFakeGL &getOpenGL() { return m_fakeGL; } public: - void incrementCount(const Coordinate &c) { getOpenGL().reserve(c); } + void incrementCount(const Coordinate c) { getOpenGL().reserve(c); } - void resetCount(const Coordinate &c) { getOpenGL().clear(c); } + void resetCount(const Coordinate c) { getOpenGL().clear(c); } - NODISCARD bool isVisible(const Coordinate &c, float margin) const; + NODISCARD bool isVisible(Coordinate c, float margin) const; public: - void drawCharacter(const Coordinate &coordinate, const Color color, bool fill = true); + void drawCharacter(Coordinate coordinate, Color color, bool fill = true); - void drawName(const Coordinate &c, const std::string &name, const Color color) + void drawName(const Coordinate c, const std::string &name, const Color color) { getOpenGL().addName(c, name, color, m_mapScreen); } - void drawPreSpammedPath(const Coordinate &coordinate, - const std::vector &path, - const Color color); + void drawPreSpammedPath(Coordinate coordinate, const std::vector &path, Color color); public: void reallyDraw(OpenGL &gl, const MapCanvasTextures &textures, GLFont &font) diff --git a/src/display/Connections.cpp b/src/display/Connections.cpp index d19258815..656420361 100644 --- a/src/display/Connections.cpp +++ b/src/display/Connections.cpp @@ -36,7 +36,7 @@ static constexpr const float NEW_CONNECTION_POINT_SIZE = 8.f; static constexpr const float FAINT_CONNECTION_ALPHA = 0.1f; -NODISCARD static bool isCrossingZAxis(const glm::vec3 &p1, const glm::vec3 &p2) +NODISCARD static bool isCrossingZAxis(const glm::vec3 p1, const glm::vec3 p2) { return std::abs(p1.z - p2.z) > mmgl::GEOMETRIC_EPSILON; } @@ -141,12 +141,12 @@ void ConnectionDrawer::drawRoomDoorName(const RoomHandle &sourceRoom, const RoomHandle &targetRoom, const ExitDirEnum targetDir) { - static const auto isShortDistance = [](const Coordinate &a, const Coordinate &b) -> bool { + static const auto isShortDistance = [](const Coordinate a, const Coordinate b) -> bool { return glm::all(glm::lessThanEqual(glm::abs(b.to_ivec2() - a.to_ivec2()), glm::ivec2(1))); }; - const Coordinate &sourcePos = sourceRoom.getPosition(); - const Coordinate &targetPos = targetRoom.getPosition(); + const Coordinate sourcePos = sourceRoom.getPosition(); + const Coordinate targetPos = targetRoom.getPosition(); if (sourcePos.z != m_currentLayer && targetPos.z != m_currentLayer) { return; @@ -315,7 +315,7 @@ void ConnectionDrawer::drawRoomConnectionsAndDoors(const RoomHandle &room) } // Only draw the connection if the target room is within the bounds - const Coordinate &target_coord = targetRoom.getPosition(); + const Coordinate target_coord = targetRoom.getPosition(); if (!m_bounds.contains(target_coord)) { continue; } @@ -359,8 +359,8 @@ void ConnectionDrawer::drawConnection(const RoomHandle &leftRoom, const bool inExitFlags) { /* WARNING: attempts to write to a different layer may result in weird graphical bugs. */ - const Coordinate &leftPos = leftRoom.getPosition(); - const Coordinate &rightPos = rightRoom.getPosition(); + const Coordinate leftPos = leftRoom.getPosition(); + const Coordinate rightPos = rightRoom.getPosition(); const int leftX = leftPos.x; const int leftY = leftPos.y; const int leftZ = leftPos.z; @@ -661,7 +661,7 @@ void MapCanvas::paintNearbyConnectionPoints() }); std::vector points; - const auto addPoint = [isSelection, &points](const Coordinate &roomCoord, + const auto addPoint = [isSelection, &points](const Coordinate roomCoord, const RoomHandle &room, const ExitDirEnum dir, const std::optional &optFirst) -> void { @@ -712,8 +712,8 @@ void MapCanvas::paintNearbyConnectionPoints() && (m_connectionSelection->isFirstValid() || m_connectionSelection->isSecondValid())) { const CD valid = m_connectionSelection->isFirstValid() ? m_connectionSelection->getFirst() : m_connectionSelection->getSecond(); - const Coordinate &c = valid.room.getPosition(); - const glm::vec3 &pos = c.to_vec3(); + const Coordinate c = valid.room.getPosition(); + const glm::vec3 pos = c.to_vec3(); points.emplace_back(Colors::cyan, pos + getConnectionOffset(valid.direction)); addPoints(MouseSel{Coordinate2f{pos.x, pos.y}, c.z}, valid); @@ -757,7 +757,7 @@ void MapCanvas::paintSelectedConnection() return; } - const glm::vec3 &pos2 = optPos2.value(); + const glm::vec3 pos2 = optPos2.value(); auto &gl = getOpenGL(); const auto rs = GLRenderState().withColor(Colors::red); @@ -776,14 +776,14 @@ void MapCanvas::paintSelectedConnection() static constexpr float LONG_LINE_HALFLEN = 1.5f; static constexpr float LONG_LINE_LEN = 2.f * LONG_LINE_HALFLEN; -NODISCARD static bool isLongLine(const glm::vec3 &a, const glm::vec3 &b) +NODISCARD static bool isLongLine(const glm::vec3 a, const glm::vec3 b) { return glm::length(a - b) >= LONG_LINE_LEN; } -void ConnectionDrawer::ConnectionFakeGL::drawTriangle(const glm::vec3 &a, - const glm::vec3 &b, - const glm::vec3 &c) +void ConnectionDrawer::ConnectionFakeGL::drawTriangle(const glm::vec3 a, + const glm::vec3 b, + const glm::vec3 c) { const auto &color = isNormal() ? getCanvasNamedColorOptions().connectionNormalColor : Colors::red; @@ -795,11 +795,11 @@ void ConnectionDrawer::ConnectionFakeGL::drawTriangle(const glm::vec3 &a, void ConnectionDrawer::ConnectionFakeGL::drawLineStrip(const View points) { - const auto transform = [this](const glm::vec3 &vert) { return vert + m_offset; }; + const auto transform = [this](const glm::vec3 vert) { return vert + m_offset; }; const float extension = CONNECTION_LINE_WIDTH * 0.5f; // Helper lambda to generate a quad between two points with a specific color. - auto generateQuad = [this](const glm::vec3 &p1, const glm::vec3 &p2, const Color quad_color) { + auto generateQuad = [this](const glm::vec3 p1, const glm::vec3 p2, const Color quad_color) { auto &verts = deref(m_currentBuffer).quadVerts; const glm::vec3 segment = p2 - p1; diff --git a/src/display/Connections.h b/src/display/Connections.h index 7d0b4d20b..849cad360 100644 --- a/src/display/Connections.h +++ b/src/display/Connections.h @@ -138,13 +138,16 @@ struct NODISCARD ConnectionDrawer final DELETE_CTORS_AND_ASSIGN_OPS(ConnectionFakeGL); public: - void setOffset(float x, float y, float z) { m_offset = glm::vec3{x, y, z}; } + void setOffset(const float x, const float y, const float z) + { + m_offset = glm::vec3{x, y, z}; + } void setRed() { m_currentBuffer = &m_buffers.red; } void setNormal() { m_currentBuffer = &m_buffers.normal; } NODISCARD bool isNormal() const { return m_currentBuffer == &m_buffers.normal; } public: - void drawTriangle(const glm::vec3 &a, const glm::vec3 &b, const glm::vec3 &c); + void drawTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c); void drawLineStrip(View points); }; diff --git a/src/display/InfomarkSelection.cpp b/src/display/InfomarkSelection.cpp index 864c9801a..baf629cda 100644 --- a/src/display/InfomarkSelection.cpp +++ b/src/display/InfomarkSelection.cpp @@ -17,8 +17,8 @@ // from "world scale" Coordinate to "infomark scale" Coordinate. InfomarkSelection::InfomarkSelection(Badge, MapData &mapData, - const Coordinate &c1, - const Coordinate &c2) + const Coordinate c1, + const Coordinate c2) : m_mapData{mapData} , m_sel1{c1} , m_sel2{c2} @@ -41,12 +41,12 @@ void InfomarkSelection::init() const auto bx2 = std::max(c1.x, c2.x); const auto by2 = std::max(c1.y, c2.y); - const auto isCoordInSelection = [bx1, by1, bx2, by2](const Coordinate &c) -> bool { + const auto isCoordInSelection = [bx1, by1, bx2, by2](const Coordinate c) -> bool { return isClamped(c.x, bx1, bx2) && isClamped(c.y, by1, by2); }; const auto isMarkerInSelection = [z, &isCoordInSelection](const InfomarkHandle &marker) -> bool { - const Coordinate &pos1 = marker.getPosition1(); + const Coordinate pos1 = marker.getPosition1(); if (z != pos1.z) { return false; } @@ -59,7 +59,7 @@ void InfomarkSelection::init() return false; } - const Coordinate &pos2 = marker.getPosition2(); + const Coordinate pos2 = marker.getPosition2(); if (z != pos2.z) { return false; } @@ -76,7 +76,7 @@ void InfomarkSelection::init() } } -void InfomarkSelection::applyOffset(const Coordinate &offset) const +void InfomarkSelection::applyOffset(const Coordinate offset) const { if (m_markerList.empty()) { qWarning() << "No markers selected."; diff --git a/src/display/InfomarkSelection.h b/src/display/InfomarkSelection.h index 76dfb42dd..47a2cfa59 100644 --- a/src/display/InfomarkSelection.h +++ b/src/display/InfomarkSelection.h @@ -19,14 +19,14 @@ class NODISCARD InfomarkSelection final : public std::enable_shared_from_this allocEmpty(MapData &mapData, - const Coordinate &c1, - const Coordinate &c2) + const Coordinate c1, + const Coordinate c2) { return std::make_shared(Badge{}, mapData, c1, c2); } NODISCARD static std::shared_ptr alloc(MapData &mapData, - const Coordinate &c1, - const Coordinate &c2) + const Coordinate c1, + const Coordinate c2) { auto result = allocEmpty(mapData, c1, c2); result->init(); @@ -34,18 +34,15 @@ class NODISCARD InfomarkSelection final : public std::enable_shared_from_this, - MapData &, - const Coordinate &c1, - const Coordinate &c2); + InfomarkSelection(Badge, MapData &, Coordinate c1, Coordinate c2); DELETE_CTORS_AND_ASSIGN_OPS(InfomarkSelection); private: void init(); public: - NODISCARD const Coordinate &getPosition1() const { return m_sel1; } - NODISCARD const Coordinate &getPosition2() const { return m_sel2; } + NODISCARD Coordinate getPosition1() const { return m_sel1; } + NODISCARD Coordinate getPosition2() const { return m_sel2; } public: NODISCARD size_t size() const { return m_markerList.size(); } @@ -70,7 +67,7 @@ class NODISCARD InfomarkSelection final : public std::enable_shared_from_thism_markerList.end(); return std::find(m_markerList.begin(), endIt, im) != endIt; @@ -91,5 +88,5 @@ class NODISCARD InfomarkSelection final : public std::enable_shared_from_this bgcolor, const FontFormatFlags fontFormatFlag, const int rotationAngle) { assert(!m_text.locked); - m_text.text.emplace_back(pos, text, color, bgcolor, fontFormatFlag, rotationAngle); + m_text.text + .emplace_back(pos, std::move(moved_text), color, bgcolor, fontFormatFlag, rotationAngle); } InfomarksMeshes InfomarksBatch::getMeshes() @@ -222,7 +223,7 @@ void InfomarksMeshes::render() void MapCanvas::drawInfomark(InfomarksBatch &batch, const InfomarkHandle &marker, const int currentLayer, - const glm::vec2 &offset, + const glm::vec2 offset, const std::optional &overrideColor) { if (!marker.exists()) { @@ -230,7 +231,7 @@ void MapCanvas::drawInfomark(InfomarksBatch &batch, return; } - const Coordinate &pos1 = marker.getPosition1(); + const Coordinate pos1 = marker.getPosition1(); const int layer = pos1.z; if (layer != currentLayer) { // REVISIT: consider storing infomarks by level @@ -238,7 +239,7 @@ void MapCanvas::drawInfomark(InfomarksBatch &batch, return; } - const Coordinate &pos2 = marker.getPosition2(); + const Coordinate pos2 = marker.getPosition2(); const float x1 = static_cast(pos1.x) / INFOMARK_SCALE + offset.x; const float y1 = static_cast(pos1.y) / INFOMARK_SCALE + offset.y; const float x2 = static_cast(pos2.x) / INFOMARK_SCALE + offset.x; @@ -337,7 +338,7 @@ void MapCanvas::paintSelectedInfomarks() // draw selection points if (m_canvasMouseMode == CanvasMouseModeEnum::SELECT_INFOMARKS) { - const auto drawPoint = [&batch](const Coordinate &c, const Color color) { + const auto drawPoint = [&batch](const Coordinate c, const Color color) { batch.setColor(color); batch.setOffset(glm::vec3{0}); const glm::vec3 point{static_cast(c.to_vec3()) @@ -364,7 +365,7 @@ void MapCanvas::paintSelectedInfomarks() return; } - const Coordinate &pos2 = marker.getPosition2(); + const Coordinate pos2 = marker.getPosition2(); assert(pos2.z == currentLayer); drawPoint(pos2, color); }; diff --git a/src/display/Infomarks.h b/src/display/Infomarks.h index 25af68282..eb01d50dc 100644 --- a/src/display/Infomarks.h +++ b/src/display/Infomarks.h @@ -60,18 +60,18 @@ struct NODISCARD InfomarksBatch final {} void setColor(const Color color) { m_color = color; } - void setOffset(const glm::vec3 &offset) { m_offset = offset; } - void drawPoint(const glm::vec3 &a); - void drawLine(const glm::vec3 &a, const glm::vec3 &b); - void drawLineStrip(const glm::vec3 &a, const glm::vec3 &b, const glm::vec3 &c) + void setOffset(const glm::vec3 offset) { m_offset = offset; } + void drawPoint(glm::vec3 a); + void drawLine(glm::vec3 a, glm::vec3 b); + void drawLineStrip(const glm::vec3 a, const glm::vec3 b, const glm::vec3 c) { drawLine(a, b); drawLine(b, c); } - void drawTriangle(const glm::vec3 &a, const glm::vec3 &b, const glm::vec3 &c); - void renderText(const glm::vec3 &pos, - const std::string &text, - const Color color, + void drawTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c); + void renderText(glm::vec3 pos, + std::string moved_text, + Color color, std::optional bgcolor, FontFormatFlags fontFormatFlag, int rotationAngle); diff --git a/src/display/MapCanvasData.cpp b/src/display/MapCanvasData.cpp index c68400d85..3816c8645 100644 --- a/src/display/MapCanvasData.cpp +++ b/src/display/MapCanvasData.cpp @@ -55,7 +55,7 @@ const glm::mat4 &MapCanvasViewport::getViewProj() const } // world space to screen space (logical pixels) -std::optional MapCanvasViewport::project(const glm::vec3 &v) const +std::optional MapCanvasViewport::project(const glm::vec3 v) const { const auto tmp = getViewProj() * glm::vec4(v, 1.f); @@ -84,12 +84,12 @@ std::optional MapCanvasViewport::project(const glm::vec3 &v) const // and a depth value in the range 0..1. // // output: world coordinates. -glm::vec3 MapCanvasViewport::unproject_raw(const glm::vec3 &mouse_depth) const +glm::vec3 MapCanvasViewport::unproject_raw(const glm::vec3 mouse_depth) const { return unproject_raw(mouse_depth, getViewProj()); } -glm::vec3 MapCanvasViewport::unproject_raw(const glm::vec3 &mouse_depth, +glm::vec3 MapCanvasViewport::unproject_raw(const glm::vec3 mouse_depth, const glm::mat4 &viewProj) const { const float depth = mouse_depth.z; @@ -112,12 +112,12 @@ glm::vec3 MapCanvasViewport::unproject_raw(const glm::vec3 &mouse_depth, // Returns a value on the current layer; // note: the returned coordinate may not be visible, // because it could be -glm::vec3 MapCanvasViewport::unproject_clamped(const glm::vec2 &mouse) const +glm::vec3 MapCanvasViewport::unproject_clamped(const glm::vec2 mouse) const { return unproject_clamped(mouse, getViewProj()); } -glm::vec3 MapCanvasViewport::unproject_clamped(const glm::vec2 &mouse, +glm::vec3 MapCanvasViewport::unproject_clamped(const glm::vec2 mouse, const glm::mat4 &viewProj) const { const auto flayer = static_cast(m_currentLayer); @@ -175,7 +175,7 @@ std::optional MapCanvasViewport::unproject(const QInputEvent *const e return unproject(*xy); } -std::optional MapCanvasViewport::unproject(const glm::vec2 &xy) const +std::optional MapCanvasViewport::unproject(const glm::vec2 xy) const { // We don't actually know the depth we're trying to unproject; // technically we're solving for a ray, so we should unproject @@ -204,13 +204,13 @@ std::optional MapCanvasViewport::getUnprojectedMouseSel(const QInputEv return getUnprojectedMouseSel(*xy); } -std::optional MapCanvasViewport::getUnprojectedMouseSel(const glm::vec2 &xy) const +std::optional MapCanvasViewport::getUnprojectedMouseSel(const glm::vec2 xy) const { const auto opt_v = unproject(xy); if (!opt_v.has_value()) { return std::nullopt; } - const glm::vec3 &v = opt_v.value(); + const glm::vec3 v = opt_v.value(); return MouseSel{Coordinate2f{v.x, v.y}, getCurrentLayer()}; } @@ -226,7 +226,7 @@ glm::vec3 MapScreen::getCenter() const return m_viewport.unproject_clamped(glm::vec2{vp.offset} + glm::vec2{vp.size} * 0.5f); } -bool MapScreen::isRoomVisible(const Coordinate &c, const float marginPixels) const +bool MapScreen::isRoomVisible(const Coordinate c, const float marginPixels) const { const auto pos = c.to_vec3(); for (int i = 0; i < 4; ++i) { @@ -247,7 +247,7 @@ bool MapScreen::isRoomVisible(const Coordinate &c, const float marginPixels) con } // Purposely ignores the possibility of glClipPlane() and glDepthRange(). -MapScreen::VisiblityResultEnum MapScreen::testVisibility(const glm::vec3 &input_pos, +MapScreen::VisiblityResultEnum MapScreen::testVisibility(const glm::vec3 input_pos, const float marginPixels) const { assert(marginPixels >= 1.f); @@ -292,7 +292,7 @@ MapScreen::VisiblityResultEnum MapScreen::testVisibility(const glm::vec3 &input_ } } -glm::vec3 MapScreen::getProxyLocation(const glm::vec3 &input_pos, const float marginPixels) const +glm::vec3 MapScreen::getProxyLocation(const glm::vec3 input_pos, const float marginPixels) const { const auto center = this->getCenter(); diff --git a/src/display/MapCanvasData.h b/src/display/MapCanvasData.h index 43cd2adcb..f77ae5cd8 100644 --- a/src/display/MapCanvasData.h +++ b/src/display/MapCanvasData.h @@ -73,7 +73,7 @@ struct NODISCARD ScaleFactor final void reset() { *this = ScaleFactor(); } public: - ScaleFactor &operator*=(const float ratio) + ALLOW_DISCARD ScaleFactor &operator*=(const float ratio) { assert(std::isfinite(ratio) && ratio > 0.f); set(m_scaleFactor * ratio); @@ -131,8 +131,8 @@ struct NODISCARD MapCanvasViewport NODISCARD auto height() const { return m_window.height(); } public: - NODISCARD const glm::vec2 &getScroll() const { return m_scroll; } - void setScroll(const glm::vec2 &scroll) + NODISCARD glm::vec2 getScroll() const { return m_scroll; } + void setScroll(const glm::vec2 scroll) { if (m_scroll != scroll) { m_scroll = scroll; @@ -181,15 +181,15 @@ struct NODISCARD MapCanvasViewport NODISCARD float getTotalScaleFactor() const { return m_scaleFactor.getTotal(); } public: - NODISCARD std::optional project(const glm::vec3 &) const; - NODISCARD glm::vec3 unproject_raw(const glm::vec3 &) const; - NODISCARD glm::vec3 unproject_raw(const glm::vec3 &, const glm::mat4 &) const; - NODISCARD glm::vec3 unproject_clamped(const glm::vec2 &) const; - NODISCARD glm::vec3 unproject_clamped(const glm::vec2 &, const glm::mat4 &) const; + NODISCARD std::optional project(glm::vec3) const; + NODISCARD glm::vec3 unproject_raw(glm::vec3) const; + NODISCARD glm::vec3 unproject_raw(glm::vec3, const glm::mat4 &) const; + NODISCARD glm::vec3 unproject_clamped(glm::vec2) const; + NODISCARD glm::vec3 unproject_clamped(glm::vec2, const glm::mat4 &) const; NODISCARD std::optional unproject(const QInputEvent *event) const; - NODISCARD std::optional unproject(const glm::vec2 &xy) const; + NODISCARD std::optional unproject(glm::vec2 xy) const; NODISCARD std::optional getUnprojectedMouseSel(const QInputEvent *event) const; - NODISCARD std::optional getUnprojectedMouseSel(const glm::vec2 &xy) const; + NODISCARD std::optional getUnprojectedMouseSel(glm::vec2 xy) const; NODISCARD std::optional getMouseCoords(const QInputEvent *event) const; }; @@ -214,12 +214,12 @@ class NODISCARD MapScreen final public: NODISCARD glm::vec3 getCenter() const; - NODISCARD bool isRoomVisible(const Coordinate &c, float margin) const; - NODISCARD glm::vec3 getProxyLocation(const glm::vec3 &pos, float margin) const; + NODISCARD bool isRoomVisible(Coordinate c, float margin) const; + NODISCARD glm::vec3 getProxyLocation(glm::vec3 pos, float margin) const; NODISCARD const MapCanvasViewport &getViewport() const { return m_viewport; } private: - NODISCARD VisiblityResultEnum testVisibility(const glm::vec3 &input_pos, float margin) const; + NODISCARD VisiblityResultEnum testVisibility(glm::vec3 input_pos, float margin) const; }; struct NODISCARD AltDragState @@ -344,7 +344,7 @@ struct NODISCARD MapCanvasInputState { beginInteraction(AltDragState{pos, cursor}); } - void beginDrag(const glm::vec3 &worldPos, const glm::vec2 &scroll, const glm::mat4 &viewProj) + void beginDrag(const glm::vec3 worldPos, const glm::vec2 scroll, const glm::mat4 &viewProj) { beginInteraction(DragState{worldPos, scroll, viewProj}); } diff --git a/src/display/ProjectionUtils.cpp b/src/display/ProjectionUtils.cpp index 2c694022d..df04df066 100644 --- a/src/display/ProjectionUtils.cpp +++ b/src/display/ProjectionUtils.cpp @@ -14,7 +14,7 @@ namespace ProjectionUtils { -float calculatePitchDegrees(const ViewportConfig &config, float zoomScale) +float calculatePitchDegrees(const ViewportConfig &config, const float zoomScale) { if (!config.autoTilt) { return config.verticalAngleDegrees; @@ -24,8 +24,8 @@ float calculatePitchDegrees(const ViewportConfig &config, float zoomScale) } glm::mat4 calculateViewProj(const ViewportConfig &config, - const glm::vec2 &scrollPos, - const glm::ivec2 &size, + const glm::vec2 scrollPos, + const glm::ivec2 size, const float zoomScale, const int currentLayer) { @@ -104,8 +104,8 @@ glm::mat4 calculateViewProj(const ViewportConfig &config, return proj * view * scaleZ; } -glm::mat4 calculateViewProjOld(const glm::vec2 &scrollPos, - const glm::ivec2 &size, +glm::mat4 calculateViewProjOld(const glm::vec2 scrollPos, + const glm::ivec2 size, const float zoomScale, const int /*currentLayer*/) { diff --git a/src/display/ProjectionUtils.h b/src/display/ProjectionUtils.h index 6dc07e8d7..037360a7a 100644 --- a/src/display/ProjectionUtils.h +++ b/src/display/ProjectionUtils.h @@ -32,16 +32,16 @@ float calculatePitchDegrees(const ViewportConfig &config, float zoomScale); * @brief Modern 3D projection matrix calculation. */ glm::mat4 calculateViewProj(const ViewportConfig &config, - const glm::vec2 &scrollPos, - const glm::ivec2 &size, + glm::vec2 scrollPos, + glm::ivec2 size, float zoomScale, int currentLayer); /** * @brief Legacy 2D-style projection matrix calculation. */ -glm::mat4 calculateViewProjOld(const glm::vec2 &scrollPos, - const glm::ivec2 &size, +glm::mat4 calculateViewProjOld(glm::vec2 scrollPos, + glm::ivec2 size, float zoomScale, int currentLayer); diff --git a/src/display/RoomSelections.cpp b/src/display/RoomSelections.cpp index bdd0a0e63..f40b97e9b 100644 --- a/src/display/RoomSelections.cpp +++ b/src/display/RoomSelections.cpp @@ -117,7 +117,7 @@ class NODISCARD RoomSelFakeGL final void MapCanvas::paintSelectedRoom(RoomSelFakeGL &gl, const RawRoom &room) { - const Coordinate &roomPos = room.getPosition(); + const Coordinate roomPos = room.getPosition(); const int x = roomPos.x; const int y = roomPos.y; const int z = roomPos.z; diff --git a/src/display/mapcanvas.cpp b/src/display/mapcanvas.cpp index 3d3ac36ad..e1b4ca3f5 100644 --- a/src/display/mapcanvas.cpp +++ b/src/display/mapcanvas.cpp @@ -394,7 +394,7 @@ std::shared_ptr MapCanvas::getInfomarkSelection(const MouseSe glm::vec3 maxCoord = center; glm::vec3 minCoord = center; - const auto probe = [this, &clickPoint, &maxCoord, &minCoord](const glm::vec2 &offset) -> void { + const auto probe = [this, &clickPoint, &maxCoord, &minCoord](const glm::vec2 offset) -> void { const auto coord = unproject_clamped(clickPoint + offset); maxCoord = glm::max(maxCoord, coord); minCoord = glm::min(minCoord, coord); @@ -411,7 +411,7 @@ std::shared_ptr MapCanvas::getInfomarkSelection(const MouseSe } } - const auto getScaled = [this](const glm::vec3 &c) -> Coordinate { + const auto getScaled = [this](const glm::vec3 c) -> Coordinate { const auto pos = glm::ivec3(glm::vec2(c) * static_cast(INFOMARK_SCALE), getCurrentLayer()); return Coordinate{pos.x, pos.y, pos.z}; @@ -749,7 +749,7 @@ void MapCanvas::mouseMoveEvent(QMouseEvent *const event) if (hasLeftButton) { if (auto *const move = getInteraction(); move && hasSel1() && hasSel2()) { auto &map = this->m_data; - auto isMovable = [&map](RoomSelection &sel, const Coordinate &offset) -> bool { + auto isMovable = [&map](RoomSelection &sel, const Coordinate offset) -> bool { sel.removeMissing(map); return map.getCurrentMap().wouldAllowRelativeMove(sel.getRoomIds(), offset); }; @@ -849,7 +849,7 @@ void MapCanvas::mouseReleaseEvent(QMouseEvent *const event) auto tmpSel = InfomarkSelection::alloc(m_data, c1, c2); if (tmpSel && tmpSel->size() == 1) { const InfomarkHandle &firstMark = tmpSel->front(); - const Coordinate &pos = firstMark.getPosition1(); + const Coordinate pos = firstMark.getPosition1(); QString ctemp = QString("Selected Info Mark: [%1] (at %2,%3,%4)") .arg(firstMark.getText().toQString()) .arg(pos.x) @@ -925,8 +925,8 @@ void MapCanvas::mouseReleaseEvent(QMouseEvent *const event) } } else if (hasSel1() && hasSel2()) { - const Coordinate &c1 = getSel1().getCoordinate(); - const Coordinate &c2 = getSel2().getCoordinate(); + const Coordinate c1 = getSel1().getCoordinate(); + const Coordinate c2 = getSel2().getCoordinate(); if (m_roomSelection == nullptr) { // add rooms to default selections m_roomSelection = RoomSelection::createSelection(m_data.findAllRooms(c1, c2)); @@ -1047,7 +1047,7 @@ void MapCanvas::stopMoving() endInteraction(); } -void MapCanvas::zoomAt(const float factor, const glm::vec2 &mousePos) +void MapCanvas::zoomAt(const float factor, const glm::vec2 mousePos) { const auto optWorldPos = unproject(mousePos); if (!optWorldPos) { @@ -1087,7 +1087,7 @@ void MapCanvas::zoomAt(const float factor, const glm::vec2 &mousePos) m_frameManager.requestUpdate(); } -void MapCanvas::slot_setScroll(const glm::vec2 &worldPos) +void MapCanvas::slot_setScroll(const glm::vec2 worldPos) { if (!utils::isSameFloat(getScroll().x, worldPos.x) || !utils::isSameFloat(getScroll().y, worldPos.y)) { @@ -1145,7 +1145,7 @@ void MapCanvas::slot_zoomReset() void MapCanvas::onMovement() { - const Coordinate &pos = m_data.tryGetPosition().value_or(Coordinate{}); + const Coordinate pos = m_data.tryGetPosition().value_or(Coordinate{}); setCurrentLayer(pos.z); getOpenGL().getUboManager().invalidate(Legacy::SharedVboEnum::CameraBlock); const glm::vec2 newScroll = pos.to_vec2() + glm::vec2{0.5f, 0.5f}; diff --git a/src/display/mapcanvas.h b/src/display/mapcanvas.h index 996932b00..a19f06c29 100644 --- a/src/display/mapcanvas.h +++ b/src/display/mapcanvas.h @@ -220,14 +220,14 @@ class NODISCARD_QOBJECT MapCanvas final : public QOpenGLWindow, void setMvp(const glm::mat4 &viewProj); void setViewportAndMvp(int width, int height); - void zoomAt(float factor, const glm::vec2 &mousePos); + void zoomAt(float factor, glm::vec2 mousePos); void handleZoomAtEvent(const QInputEvent *event, float deltaFactor); NODISCARD BatchedInfomarksMeshes getInfomarksMeshes(); void drawInfomark(InfomarksBatch &batch, const InfomarkHandle &marker, int currentLayer, - const glm::vec2 &offset = {}, + glm::vec2 offset = {}, const std::optional &overrideColor = std::nullopt); void updateBatches(); void finishPendingMapBatches(); @@ -269,9 +269,9 @@ class NODISCARD_QOBJECT MapCanvas final : public QOpenGLWindow, void log(const QString &msg) { emit sig_log("MapCanvas", msg); } signals: - void sig_onCenter(const glm::vec2 &worldCoord); + void sig_onCenter(glm::vec2 worldCoord); void sig_mapMove(int dx, int dy); - void sig_setScrollBars(const Coordinate &min, const Coordinate &max); + void sig_setScrollBars(Coordinate min, Coordinate max); void sig_continuousScroll(int, int); void sig_log(const QString &, const QString &); @@ -294,8 +294,8 @@ public slots: void slot_setCanvasMouseMode(CanvasMouseModeEnum mode); - void slot_setScroll(const glm::vec2 &worldPos); - // void setScroll(const glm::ivec2 &) = delete; // moc tries to call the wrong one if you define this + void slot_setScroll(const glm::vec2 worldPos); + // void setScroll(const glm::ivec2 ) = delete; // moc tries to call the wrong one if you define this void slot_setHorizontalScroll(float worldX); void slot_setVerticalScroll(float worldY); diff --git a/src/display/mapwindow.cpp b/src/display/mapwindow.cpp index 5e01eb4e5..30408d637 100644 --- a/src/display/mapwindow.cpp +++ b/src/display/mapwindow.cpp @@ -277,7 +277,7 @@ void MapWindow::slot_graphicsSettingsChanged() deref(m_canvas).graphicsSettingsChanged(); } -void MapWindow::slot_centerOnWorldPos(const glm::vec2 &worldPos) +void MapWindow::slot_centerOnWorldPos(const glm::vec2 worldPos) { auto &horz = deref(m_horizontalScrollBar); auto &vert = deref(m_verticalScrollBar); @@ -291,7 +291,7 @@ void MapWindow::slot_centerOnWorldPos(const glm::vec2 &worldPos) emit sig_setScroll(worldPos); } -void MapWindow::centerOnScrollPos(const glm::ivec2 &scrollPos) +void MapWindow::centerOnScrollPos(const glm::ivec2 scrollPos) { deref(m_horizontalScrollBar).setValue(scrollPos.x); deref(m_verticalScrollBar).setValue(scrollPos.y); @@ -305,7 +305,7 @@ void MapWindow::resizeEvent(QResizeEvent * /*event*/) updateScrollBars(); } -void MapWindow::slot_setScrollBars(const Coordinate &min, const Coordinate &max) +void MapWindow::slot_setScrollBars(const Coordinate min, const Coordinate max) { m_knownMapSize.min = min.to_ivec3(); m_knownMapSize.max = max.to_ivec3(); @@ -360,7 +360,7 @@ void MapWindow::setCanvasEnabled(bool enabled) deref(m_canvasContainer).setEnabled(enabled); } -glm::vec2 MapWindow::KnownMapSize::scrollToWorld(const glm::ivec2 &scrollPos) const +glm::vec2 MapWindow::KnownMapSize::scrollToWorld(const glm::ivec2 scrollPos) const { auto worldPos = glm::vec2{scrollPos} / static_cast(MapCanvas::SCROLL_SCALE); worldPos.y = static_cast(size().y) - worldPos.y; // negate Y @@ -368,7 +368,7 @@ glm::vec2 MapWindow::KnownMapSize::scrollToWorld(const glm::ivec2 &scrollPos) co return worldPos; } -glm::ivec2 MapWindow::KnownMapSize::worldToScroll(const glm::vec2 &worldPos_in) const +glm::ivec2 MapWindow::KnownMapSize::worldToScroll(const glm::vec2 worldPos_in) const { auto worldPos = worldPos_in; worldPos -= glm::vec2{min}; diff --git a/src/display/mapwindow.h b/src/display/mapwindow.h index b11929e1c..91a255980 100644 --- a/src/display/mapwindow.h +++ b/src/display/mapwindow.h @@ -56,8 +56,8 @@ class NODISCARD_QOBJECT MapWindow final : public QWidget NODISCARD glm::ivec2 size() const { return glm::ivec2{max - min}; } - NODISCARD glm::vec2 scrollToWorld(const glm::ivec2 &scrollPos) const; - NODISCARD glm::ivec2 worldToScroll(const glm::vec2 &worldPos) const; + NODISCARD glm::vec2 scrollToWorld(glm::ivec2 scrollPos) const; + NODISCARD glm::ivec2 worldToScroll(glm::vec2 worldPos) const; } m_knownMapSize; @@ -83,15 +83,15 @@ class NODISCARD_QOBJECT MapWindow final : public QWidget void hideSplashImage(); private: - void centerOnScrollPos(const glm::ivec2 &scrollPos); + void centerOnScrollPos(glm::ivec2 scrollPos); signals: - void sig_setScroll(const glm::vec2 &worldPos); + void sig_setScroll(glm::vec2 worldPos); void sig_zoomChanged(float zoom); public slots: - void slot_setScrollBars(const Coordinate &, const Coordinate &); - void slot_centerOnWorldPos(const glm::vec2 &worldPos); + void slot_setScrollBars(Coordinate, Coordinate); + void slot_centerOnWorldPos(glm::vec2 worldPos); void slot_mapMove(int dx, int dy); void slot_continuousScroll(int dx, int dy); void slot_scrollTimerTimeout(); diff --git a/src/global/Charset.h b/src/global/Charset.h index b4060573a..245fadc68 100644 --- a/src/global/Charset.h +++ b/src/global/Charset.h @@ -604,12 +604,12 @@ class NODISCARD StringBuilder final m_units.push_back(m_unknown); } } - StringBuilder &operator+=(const char32_t codepoint) + ALLOW_DISCARD StringBuilder &operator+=(const char32_t codepoint) { append(codepoint); return *this; } - StringBuilder &operator+=(const std::u32string_view codepoints) + ALLOW_DISCARD StringBuilder &operator+=(const std::u32string_view codepoints) { for (const char32_t codepoint : codepoints) { append(codepoint); diff --git a/src/global/Color.cpp b/src/global/Color.cpp index 50e7d58af..cfb2cb820 100644 --- a/src/global/Color.cpp +++ b/src/global/Color.cpp @@ -262,9 +262,9 @@ void testColor() TEST_ASSERT(green == greeni); TEST_ASSERT(blue == bluei); - const glm::vec4 &redVec = red.getVec4(); - const glm::vec4 &greenVec = green.getVec4(); - const glm::vec4 &blueVec = blue.getVec4(); + const glm::vec4 redVec = red.getVec4(); + const glm::vec4 greenVec = green.getVec4(); + const glm::vec4 blueVec = blue.getVec4(); TEST_ASSERT(utils::equals(redVec.r, 1.f)); TEST_ASSERT(utils::equals(greenVec.g, 1.f)); diff --git a/src/global/Color.h b/src/global/Color.h index 5b74d4ee9..412893aba 100644 --- a/src/global/Color.h +++ b/src/global/Color.h @@ -38,7 +38,7 @@ struct NODISCARD Color final DEFAULT_CTORS_AND_ASSIGN_OPS(Color); public: - explicit Color(const glm::vec4 &color) + explicit Color(const glm::vec4 color) : m_color{glm::packUnorm4x8(color)} {} @@ -91,7 +91,7 @@ struct NODISCARD Color final public: // note: this is not done in linear color space. - NODISCARD static Color multiplyAsVec4(const Color a, const Color b); + NODISCARD static Color multiplyAsVec4(Color a, Color b); }; static_assert(sizeof(Color) == sizeof(uint32_t)); diff --git a/src/global/Connections.h b/src/global/Connections.h index b2f355f6d..c691f2933 100644 --- a/src/global/Connections.h +++ b/src/global/Connections.h @@ -39,7 +39,7 @@ class NODISCARD Connections final Connections &operator=(const Connections &) = delete; public: - Connections &operator+=(QMetaObject::Connection c); + ALLOW_DISCARD Connections &operator+=(QMetaObject::Connection c); void disconnectAll(); }; diff --git a/src/mainwindow/findroomsdlg.cpp b/src/mainwindow/findroomsdlg.cpp index 80ffd308a..1c70e7250 100644 --- a/src/mainwindow/findroomsdlg.cpp +++ b/src/mainwindow/findroomsdlg.cpp @@ -194,7 +194,7 @@ void FindRoomsDlg::slot_itemDoubleClicked(QTreeWidgetItem *const inputItem) // REVISIT: should this block be a stand-alone function? { assert(r.getIdExternal() == extId); - const Coordinate &c = r.getPosition(); + const Coordinate c = r.getPosition(); const auto worldPos = c.to_vec2() + glm::vec2{0.5f, 0.5f}; emit sig_center(worldPos); // connects to MapWindow } diff --git a/src/mainwindow/findroomsdlg.h b/src/mainwindow/findroomsdlg.h index 9caa76c97..732f7e144 100644 --- a/src/mainwindow/findroomsdlg.h +++ b/src/mainwindow/findroomsdlg.h @@ -57,7 +57,7 @@ class NODISCARD_QOBJECT FindRoomsDlg final : public QDialog, private Ui::FindRoo NODISCARD QString constructToolTip(const RoomHandle &); signals: - void sig_center(const glm::vec2 &worldPos); + void sig_center(glm::vec2 worldPos); void sig_newRoomSelection(const SigRoomSelection &); void sig_editSelection(); void sig_log(const QString &, const QString &); diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index af5d0f3f9..76b96d5dc 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -465,7 +465,7 @@ void MainWindow::wireConnections() connect(canvas, &MapCanvas::sig_newRoomSelection, this, &MainWindow::slot_newRoomSelection); connect(canvas, &MapCanvas::sig_selectionChanged, this, [this]() { if (m_roomSelection != nullptr && m_roomSelection->size()) { - auto anyRoomAtOffset = [this](const Coordinate &offset) -> bool { + auto anyRoomAtOffset = [this](const Coordinate offset) -> bool { const auto &sel = deref(m_roomSelection); for (const RoomId id : sel) { const Coordinate here = m_mapData->getRoomHandle(id).getPosition(); @@ -1976,7 +1976,7 @@ void MainWindow::slot_onDeleteConnectionSelection() ChangeTypeEnum::Remove, id1, dir1, id2, WaysEnum::TwoWay}}); } -bool MainWindow::slot_moveRoomSelection(const Coordinate &offset) +bool MainWindow::slot_moveRoomSelection(const Coordinate offset) { if (m_roomSelection == nullptr) { return false; @@ -2006,7 +2006,7 @@ void MainWindow::slot_onMoveDownRoomSelection() slot_onLayerDown(); } -bool MainWindow::slot_mergeRoomSelection(const Coordinate &offset) +bool MainWindow::slot_mergeRoomSelection(const Coordinate offset) { if (m_roomSelection == nullptr) { return false; diff --git a/src/mainwindow/mainwindow.h b/src/mainwindow/mainwindow.h index ea03c1ecc..0229650c0 100644 --- a/src/mainwindow/mainwindow.h +++ b/src/mainwindow/mainwindow.h @@ -430,10 +430,10 @@ public slots: void slot_onDeleteInfomarkSelection(); void slot_onDeleteRoomSelection(); void slot_onDeleteConnectionSelection(); - NODISCARD bool slot_moveRoomSelection(const Coordinate &offset); + NODISCARD bool slot_moveRoomSelection(Coordinate offset); void slot_onMoveUpRoomSelection(); void slot_onMoveDownRoomSelection(); - NODISCARD bool slot_mergeRoomSelection(const Coordinate &offset); + NODISCARD bool slot_mergeRoomSelection(Coordinate offset); void slot_onMergeUpRoomSelection(); void slot_onMergeDownRoomSelection(); void slot_onConnectToNeighboursRoomSelection(); diff --git a/src/map/ChangePrinter.cpp b/src/map/ChangePrinter.cpp index 3aa541894..090ffd7ce 100644 --- a/src/map/ChangePrinter.cpp +++ b/src/map/ChangePrinter.cpp @@ -151,7 +151,7 @@ void ChangePrinter::print(const bool val) m_os.writeWithColor(const_color, val ? "true" : "false"); } -void ChangePrinter::print(const Coordinate &coord) +void ChangePrinter::print(const Coordinate coord) { auto &os = m_os; os.writeWithColor(type_name_color, "Coordinate"); diff --git a/src/map/ChangePrinter.h b/src/map/ChangePrinter.h index f06cb0de4..f3f47effb 100644 --- a/src/map/ChangePrinter.h +++ b/src/map/ChangePrinter.h @@ -44,7 +44,7 @@ struct NODISCARD ChangePrinter final : public AbstractChangeVisitor private: void print(ServerRoomId serverId); - void print(const Coordinate &coord); + void print(Coordinate coord); private: void print(const DoorName &name); @@ -89,7 +89,7 @@ struct NODISCARD ChangePrinter final : public AbstractChangeVisitor void print(const RoomFieldVariant &var); private: - void print(const InfomarkId id); + void print(InfomarkId id); void print(InfomarkClassEnum type); void print(InfomarkTypeEnum type); void print(const InfomarkText &text); diff --git a/src/map/ChangeTypes.h b/src/map/ChangeTypes.h index 784b7fe3f..49afced6c 100644 --- a/src/map/ChangeTypes.h +++ b/src/map/ChangeTypes.h @@ -66,7 +66,7 @@ struct NODISCARD AddRoom2 final { Coordinate position; ParseEvent event; - explicit AddRoom2(const Coordinate &pos, ParseEvent ev) + explicit AddRoom2(const Coordinate pos, ParseEvent ev) : position{pos} , event{std::move(ev)} {} diff --git a/src/map/Changes.cpp b/src/map/Changes.cpp index d5f06aa66..4a5b00e9d 100644 --- a/src/map/Changes.cpp +++ b/src/map/Changes.cpp @@ -19,14 +19,14 @@ void connectToNeighbors(ChangeList &changes, }; const Map map = room.getMap(); - auto connect = [&add, &map](const RoomId from, const Coordinate &pos, const ExitDirEnum dir) { + auto connect = [&add, &map](const RoomId from, const Coordinate pos, const ExitDirEnum dir) { if (const auto optRoom = map.findRoomHandle(pos)) { add(from, dir, optRoom.getId()); } }; const RoomId from = room.getId(); - const Coordinate ¢er = room.getPosition(); + const Coordinate center = room.getPosition(); for (const ExitDirEnum dir : ALL_EXITS_NESWUD) { const Coordinate pos = center + ::exitDir(dir); connect(from, pos, dir); diff --git a/src/map/ExitDirection.cpp b/src/map/ExitDirection.cpp index b7acf7c5e..411bcd1f8 100644 --- a/src/map/ExitDirection.cpp +++ b/src/map/ExitDirection.cpp @@ -187,13 +187,13 @@ NODISCARD static ExitCoordinates initExitCoordinates() return exitDirs; } -const Coordinate &exitDir(const ExitDirEnum dir) +Coordinate exitDir(const ExitDirEnum dir) { static const auto exitDirs = initExitCoordinates(); return exitDirs[dir]; } -const std::string_view to_string_view(const ExitDirEnum dir) +std::string_view to_string_view(const ExitDirEnum dir) { return lowercaseDirection(dir); } diff --git a/src/map/ExitDirection.h b/src/map/ExitDirection.h index 7acf2e829..202340b5a 100644 --- a/src/map/ExitDirection.h +++ b/src/map/ExitDirection.h @@ -60,5 +60,5 @@ NODISCARD ExitDirEnum dirForChar(QChar dir); NODISCARD char charForDir(ExitDirEnum dir); } // namespace Mmapper2Exit -NODISCARD extern const Coordinate &exitDir(ExitDirEnum dir); -NODISCARD extern const std::string_view to_string_view(ExitDirEnum dir); +NODISCARD extern Coordinate exitDir(ExitDirEnum dir); +NODISCARD extern std::string_view to_string_view(ExitDirEnum dir); diff --git a/src/map/Map.cpp b/src/map/Map.cpp index 4d445d298..abb80b9e0 100644 --- a/src/map/Map.cpp +++ b/src/map/Map.cpp @@ -123,7 +123,7 @@ RoomHandle Map::findRoomHandle(const ServerRoomId serverId) const return RoomHandle{}; } -RoomHandle Map::findRoomHandle(const Coordinate &coord) const +RoomHandle Map::findRoomHandle(const Coordinate coord) const { if (auto optRoom = getWorld().findRoom(coord)) { return getRoomHandle(*optRoom); @@ -508,7 +508,7 @@ void Map::diff(ProgressCounter &pc, AnsiOstream &os, const Map &a, const Map &b) to.insert(from.begin(), from.end()); } - Sets &operator+=(const Sets &other) + ALLOW_DISCARD Sets &operator+=(const Sets &other) { add_all(removedSet, other.removedSet); add_all(addedSet, other.addedSet); @@ -686,7 +686,7 @@ void Map::diff(ProgressCounter &pc, AnsiOstream &os, const Map &a, const Map &b) } } -static void print_coordinate(AnsiOstream &os, const RawAnsi &ansi, const Coordinate &where) +static void print_coordinate(AnsiOstream &os, const RawAnsi &ansi, const Coordinate where) { os << "("; os.writeWithColor(ansi, where.x); @@ -1099,7 +1099,7 @@ Map Map::merge(ProgressCounter &pc, const Map ¤tMap, std::vector newRooms, std::vector newMarks, - const Coordinate &mapOffset) + const Coordinate mapOffset) { if (newRooms.empty()) { throw std::runtime_error("no rooms to merge"); @@ -1248,7 +1248,7 @@ void Map::foreachChangedRoom(ProgressCounter &pc, }); } -NODISCARD bool Map::wouldAllowRelativeMove(const RoomIdSet &set, const Coordinate &offset) const +NODISCARD bool Map::wouldAllowRelativeMove(const RoomIdSet &set, const Coordinate offset) const { return getWorld().wouldAllowRelativeMove(set, offset); } diff --git a/src/map/Map.h b/src/map/Map.h index 85631206d..d5a98e2a0 100644 --- a/src/map/Map.h +++ b/src/map/Map.h @@ -70,7 +70,7 @@ class NODISCARD Map final NODISCARD RoomHandle findRoomHandle(RoomId id) const; NODISCARD RoomHandle findRoomHandle(ExternalRoomId id) const; NODISCARD RoomHandle findRoomHandle(ServerRoomId id) const; - NODISCARD RoomHandle findRoomHandle(const Coordinate &coord) const; + NODISCARD RoomHandle findRoomHandle(Coordinate coord) const; public: // Semantics: "getRoomHandle()" functions throw if the handle is invalid; @@ -142,7 +142,7 @@ class NODISCARD Map final const Map ¤tMap, std::vector newRooms, std::vector newMarks, - const Coordinate &mapOffset); + Coordinate mapOffset); static void foreachChangedRoom(ProgressCounter &pc, const Map &saved, @@ -150,7 +150,7 @@ class NODISCARD Map final const std::function &callback); public: - NODISCARD bool wouldAllowRelativeMove(const RoomIdSet &set, const Coordinate &offset) const; + NODISCARD bool wouldAllowRelativeMove(const RoomIdSet &set, Coordinate offset) const; public: void printChange(AnsiOstream &aos, const Change &change) const; @@ -189,7 +189,7 @@ struct NODISCARD BasicDiffStats final size_t numRoomsAdded = 0; size_t numRoomsChanged = 0; - BasicDiffStats &operator+=(const BasicDiffStats &other) + ALLOW_DISCARD BasicDiffStats &operator+=(const BasicDiffStats &other) { numRoomsRemoved += other.numRoomsRemoved; numRoomsAdded += other.numRoomsAdded; diff --git a/src/map/RawRoom.h b/src/map/RawRoom.h index dd59627b7..4c03f79e5 100644 --- a/src/map/RawRoom.h +++ b/src/map/RawRoom.h @@ -19,7 +19,7 @@ struct NODISCARD TaggedRawRoom final : public RoomFieldsGetters; using IdType = typename ExitType::IdType; using Exits = EnumIndexedArray; - static constexpr const IdType INVALID_ID{INVALID_ROOMID.value()}; + static constexpr IdType INVALID_ID{INVALID_ROOMID.value()}; public: RoomFields fields; @@ -38,8 +38,8 @@ struct NODISCARD TaggedRawRoom final : public RoomFieldsGettersserver_id = newId; } public: - NODISCARD const Coordinate &getPosition() const { return position; } - void setPosition(const Coordinate &c) { this->position = c; } + NODISCARD Coordinate getPosition() const { return position; } + void setPosition(const Coordinate c) { this->position = c; } public: NODISCARD RoomFields &getRoomFields() { return fields; } diff --git a/src/map/RawRooms.h b/src/map/RawRooms.h index cf201faea..266ad4304 100644 --- a/src/map/RawRooms.h +++ b/src/map/RawRooms.h @@ -167,18 +167,15 @@ class NODISCARD RawRooms final } public: - void setPosition(const RoomId id, const Coordinate &coord) + void setPosition(const RoomId id, const Coordinate coord) { updateRawRoomRef(id, [&coord](auto &r) { r.position = coord; }); } - NODISCARD const Coordinate &getPosition(const RoomId id) const - { - return getRawRoomRef(id).position; - } + NODISCARD Coordinate getPosition(const RoomId id) const { return getRawRoomRef(id).position; } public: NODISCARD RoomStatusEnum getStatus(const RoomId id) const { return getRawRoomRef(id).status; } - void setStatus(const RoomId id, RoomStatusEnum status) + void setStatus(const RoomId id, const RoomStatusEnum status) { if (status != getStatus(id)) { updateRawRoomRef(id, [status](auto &r) { r.status = status; }); diff --git a/src/map/RoomHandle.cpp b/src/map/RoomHandle.cpp index b15c873ed..e3f4df044 100644 --- a/src/map/RoomHandle.cpp +++ b/src/map/RoomHandle.cpp @@ -41,7 +41,7 @@ ServerRoomId RoomHandle::getServerId() const return deref(m_room).getServerId(); } -const Coordinate &RoomHandle::getPosition() const +Coordinate RoomHandle::getPosition() const { return deref(m_room).getPosition(); } diff --git a/src/map/RoomHandle.h b/src/map/RoomHandle.h index 95ee520a0..3aaa4613a 100644 --- a/src/map/RoomHandle.h +++ b/src/map/RoomHandle.h @@ -61,7 +61,7 @@ class NODISCARD RoomHandle final : public RoomExitFieldsGetters public: NODISCARD ServerRoomId getServerId() const; - NODISCARD const Coordinate &getPosition() const; + NODISCARD Coordinate getPosition() const; NODISCARD bool isTemporary() const; public: diff --git a/src/map/SpatialDb.cpp b/src/map/SpatialDb.cpp index 0fe13e704..fa7b11646 100644 --- a/src/map/SpatialDb.cpp +++ b/src/map/SpatialDb.cpp @@ -5,19 +5,19 @@ #include "../global/AnsiOstream.h" #include "../global/progresscounter.h" -NODISCARD static bool mightBeOnBoundary(const Coordinate &coord, const Bounds &bounds) +NODISCARD static bool mightBeOnBoundary(const Coordinate coord, const Bounds &bounds) { #define CHECK(_axis) ((bounds.min._axis) == (coord._axis) || (bounds.max._axis) == (coord._axis)) return CHECK(x) || CHECK(y) || CHECK(z); #undef CHECK } -const RoomId *SpatialDb::findUnique(const Coordinate &key) const +const RoomId *SpatialDb::findUnique(const Coordinate key) const { return m_unique.find(key); } -void SpatialDb::remove(const RoomId /*id*/, const Coordinate &coord) +void SpatialDb::remove(const RoomId /*id*/, const Coordinate coord) { m_unique.erase(coord); @@ -26,7 +26,7 @@ void SpatialDb::remove(const RoomId /*id*/, const Coordinate &coord) } } -void SpatialDb::add(const RoomId id, const Coordinate &coord) +void SpatialDb::add(const RoomId id, const Coordinate coord) { if (!m_bounds) { m_bounds.emplace(coord, coord); @@ -36,7 +36,7 @@ void SpatialDb::add(const RoomId id, const Coordinate &coord) m_unique.set(coord, id); } -void SpatialDb::move(const RoomId id, const Coordinate &from, const Coordinate &to) +void SpatialDb::move(const RoomId id, const Coordinate from, const Coordinate to) { if (from == to) { return; @@ -67,8 +67,8 @@ void SpatialDb::printStats(ProgressCounter & /*pc*/, AnsiOstream &os) const { if (m_bounds.has_value()) { const auto &bounds = m_bounds.value(); - const Coordinate &max = bounds.max; - const Coordinate &min = bounds.min; + const Coordinate max = bounds.max; + const Coordinate min = bounds.min; static constexpr auto green = getRawAnsi(AnsiColor16Enum::green); diff --git a/src/map/SpatialDb.h b/src/map/SpatialDb.h index 9a4d5675e..34dffe045 100644 --- a/src/map/SpatialDb.h +++ b/src/map/SpatialDb.h @@ -30,21 +30,21 @@ struct NODISCARD SpatialDb final NODISCARD const std::optional &getBounds() const { return m_bounds; } public: - NODISCARD const RoomId *findUnique(const Coordinate &key) const; + NODISCARD const RoomId *findUnique(Coordinate key) const; public: - void remove(RoomId id, const Coordinate &coord); - void add(RoomId id, const Coordinate &coord); - void move(RoomId id, const Coordinate &from, const Coordinate &to); + void remove(RoomId id, Coordinate coord); + void add(RoomId id, Coordinate coord); + void move(RoomId id, Coordinate from, Coordinate to); void updateBounds(ProgressCounter &pc); void printStats(ProgressCounter &pc, AnsiOstream &os) const; public: - // Callback = void(const Coordinate&, RoomId); + // Callback = void(const Coordinate , RoomId); template void for_each(Callback &&callback) const { - static_assert(std::is_invocable_r_v); + static_assert(std::is_invocable_r_v); m_unique.for_each([&callback](const auto &p) { callback(p.first, p.second); }); } NODISCARD auto size() const { return m_unique.size(); } diff --git a/src/map/World.cpp b/src/map/World.cpp index 1dbd1d6b3..e37351078 100644 --- a/src/map/World.cpp +++ b/src/map/World.cpp @@ -216,7 +216,7 @@ void World::requireValidRoom(const RoomId id) const } } -std::optional World::findRoom(const Coordinate &coord) const +std::optional World::findRoom(const Coordinate coord) const { if (const RoomId *const id = m_spatialDb.findUnique(coord)) { return *id; @@ -235,7 +235,7 @@ std::optional World::lookup(const ServerRoomId id) const return m_serverIds.lookup(id); } -const Coordinate &World::getPosition(const RoomId id) const +const Coordinate World::getPosition(const RoomId id) const { requireValidRoom(id); return m_rooms.getPosition(id); @@ -592,7 +592,7 @@ void World::checkConsistency(ProgressCounter &counter) const DECL_TIMER(t, __FUNCTION__); auto checkPosition = [this](const RoomId id) { - const Coordinate &coord = getPosition(id); + const Coordinate coord = getPosition(id); // Is there a unique owner of the coord? if (const RoomId *const maybe = m_spatialDb.findUnique(coord); maybe == nullptr || *maybe != id) { @@ -713,7 +713,7 @@ void World::checkConsistency(ProgressCounter &counter) const } counter.setNewTask(ProgressMsg{"checking map coordinates"}, m_spatialDb.size()); - m_spatialDb.for_each([this, &counter](const Coordinate &coord, const RoomId id) { + m_spatialDb.for_each([this, &counter](const Coordinate coord, const RoomId id) { if (this->getPosition(id) != coord) { throw MapConsistencyError("room position was not the expected coord"); } @@ -740,7 +740,7 @@ void World::checkConsistency(ProgressCounter &counter) const std::optional computedBounds; counter.setNewTask(ProgressMsg{"checking map coordinates"}, getRoomSet().size()); getRoomSet().for_each([this, &computedBounds, &counter](const RoomId id) { - const Coordinate &coord = getPosition(id); + const Coordinate coord = getPosition(id); if (!computedBounds) { computedBounds.emplace(coord, coord); } else { @@ -838,7 +838,7 @@ void World::setServerId(const RoomId id, const ServerRoomId serverId) m_serverIds.set(serverId, id); } -void World::setPosition(const RoomId id, const Coordinate &coord) +void World::setPosition(const RoomId id, const Coordinate coord) { requireValidRoom(id); @@ -846,12 +846,12 @@ void World::setPosition(const RoomId id, const Coordinate &coord) return; } - const Coordinate &ref = m_rooms.getPosition(id); + const Coordinate ref = m_rooms.getPosition(id); m_spatialDb.move(id, ref, coord); m_rooms.setPosition(id, coord); } -bool World::wouldAllowRelativeMove(const RoomIdSet &rooms, const Coordinate &offset) const +bool World::wouldAllowRelativeMove(const RoomIdSet &rooms, const Coordinate offset) const { if (rooms.empty()) { return false; @@ -871,12 +871,12 @@ bool World::wouldAllowRelativeMove(const RoomIdSet &rooms, const Coordinate &off return true; } -void World::moveRelative(const RoomId id, const Coordinate &offset) +void World::moveRelative(const RoomId id, const Coordinate offset) { setPosition(id, getPosition(id) + offset); } -void World::moveRelative(const RoomIdSet &rooms, const Coordinate &offset) +void World::moveRelative(const RoomIdSet &rooms, const Coordinate offset) { if (rooms.empty()) { throw std::runtime_error("no rooms specified"); @@ -1064,7 +1064,7 @@ void World::copy_exits(const RoomId targetId, const RawRoom &source) } } -void World::mergeRelative(const RoomId id, const Coordinate &offset) +void World::mergeRelative(const RoomId id, const Coordinate offset) { if (offset.isNull()) { return; @@ -1323,7 +1323,7 @@ const ImmUnorderedRoomIdSet *World::findAreaRoomSet(const RoomArea &area) const return nullptr; } -RoomId World::addRoom(const Coordinate &position) +RoomId World::addRoom(const Coordinate position) { if (findRoom(position)) { throw InvalidMapOperation("Position in use"); @@ -1406,10 +1406,10 @@ void World::undeleteRoom(const ExternalRoomId extid, const RawRoom &raw) MMLOG() << "Added new room " << ext.value() << "."; } -void World::addRoom2(const Coordinate &desiredPosition, const ParseEvent &event) +void World::addRoom2(const Coordinate desiredPosition, const ParseEvent &event) { const auto position = std::invoke([this, desiredPosition]() -> Coordinate { - return ::getNearestFree(desiredPosition, [this](const Coordinate &check) -> FindCoordEnum { + return ::getNearestFree(desiredPosition, [this](const Coordinate check) -> FindCoordEnum { return findRoom(check).has_value() ? FindCoordEnum::InUse : FindCoordEnum::Available; }); }); @@ -1889,13 +1889,13 @@ void World::apply(ProgressCounter & /*pc*/, const room_change_types::ModifyRoomF void World::apply(ProgressCounter & /*pc*/, const room_change_types::TryMoveCloseTo &change) { const RoomId id = change.room; - const Coordinate ¤t = m_rooms.getPosition(id); - const Coordinate &desired = change.desiredPosition; + const Coordinate current = m_rooms.getPosition(id); + const Coordinate desired = change.desiredPosition; if (current == desired) { return; } - auto check = [this, z = desired.z](const Coordinate &suggested) -> FindCoordEnum { + auto check = [this, z = desired.z](const Coordinate suggested) -> FindCoordEnum { if (suggested.z == z && !findRoom(suggested)) { return FindCoordEnum::Available; } else { diff --git a/src/map/World.h b/src/map/World.h index 3146997da..d58974f3c 100644 --- a/src/map/World.h +++ b/src/map/World.h @@ -69,7 +69,6 @@ class NODISCARD World final NODISCARD bool operator!=(const World &rhs) const { return !(rhs == *this); } public: - NODISCARD const AreaInfo *findArea(const RoomArea &area) const; NODISCARD const AreaInfo &getArea(const RoomArea &area) const; public: @@ -100,8 +99,8 @@ class NODISCARD World final void requireValidRoom(RoomId id) const; public: - NODISCARD std::optional findRoom(const Coordinate &coord) const; - NODISCARD const Coordinate &getPosition(RoomId id) const; + NODISCARD std::optional findRoom(Coordinate coord) const; + NODISCARD const Coordinate getPosition(RoomId id) const; public: NODISCARD ServerRoomId getServerId(RoomId id) const; @@ -229,9 +228,9 @@ class NODISCARD World final void nukeAllExits(RoomId id, WaysEnum ways); private: - void moveRelative(RoomId id, const Coordinate &offset); - void moveRelative(const RoomIdSet &rooms, const Coordinate &offset); - void setPosition(RoomId id, const Coordinate &coord); + void moveRelative(RoomId id, Coordinate offset); + void moveRelative(const RoomIdSet &rooms, Coordinate offset); + void setPosition(RoomId id, Coordinate coord); void setServerId(RoomId id, ServerRoomId serverId); private: @@ -266,7 +265,7 @@ class NODISCARD World final void copy_exits(RoomId targetId, const RawRoom &source); private: - void mergeRelative(RoomId id, const Coordinate &offset); + void mergeRelative(RoomId id, Coordinate offset); private: void setRemapAndAllocateRooms(Remapping new_remap); @@ -275,8 +274,8 @@ class NODISCARD World final void initRoom(const RawRoom &input); private: - NODISCARD RoomId addRoom(const Coordinate &position); - void addRoom2(const Coordinate &desiredPosition, const ParseEvent &event); + NODISCARD RoomId addRoom(Coordinate position); + void addRoom2(Coordinate desiredPosition, const ParseEvent &event); void undeleteRoom(ExternalRoomId id, const RawRoom &raw); private: @@ -297,7 +296,7 @@ class NODISCARD World final NODISCARD bool containsRoomsNotIn(const World &other) const; public: - NODISCARD bool wouldAllowRelativeMove(const RoomIdSet &set, const Coordinate &offset) const; + NODISCARD bool wouldAllowRelativeMove(const RoomIdSet &set, Coordinate offset) const; public: void printChange(AnsiOstream &aos, const Change &change) const; diff --git a/src/map/WorldBuilder.cpp b/src/map/WorldBuilder.cpp index fdf75c445..bd9cfd5cf 100644 --- a/src/map/WorldBuilder.cpp +++ b/src/map/WorldBuilder.cpp @@ -116,7 +116,7 @@ SanitizerChanges WorldBuilder::sanitize(ProgressCounter &counter, struct NODISCARD CoordSet final : public std::unordered_set { - NODISCARD bool contains(const Coordinate &c) const { return find(c) != end(); } + NODISCARD bool contains(const Coordinate c) const { return find(c) != end(); } }; auto hasUniqueCoords = [&input]() -> bool { diff --git a/src/map/coordinate.cpp b/src/map/coordinate.cpp index 537747434..88ed4d8a7 100644 --- a/src/map/coordinate.cpp +++ b/src/map/coordinate.cpp @@ -28,17 +28,17 @@ Coordinate2f Coordinate2f::operator/(const float f) const return operator*(1.f / f); } -bool Coordinate::operator==(const Coordinate &other) const +bool Coordinate::operator==(const Coordinate other) const { return (other.x == x && other.y == y && other.z == z); } -bool Coordinate::operator!=(const Coordinate &other) const +bool Coordinate::operator!=(const Coordinate other) const { return (other.x != x || other.y != y || other.z != z); } -int Coordinate::distance(const Coordinate &other) const +int Coordinate::distance(const Coordinate other) const { return std::abs(x - other.x) + std::abs(y - other.y) + std::abs(z - other.z); } @@ -50,28 +50,28 @@ void Coordinate::clear() z = 0; } -void Coordinate::operator+=(const Coordinate &other) +void Coordinate::operator+=(const Coordinate other) { x += other.x; y += other.y; z += other.z; } -void Coordinate::operator-=(const Coordinate &other) +void Coordinate::operator-=(const Coordinate other) { x -= other.x; y -= other.y; z -= other.z; } -Coordinate Coordinate::operator+(const Coordinate &other) const +Coordinate Coordinate::operator+(const Coordinate other) const { Coordinate ret = *this; ret += other; return ret; } -Coordinate Coordinate::operator-(const Coordinate &other) const +Coordinate Coordinate::operator-(const Coordinate other) const { Coordinate ret = *this; ret -= other; @@ -99,7 +99,7 @@ Coordinate Coordinate::operator/(const int scalar) const return ret; } -bool Coordinate::operator<(const Coordinate &rhs) const +bool Coordinate::operator<(const Coordinate rhs) const { if (z < rhs.z) { return true; @@ -117,26 +117,26 @@ bool Coordinate::operator<(const Coordinate &rhs) const } return x < rhs.x; } -bool Coordinate::operator>(const Coordinate &rhs) const +bool Coordinate::operator>(const Coordinate rhs) const { return rhs < *this; } -bool Coordinate::operator<=(const Coordinate &rhs) const +bool Coordinate::operator<=(const Coordinate rhs) const { return !(rhs < *this); } -bool Coordinate::operator>=(const Coordinate &rhs) const +bool Coordinate::operator>=(const Coordinate rhs) const { return !(*this < rhs); } // Technically we could init a, and then insert b. -Bounds::Bounds(const Coordinate &a, const Coordinate &b) +Bounds::Bounds(const Coordinate a, const Coordinate b) : min{Coordinate::min(a, b)} , max{Coordinate::max(a, b)} {} -void Bounds::insert(const Coordinate &c) +void Bounds::insert(const Coordinate c) { #define ONE(_type, _xyz) ((_type)._xyz) = std::_type(((_type)._xyz), (c._xyz)) #define THREE(_type) \ diff --git a/src/map/coordinate.h b/src/map/coordinate.h index 6bad26540..e0a3e7c56 100644 --- a/src/map/coordinate.h +++ b/src/map/coordinate.h @@ -24,7 +24,7 @@ struct NODISCARD Coordinate2i final : x{x_} , y{y_} {} - explicit Coordinate2i(const glm::ivec2 &rhs) + explicit Coordinate2i(const glm::ivec2 rhs) : x{rhs.x} , y{rhs.y} {} @@ -37,13 +37,13 @@ struct NODISCARD Coordinate2i final { return Coordinate2i{x - rhs.x, y - rhs.y}; } - Coordinate2i &operator+=(const glm::ivec2 &rhs) + ALLOW_DISCARD Coordinate2i &operator+=(const glm::ivec2 rhs) { auto &self = *this; self = self + Coordinate2i{rhs}; return *this; } - Coordinate2i &operator-=(const glm::ivec2 &rhs) + ALLOW_DISCARD Coordinate2i &operator-=(const glm::ivec2 rhs) { auto &self = *this; self = self - Coordinate2i{rhs}; @@ -111,45 +111,45 @@ class NODISCARD Coordinate final NODISCARD glm::vec3 to_vec3() const { return glm::vec3{x, y, z}; } public: - NODISCARD bool operator==(const Coordinate &other) const; - NODISCARD bool operator!=(const Coordinate &other) const; - void operator+=(const Coordinate &other); - void operator-=(const Coordinate &other); - NODISCARD Coordinate operator+(const Coordinate &other) const; - NODISCARD Coordinate operator-(const Coordinate &other) const; + NODISCARD bool operator==(Coordinate other) const; + NODISCARD bool operator!=(Coordinate other) const; + void operator+=(Coordinate other); + void operator-=(Coordinate other); + NODISCARD Coordinate operator+(Coordinate other) const; + NODISCARD Coordinate operator-(Coordinate other) const; NODISCARD Coordinate operator*(int scalar) const; NODISCARD Coordinate operator/(int scalar) const; - NODISCARD int distance(const Coordinate &other) const; + NODISCARD int distance(Coordinate other) const; void clear(); public: - NODISCARD static Coordinate toCoordinate(const glm::ivec3 &c) + NODISCARD static Coordinate toCoordinate(const glm::ivec3 c) { return Coordinate(c.x, c.y, c.z); } - NODISCARD static Coordinate min(const Coordinate &a, const Coordinate &b) + NODISCARD static Coordinate min(const Coordinate a, const Coordinate b) { return toCoordinate(glm::min(a.to_ivec3(), b.to_ivec3())); } - NODISCARD static Coordinate max(const Coordinate &a, const Coordinate &b) + NODISCARD static Coordinate max(const Coordinate a, const Coordinate b) { return toCoordinate(glm::max(a.to_ivec3(), b.to_ivec3())); } public: - bool operator<(const Coordinate &rhs) const; - bool operator>(const Coordinate &rhs) const; - bool operator<=(const Coordinate &rhs) const; - bool operator>=(const Coordinate &rhs) const; + NODISCARD bool operator<(Coordinate rhs) const; + NODISCARD bool operator>(Coordinate rhs) const; + NODISCARD bool operator<=(Coordinate rhs) const; + NODISCARD bool operator>=(Coordinate rhs) const; }; template<> struct std::hash { - std::size_t operator()(const Coordinate &id) const noexcept + std::size_t operator()(const Coordinate id) const noexcept { const auto hx = numeric_hash(id.x); const auto hy = numeric_hash(id.y); @@ -167,7 +167,7 @@ struct NODISCARD Bounds final // NOTE: These are supposed to be min and max, // but we'll accept a strange mixture. - Bounds(const Coordinate &a, const Coordinate &b); + Bounds(const Coordinate a, const Coordinate b); private: NODISCARD static inline bool isBounded(const int x, const int lo, const int hi) @@ -176,14 +176,14 @@ struct NODISCARD Bounds final } public: - NODISCARD bool contains(const Coordinate &coord) const + NODISCARD bool contains(const Coordinate coord) const { return isBounded(coord.x, min.x, max.x) // && isBounded(coord.y, min.y, max.y) // && isBounded(coord.z, min.z, max.z); // } - void insert(const Coordinate &c); + void insert(const Coordinate c); NODISCARD bool operator==(const Bounds &rhs) const { return min == rhs.min && max == rhs.max; } NODISCARD bool operator!=(const Bounds &rhs) const { return !(rhs == *this); } }; @@ -205,7 +205,7 @@ struct NODISCARD OptBounds final public: OptBounds() = default; - OptBounds(const Coordinate &min, const Coordinate &max) + OptBounds(const Coordinate min, const Coordinate max) : m_bounds{Bounds{min, max}} { assert(min.x <= max.x); @@ -214,7 +214,7 @@ struct NODISCARD OptBounds final } public: - NODISCARD static OptBounds fromCenterRadius(const Coordinate ¢er, const Coordinate &radius) + NODISCARD static OptBounds fromCenterRadius(const Coordinate center, const Coordinate radius) { assert(radius.x >= 0); assert(radius.y >= 0); @@ -228,7 +228,7 @@ struct NODISCARD OptBounds final void reset() { m_bounds.reset(); } public: - NODISCARD bool contains(const Coordinate &coord) const + NODISCARD bool contains(const Coordinate coord) const { return !isRestricted() || getBounds().contains(coord); } diff --git a/src/map/infomark.h b/src/map/infomark.h index 4e60105aa..1a71ace6e 100644 --- a/src/map/infomark.h +++ b/src/map/infomark.h @@ -78,13 +78,13 @@ struct NODISCARD RawInfomark final XFOREACH_INFOMARK_PROPERTY(X_DECL_GETTERS_AND_SETTERS) #undef X_DECL_GETTERS_AND_SETTERS - void offsetBy(const Coordinate &offset) + void offsetBy(const Coordinate offset) { setPosition1(getPosition1() + offset); setPosition2(getPosition2() + offset); } - NODISCARD RawInfomark getOffsetCopy(const Coordinate &offset) const + NODISCARD RawInfomark getOffsetCopy(const Coordinate offset) const { auto copy = *this; copy.offsetBy(offset); @@ -93,7 +93,7 @@ struct NODISCARD RawInfomark final // Document the scaling system, even if nobody uses this function. // REVISIT: use a tag to differentiate the two coordinate types? - NODISCARD static Coordinate worldToIM(const Coordinate &c) + NODISCARD static Coordinate worldToIM(const Coordinate c) { return Coordinate{c.x * INFOMARK_SCALE, c.y * INFOMARK_SCALE, c.z}; } diff --git a/src/map/utils.cpp b/src/map/utils.cpp index fc907f8ef..c9eefa1ba 100644 --- a/src/map/utils.cpp +++ b/src/map/utils.cpp @@ -76,8 +76,7 @@ Coordinate &CoordinateIterator::next() return c; } -Coordinate getNearestFree(const Coordinate &p, - const std::function &check) +Coordinate getNearestFree(const Coordinate p, const std::function &check) { if (check(p) == FindCoordEnum::Available) { return p; diff --git a/src/map/utils.h b/src/map/utils.h index 7fa333482..f64dfabeb 100644 --- a/src/map/utils.h +++ b/src/map/utils.h @@ -13,5 +13,5 @@ class Coordinate; enum class NODISCARD FindCoordEnum : uint8_t { InUse, Available }; -NODISCARD extern Coordinate getNearestFree( - const Coordinate &c, const std::function &check); +NODISCARD extern Coordinate getNearestFree(Coordinate c, + const std::function &check); diff --git a/src/mapdata/mapdata.cpp b/src/mapdata/mapdata.cpp index 5c5b9ddcd..46f477cdf 100644 --- a/src/mapdata/mapdata.cpp +++ b/src/mapdata/mapdata.cpp @@ -64,7 +64,7 @@ DoorName MapData::getDoorName(const RoomId id, const ExitDirEnum dir) return tmp; } -ExitDirFlags MapData::getExitDirections(const Coordinate &pos) +ExitDirFlags MapData::getExitDirections(const Coordinate pos) { if (const auto room = findRoomHandle(pos)) { return computeExitDirections(room.getRaw()); diff --git a/src/mapdata/mapdata.h b/src/mapdata/mapdata.h index 60db5b1c1..23b9bce13 100644 --- a/src/mapdata/mapdata.h +++ b/src/mapdata/mapdata.h @@ -138,7 +138,7 @@ class NODISCARD_QOBJECT MapData final : public MapFrontend NODISCARD bool isFileReadOnly() const { return m_fileReadOnly; } public: - NODISCARD ExitDirFlags getExitDirections(const Coordinate &pos); + NODISCARD ExitDirFlags getExitDirections(Coordinate pos); private: void virt_onNotifyModified(const RoomUpdateFlags /*updateFlags*/) final { setDataChanged(); } @@ -162,7 +162,7 @@ class NODISCARD_QOBJECT MapData final : public MapFrontend } } - void setPosition(const Coordinate &pos) + void setPosition(const Coordinate pos) { if (const auto &room = findRoomHandle(pos)) { setRoom(room.getId()); @@ -185,7 +185,7 @@ class NODISCARD_QOBJECT MapData final : public MapFrontend } } - void forcePosition(const Coordinate &pos) + void forcePosition(const Coordinate pos) { if (const auto &room = findRoomHandle(pos)) { forceToRoom(room.getId()); diff --git a/src/mapfrontend/MapHistory.h b/src/mapfrontend/MapHistory.h index 2f1828b84..334791386 100644 --- a/src/mapfrontend/MapHistory.h +++ b/src/mapfrontend/MapHistory.h @@ -7,7 +7,7 @@ #include #include -class MapHistory +class NODISCARD MapHistory final { private: std::deque m_history; @@ -15,13 +15,16 @@ class MapHistory bool m_capped; public: - MapHistory(bool capped = false, size_t max_size = 0); + explicit MapHistory(bool capped = false, size_t max_size = 0); + ~MapHistory() = default; + MapHistory(const MapHistory &) = delete; + MapHistory &operator=(const MapHistory &) = delete; public: void push(Map map); - Map pop(); + NODISCARD Map pop(); void clear(); public: - bool isEmpty() const; + NODISCARD bool isEmpty() const; }; diff --git a/src/mapfrontend/mapfrontend.cpp b/src/mapfrontend/mapfrontend.cpp index b87f7883e..f5e849ef0 100644 --- a/src/mapfrontend/mapfrontend.cpp +++ b/src/mapfrontend/mapfrontend.cpp @@ -80,7 +80,7 @@ void MapFrontend::clear() virt_clear(); } -bool MapFrontend::createEmptyRoom(const Coordinate &c) +bool MapFrontend::createEmptyRoom(const Coordinate c) { const auto &map = getCurrentMap(); if (map.findRoomHandle(c)) { @@ -117,7 +117,7 @@ bool MapFrontend::tryMakePermanent(const RoomId id) } void MapFrontend::slot_createRoom(const SigParseEvent &sigParseEvent, - const Coordinate &expectedPosition) + const Coordinate expectedPosition) { const ParseEvent &event = sigParseEvent.deref(); @@ -138,7 +138,7 @@ RoomHandle MapFrontend::findRoomHandle(RoomId id) const return getCurrentMap().findRoomHandle(id); } -RoomHandle MapFrontend::findRoomHandle(const Coordinate &coord) const +RoomHandle MapFrontend::findRoomHandle(const Coordinate coord) const { return getCurrentMap().findRoomHandle(coord); } @@ -163,7 +163,7 @@ const RawRoom &MapFrontend::getRawRoom(const RoomId id) const return getCurrentMap().getRawRoom(id); } -RoomIdSet MapFrontend::findAllRooms(const Coordinate &coord) const +RoomIdSet MapFrontend::findAllRooms(const Coordinate coord) const { if (const auto room = findRoomHandle(coord)) { return RoomIdSet{room.getId()}; @@ -179,7 +179,7 @@ RoomIdSet MapFrontend::findAllRooms(const SigParseEvent &event) const return getCurrentMap().findAllRooms(event.deref()); } -RoomIdSet MapFrontend::findAllRooms(const Coordinate &input_min, const Coordinate &input_max) const +RoomIdSet MapFrontend::findAllRooms(const Coordinate input_min, const Coordinate input_max) const { Bounds bounds{input_min, input_max}; RoomIdSet result; diff --git a/src/mapfrontend/mapfrontend.h b/src/mapfrontend/mapfrontend.h index 236b1a3c7..a3017b1b2 100644 --- a/src/mapfrontend/mapfrontend.h +++ b/src/mapfrontend/mapfrontend.h @@ -45,12 +45,12 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra private: void emitUndoRedoAvailability(); - struct HistoryCoordinator + struct NODISCARD HistoryCoordinator final { MapHistory undo_stack; MapHistory redo_stack; - HistoryCoordinator(size_t max_depth) + explicit HistoryCoordinator(size_t max_depth) : undo_stack(true, max_depth) , redo_stack(false) {} @@ -63,7 +63,7 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra } } - std::optional undo(Map current_map_state_for_redo) + NODISCARD std::optional undo(Map current_map_state_for_redo) { if (undo_stack.isEmpty()) { return std::nullopt; @@ -72,7 +72,7 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra return undo_stack.pop(); } - std::optional redo(Map current_map_state_for_undo) + NODISCARD std::optional redo(Map current_map_state_for_undo) { if (redo_stack.isEmpty()) { return std::nullopt; @@ -81,8 +81,8 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra return redo_stack.pop(); } - bool isUndoAvailable() const { return !undo_stack.isEmpty(); } - bool isRedoAvailable() const { return !redo_stack.isEmpty(); } + NODISCARD bool isUndoAvailable() const { return !undo_stack.isEmpty(); } + NODISCARD bool isRedoAvailable() const { return !redo_stack.isEmpty(); } void clearAll() { @@ -136,13 +136,13 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra void unblock(); void checkSize(); - NODISCARD bool createEmptyRoom(const Coordinate &); + NODISCARD bool createEmptyRoom(Coordinate); NODISCARD bool hasTemporaryRoom(RoomId id) const; NODISCARD bool tryRemoveTemporary(RoomId id); NODISCARD bool tryMakePermanent(RoomId id); NODISCARD RoomHandle findRoomHandle(RoomId) const; - NODISCARD RoomHandle findRoomHandle(const Coordinate &) const; + NODISCARD RoomHandle findRoomHandle(Coordinate) const; NODISCARD RoomHandle findRoomHandle(ExternalRoomId id) const; NODISCARD RoomHandle findRoomHandle(ServerRoomId id) const; @@ -150,10 +150,10 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra NODISCARD const RawRoom &getRawRoom(RoomId id) const; // Will technically be 0 or 1 - NODISCARD RoomIdSet findAllRooms(const Coordinate &) const; + NODISCARD RoomIdSet findAllRooms(Coordinate) const; NODISCARD RoomIdSet findAllRooms(const SigParseEvent &) const; // bounding box - NODISCARD RoomIdSet findAllRooms(const Coordinate &, const Coordinate &) const; + NODISCARD RoomIdSet findAllRooms(Coordinate, Coordinate) const; public: void scheduleAction(const Change &change); @@ -164,7 +164,7 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra signals: // this signal is also sent out if a room is deleted. So any clients still // working on this room can start some emergency action. - void sig_mapSizeChanged(const Coordinate &, const Coordinate &); + void sig_mapSizeChanged(Coordinate, Coordinate); void sig_clearingMap(); void sig_undoAvailable(bool available); void sig_redoAvailable(bool available); @@ -172,7 +172,7 @@ class NODISCARD_QOBJECT MapFrontend : public QObject, public RoomModificationTra public slots: // createRoom creates a room without a lock // it will get deleted if no one looks for it for a certain time - void slot_createRoom(const SigParseEvent &, const Coordinate &); + void slot_createRoom(const SigParseEvent &, Coordinate); void slot_undo(); void slot_redo(); }; diff --git a/src/mapstorage/MmpMapStorage.cpp b/src/mapstorage/MmpMapStorage.cpp index 5bd4bd85a..dc6b3690f 100644 --- a/src/mapstorage/MmpMapStorage.cpp +++ b/src/mapstorage/MmpMapStorage.cpp @@ -176,7 +176,7 @@ void MmpMapStorage::saveRoom(const ExternalRawRoom &room, QXmlStreamWriter &stre } stream.writeStartElement("coord"); - const Coordinate &pos = room.getPosition(); + const Coordinate pos = room.getPosition(); stream.writeAttribute("x", QString("%1").arg(pos.x)); stream.writeAttribute("y", QString("%1").arg(pos.y)); stream.writeAttribute("z", QString("%1").arg(pos.z)); diff --git a/src/mapstorage/PandoraMapStorage.cpp b/src/mapstorage/PandoraMapStorage.cpp index 483c4075a..9f0cfc6fa 100644 --- a/src/mapstorage/PandoraMapStorage.cpp +++ b/src/mapstorage/PandoraMapStorage.cpp @@ -262,7 +262,7 @@ std::optional PandoraMapStorage::virt_loadData() }; auto newDeathTrapRoom = [](const ExternalRoomId id, - const Coordinate &pos) -> ExternalRawRoom { + const Coordinate pos) -> ExternalRawRoom { ExternalRawRoom result_room; result_room.setId(id); result_room.setPosition(pos); diff --git a/src/mapstorage/XmlMapStorage.cpp b/src/mapstorage/XmlMapStorage.cpp index 0e19fea8b..758a4a8a2 100644 --- a/src/mapstorage/XmlMapStorage.cpp +++ b/src/mapstorage/XmlMapStorage.cpp @@ -802,7 +802,7 @@ void XmlMapStorage::saveRoom(QXmlStreamWriter &stream, const ExternalRawRoom &ro void XmlMapStorage::saveCoordinate(QXmlStreamWriter &stream, const QString &name, - const Coordinate &pos) + const Coordinate pos) { stream.writeStartElement(name); saveXmlAttribute(stream, "x", QString("%1").arg(pos.x)); diff --git a/src/mapstorage/XmlMapStorage.h b/src/mapstorage/XmlMapStorage.h index 200f0d926..d2c47558c 100644 --- a/src/mapstorage/XmlMapStorage.h +++ b/src/mapstorage/XmlMapStorage.h @@ -112,7 +112,7 @@ class NODISCARD_QOBJECT XmlMapStorage final : public AbstractMapStorage static void saveRoomLoadFlags(QXmlStreamWriter &stream, RoomLoadFlags fl); static void saveRoomMobFlags(QXmlStreamWriter &stream, RoomMobFlags fl); - static void saveCoordinate(QXmlStreamWriter &stream, const QString &name, const Coordinate &pos); + static void saveCoordinate(QXmlStreamWriter &stream, const QString &name, Coordinate pos); static void saveExit(QXmlStreamWriter &stream, const ExternalRawExit &e, ExitDirEnum dir); static void saveExitTo(QXmlStreamWriter &stream, const ExternalRawExit &e); static void saveExitFlags(QXmlStreamWriter &stream, ExitFlags fl); diff --git a/src/mapstorage/jsonmapstorage.cpp b/src/mapstorage/jsonmapstorage.cpp index 14ee22838..bf8ebda5d 100644 --- a/src/mapstorage/jsonmapstorage.cpp +++ b/src/mapstorage/jsonmapstorage.cpp @@ -96,7 +96,7 @@ class NODISCARD RoomHashIndex final NODISCARD const Index &index() const { return m_index; } }; -NODISCARD static std::string getZoneKey(const Coordinate &c) +NODISCARD static std::string getZoneKey(const Coordinate c) { static constexpr const auto calcZoneCoord = [](const int n) -> int { auto f = [](const int x) -> int { return (x / ZONE_WIDTH) * ZONE_WIDTH; }; @@ -303,8 +303,8 @@ NODISCARD static constexpr const char *getNameUpper(const ExitDirEnum dir) void JsonWorld::writeMetadata(const QFileInfo &path, const Bounds &bounds) const { // This can give bogus data if the bounds aren't set. - const Coordinate &min = bounds.min; - const Coordinate &max = bounds.max; + const Coordinate min = bounds.min; + const Coordinate max = bounds.max; QJsonObject meta; meta["roomsCount"] = static_cast(m_jRoomIds.size()); @@ -354,7 +354,7 @@ void JsonWorld::addRoom(QJsonArray &jRooms, const ExternalRawRoom &room) const "A largely ceremonial hall, it was the first mineshaft that led down to what is\n" */ - const Coordinate &pos = room.getPosition(); + const Coordinate pos = room.getPosition(); QJsonObject jr; jr["x"] = pos.x; jr["y"] = -pos.y; diff --git a/src/mapstorage/mapstorage.cpp b/src/mapstorage/mapstorage.cpp index f05eb2349..d9ebca97c 100644 --- a/src/mapstorage/mapstorage.cpp +++ b/src/mapstorage/mapstorage.cpp @@ -118,7 +118,7 @@ void transformInfomarkOnLoad(const uint32_t version, RawInfomark &mark) mark.setPosition2(convertESUtoENU(mark.getPosition2())); } -void writeCoordinate(QDataStream &stream, const Coordinate &c) +void writeCoordinate(QDataStream &stream, const Coordinate c) { stream << static_cast(c.x); stream << static_cast(c.y); diff --git a/src/opengl/Font.cpp b/src/opengl/Font.cpp index 469e1a1e6..fddbb6f83 100644 --- a/src/opengl/Font.cpp +++ b/src/opengl/Font.cpp @@ -524,7 +524,7 @@ class NODISCARD FontBatchBuilder final { glm::ivec2 maxVertPos{}; glm::ivec2 minVertPos{}; - void include(const glm::ivec2 &vertPos) + void include(const glm::ivec2 vertPos) { minVertPos = glm::min(vertPos, minVertPos); maxVertPos = glm::max(vertPos, maxVertPos); @@ -554,14 +554,14 @@ class NODISCARD FontBatchBuilder final , m_verts3d{output} {} - NODISCARD glm::vec2 getTexCoord(const glm::ivec2 &iTexCoord) const + NODISCARD glm::vec2 getTexCoord(const glm::ivec2 iTexCoord) const { return glm::vec2(iTexCoord) / glm::vec2(m_iTexSize); } // REVISIT: This could be done in the shader, // at the cost of transmitting italics bit and rotation angle. - NODISCARD glm::vec2 transformVert(const glm::ivec2 &ipos) const + NODISCARD glm::vec2 transformVert(const glm::ivec2 ipos) const { glm::vec2 pos(ipos); @@ -576,12 +576,12 @@ class NODISCARD FontBatchBuilder final } void emitGlyphQuad(const bool isEmpty, - const glm::ivec2 &iVertex00, - const glm::ivec2 &iTexCoord00, - const glm::ivec2 &iglyphSize) + const glm::ivec2 iVertex00, + const glm::ivec2 iTexCoord00, + const glm::ivec2 iglyphSize) { const auto emitWithOffset = - [this, isEmpty, &iVertex00, &iTexCoord00](const glm::ivec2 &pixelOffset) -> void { + [this, isEmpty, &iVertex00, &iTexCoord00](const glm::ivec2 pixelOffset) -> void { const glm::ivec2 relativeVertPos = iVertex00 + pixelOffset; if (!isEmpty) { // side-effect: updates bounds; this must come before return @@ -644,7 +644,7 @@ class NODISCARD FontBatchBuilder final // measurement, background color, and underline. { - const auto add = [this](const Color c, const glm::ivec2 &ivert, const glm::ivec2 &itc) { + const auto add = [this](const Color c, const glm::ivec2 ivert, const glm::ivec2 itc) { const glm::vec2 tc = getTexCoord(itc); const glm::vec2 vert = transformVert(ivert); m_verts3d.emplace_back(m_opts.pos, c, tc, vert); diff --git a/src/opengl/Font.h b/src/opengl/Font.h index 6a19046a7..fab28dbc1 100644 --- a/src/opengl/Font.h +++ b/src/opengl/Font.h @@ -31,7 +31,7 @@ struct NODISCARD GLText final FontFormatFlags fontFormatFlag; int rotationAngle = 0; - explicit GLText(const glm::vec3 &pos_, + explicit GLText(const glm::vec3 pos_, std::string moved_text, const Color color_ = {}, std::optional bgcolor_ = {}, diff --git a/src/opengl/LineRendering.cpp b/src/opengl/LineRendering.cpp index 74b1018e4..b3b1733d8 100644 --- a/src/opengl/LineRendering.cpp +++ b/src/opengl/LineRendering.cpp @@ -11,11 +11,11 @@ namespace mmgl { void generateLineQuad(std::vector &verts, - const glm::vec3 &p1, - const glm::vec3 &p2, + const glm::vec3 p1, + const glm::vec3 p2, const float width, const Color color, - const glm::vec3 &perpendicular_normal) + const glm::vec3 perpendicular_normal) { // Assert that perpendicular_normal is unit length assert( @@ -36,17 +36,17 @@ void generateLineQuad(std::vector &verts, verts.emplace_back(color, v4); } -bool isDegenerate(const glm::vec3 &vec) +bool isDegenerate(const glm::vec3 vec) { return glm::length2(vec) < mmgl::GEOMETRIC_EPSILON * 10.f; } -bool isNearZero(const glm::vec3 &segment) +bool isNearZero(const glm::vec3 segment) { return glm::length2(segment) < mmgl::ZERO_LENGTH_THRESHOLD_SQ; } -glm::vec3 getPerpendicularNormal(const glm::vec3 &direction) +glm::vec3 getPerpendicularNormal(const glm::vec3 direction) { glm::vec3 perp_normal_candidate = glm::vec3(-direction.y, direction.x, 0.0f); if (isDegenerate(perp_normal_candidate)) { @@ -55,7 +55,7 @@ glm::vec3 getPerpendicularNormal(const glm::vec3 &direction) return glm::normalize(perp_normal_candidate); } -glm::vec3 getOrthogonalNormal(const glm::vec3 &direction, const glm::vec3 &perp_normal_1) +glm::vec3 getOrthogonalNormal(const glm::vec3 direction, const glm::vec3 perp_normal_1) { glm::vec3 perp_normal_2_candidate = glm::cross(direction, perp_normal_1); if (isDegenerate(perp_normal_2_candidate)) { @@ -65,8 +65,8 @@ glm::vec3 getOrthogonalNormal(const glm::vec3 &direction, const glm::vec3 &perp_ } void generateLineQuadsSafe(std::vector &verts, - const glm::vec3 &p1, - const glm::vec3 &p2, + const glm::vec3 p1, + const glm::vec3 p2, const float width, const Color color) { @@ -82,7 +82,7 @@ void generateLineQuadsSafe(std::vector &verts, } void drawZeroLengthSquare(std::vector &verts, - const glm::vec3 ¢er, + const glm::vec3 center, float width, const Color color) { diff --git a/src/opengl/LineRendering.h b/src/opengl/LineRendering.h index a7e2352ff..a9378476c 100644 --- a/src/opengl/LineRendering.h +++ b/src/opengl/LineRendering.h @@ -29,37 +29,31 @@ static constexpr const float ZERO_LENGTH_THRESHOLD_SQ = GEOMETRIC_EPSILON * GEOM // NOTE: perpendicular_normal is assumed to be unit length. void generateLineQuad(std::vector &verts, - const glm::vec3 &p1, - const glm::vec3 &p2, + glm::vec3 p1, + glm::vec3 p2, float width, Color color, - const glm::vec3 &perpendicular_normal); + glm::vec3 perpendicular_normal); -void drawZeroLengthSquare(std::vector &verts, - const glm::vec3 ¢er, - float width, - Color color); +void drawZeroLengthSquare(std::vector &verts, glm::vec3 center, float width, Color color); // Returns a normalized vector perpendicular to the input direction, primarily in the XY plane. // Handles near-zero direction vectors by returning a default perpendicular (1,0,0). -NODISCARD glm::vec3 getPerpendicularNormal(const glm::vec3 &direction); +NODISCARD glm::vec3 getPerpendicularNormal(glm::vec3 direction); // Returns a normalized vector orthogonal to both the segment direction and the first perpendicular normal. // This is suitable for generating a second quad to form a "cross" shape. -NODISCARD glm::vec3 getOrthogonalNormal(const glm::vec3 &direction, const glm::vec3 &perp_normal_1); +NODISCARD glm::vec3 getOrthogonalNormal(glm::vec3 direction, glm::vec3 perp_normal_1); // Generates a line quad, handling zero-length segments by drawing a square instead. // Uses getPerpendicularNormal for the quad generation. -void generateLineQuadsSafe(std::vector &verts, - const glm::vec3 &p1, - const glm::vec3 &p2, - float width, - Color color); +void generateLineQuadsSafe( + std::vector &verts, glm::vec3 p1, glm::vec3 p2, float width, Color color); // Checks if the squared length of a vector is below the degeneration threshold. -NODISCARD bool isDegenerate(const glm::vec3 &vec); +NODISCARD bool isDegenerate(glm::vec3 vec); // Checks if the squared length of a segment vector is below the zero-length threshold. -NODISCARD bool isNearZero(const glm::vec3 &segment); +NODISCARD bool isNearZero(glm::vec3 segment); } // namespace mmgl diff --git a/src/opengl/OpenGLTypes.h b/src/opengl/OpenGLTypes.h index 1fff18550..4c165aaa4 100644 --- a/src/opengl/OpenGLTypes.h +++ b/src/opengl/OpenGLTypes.h @@ -36,7 +36,7 @@ struct NODISCARD TexVert final glm::vec3 tex{}; glm::vec3 vert{}; - explicit TexVert(const glm::vec3 &tex_, const glm::vec3 &vert_) + explicit TexVert(const glm::vec3 tex_, const glm::vec3 vert_) : tex{tex_} , vert{vert_} {} @@ -50,7 +50,7 @@ struct NODISCARD ColoredTexVert final glm::vec3 tex{}; glm::vec3 vert{}; - explicit ColoredTexVert(const Color color_, const glm::vec3 &tex_, const glm::vec3 &vert_) + explicit ColoredTexVert(const Color color_, const glm::vec3 tex_, const glm::vec3 vert_) : color{color_} , tex{tex_} , vert{vert_} @@ -64,11 +64,11 @@ struct NODISCARD RoomQuadTexVert final // - tex_z: packed into bits 0-7 (must be < 256) glm::ivec4 vertTexCol{}; - explicit RoomQuadTexVert(const glm::ivec3 &vert, const int tex_z) + explicit RoomQuadTexVert(const glm::ivec3 vert, const int tex_z) : RoomQuadTexVert{vert, tex_z, NamedColorEnum::DEFAULT} {} - explicit RoomQuadTexVert(const glm::ivec3 &vert, const int tex_z, const NamedColorEnum color) + explicit RoomQuadTexVert(const glm::ivec3 vert, const int tex_z, const NamedColorEnum color) : vertTexCol{vert, (static_cast(color) << 8) | tex_z} { if (IS_DEBUG_BUILD) { @@ -87,7 +87,7 @@ struct NODISCARD ColorVert final Color color; glm::vec3 vert{}; - explicit ColorVert(const Color color_, const glm::vec3 &vert_) + explicit ColorVert(const Color color_, const glm::vec3 vert_) : color{color_} , vert{vert_} {} @@ -98,7 +98,7 @@ struct NODISCARD WeatherParticleVert final glm::vec2 pos{}; float life = 0.0f; - explicit WeatherParticleVert(const glm::vec2 &pos_, const float life_) + explicit WeatherParticleVert(const glm::vec2 pos_, const float life_) : pos{pos_} , life{life_} {} @@ -117,10 +117,10 @@ struct NODISCARD FontVert3d final glm::vec2 tex{}; glm::vec2 vert{}; // screen space - explicit FontVert3d(const glm::vec3 &base_, + explicit FontVert3d(const glm::vec3 base_, const Color color_, - const glm::vec2 &tex_, - const glm::vec2 &vert_) + const glm::vec2 tex_, + const glm::vec2 vert_) : base{base_} , color{color_} , tex{tex_} @@ -425,6 +425,6 @@ struct NODISCARD UniqueMeshVector final } }; -static constexpr const size_t VERTS_PER_LINE = 2; -static constexpr const size_t VERTS_PER_TRI = 3; -static constexpr const size_t VERTS_PER_QUAD = 4; +static inline constexpr size_t VERTS_PER_LINE = 2; +static inline constexpr size_t VERTS_PER_TRI = 3; +static inline constexpr size_t VERTS_PER_QUAD = 4; diff --git a/src/opengl/legacy/Legacy.h b/src/opengl/legacy/Legacy.h index 9bfb670cb..c33c912e9 100644 --- a/src/opengl/legacy/Legacy.h +++ b/src/opengl/legacy/Legacy.h @@ -294,8 +294,8 @@ class NODISCARD Functions : protected QOpenGLExtraFunctions, NODISCARD Viewport getPhysicalViewport() const { - const glm::ivec2 &offset = m_viewport.offset; - const glm::ivec2 &size = m_viewport.size; + const auto &offset = m_viewport.offset; + const auto &size = m_viewport.size; return Viewport{{scalei(offset.x), scalei(offset.y)}, {scalei(size.x), scalei(size.y)}}; } diff --git a/src/parser/AbstractParser-Mark.cpp b/src/parser/AbstractParser-Mark.cpp index e9fc39dea..aa6391224 100644 --- a/src/parser/AbstractParser-Mark.cpp +++ b/src/parser/AbstractParser-Mark.cpp @@ -107,7 +107,7 @@ void AbstractParser::parseMark(StringView input) return c; }; - auto getInfomarkSelection = [this](const Coordinate &c) -> std::shared_ptr { + auto getInfomarkSelection = [this](const Coordinate c) -> std::shared_ptr { // the scaling + offset operation looks like `A*x + b` where A is a 3x3 // transformation matrix and b,x are 3-vectors diff --git a/src/pathmachine/path.cpp b/src/pathmachine/path.cpp index e9f8bb3cb..8754deaf2 100644 --- a/src/pathmachine/path.cpp +++ b/src/pathmachine/path.cpp @@ -44,7 +44,7 @@ Path::Path(Badge, * and probability is updated accordingly */ std::shared_ptr Path::fork(const RoomHandle &in_room, - const Coordinate &expectedCoordinate, + const Coordinate expectedCoordinate, const PathParameters &p, const ExitDirEnum direction) { diff --git a/src/pathmachine/path.h b/src/pathmachine/path.h index 7aa73ac8d..7138d2525 100644 --- a/src/pathmachine/path.h +++ b/src/pathmachine/path.h @@ -92,7 +92,7 @@ class NODISCARD Path final : public std::enable_shared_from_this // new Path is created, distance between rooms is calculated and probability is set accordingly. NODISCARD std::shared_ptr fork(const RoomHandle &room, - const Coordinate &expectedCoordinate, + Coordinate expectedCoordinate, const PathParameters ¶ms, ExitDirEnum dir); NODISCARD double getProb() const diff --git a/src/pathmachine/pathmachine.cpp b/src/pathmachine/pathmachine.cpp index 7e8c84e55..292bb643c 100644 --- a/src/pathmachine/pathmachine.cpp +++ b/src/pathmachine/pathmachine.cpp @@ -269,7 +269,7 @@ void PathMachine::approved(const SigParseEvent &sigParseEvent, ChangeList &chang const auto cmd = event.getMoveType(); // NOTE: This allows ExitDirEnum::UNKNOWN, // which means the coordinate can be Coordinate(0,0,0). - const Coordinate &eDir = ::exitDir(getDirection(cmd)); + const Coordinate eDir = ::exitDir(getDirection(cmd)); // CAUTION: This test seems to mean it wants only NESW, // but it would also accept ExitDirEnum::UNKNOWN, @@ -570,7 +570,7 @@ void PathMachine::experimenting(const SigParseEvent &sigParseEvent, ChangeList & // only create rooms if it has a serverId or no properties are skipped and the direction is NESWUD. if (event.canCreateNewRoom() && isDirectionNESWUD(moveCode) && hasMostLikelyRoom()) { const auto dir = getDirection(moveCode); - const Coordinate &move = ::exitDir(dir); + const Coordinate move = ::exitDir(dir); Crossover exp{m_map, m_paths, dir, params}; RoomIdSet pathEnds; for (const auto &path : deref(m_paths)) { From afe31b76c70fc3a8972fa3e6c4fa3371b9c2d288 Mon Sep 17 00:00:00 2001 From: Nils Schimmelmann Date: Wed, 15 Apr 2026 19:04:52 -0500 Subject: [PATCH 8/8] minor const cleanup --- src/global/Color.h | 10 ++--- src/map/ExitDirection.h | 8 ++-- src/proxy/AbstractTelnet.h | 86 +++++++++++++++++++------------------- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/global/Color.h b/src/global/Color.h index 412893aba..82f4b4c56 100644 --- a/src/global/Color.h +++ b/src/global/Color.h @@ -17,11 +17,11 @@ class QString; struct NODISCARD Color final { private: - static constexpr const uint32_t TRANSPARENT_BLACK = 0u; - static constexpr const uint32_t OPAQUE_WHITE = ~TRANSPARENT_BLACK; - static constexpr const uint32_t MASK_RGB = 0x00ffffffu; - static constexpr const uint32_t MASK_ALPHA = ~MASK_RGB; - static constexpr const int SHIFT_ALPHA = 24; + static constexpr uint32_t TRANSPARENT_BLACK = 0u; + static constexpr uint32_t OPAQUE_WHITE = ~TRANSPARENT_BLACK; + static constexpr uint32_t MASK_RGB = 0x00ffffffu; + static constexpr uint32_t MASK_ALPHA = ~MASK_RGB; + static constexpr int SHIFT_ALPHA = 24; static_assert(MASK_RGB == ((1u << SHIFT_ALPHA) - 1u)); static_assert(MASK_ALPHA == (255u << SHIFT_ALPHA)); static_assert(OPAQUE_WHITE == (MASK_RGB | MASK_ALPHA)); diff --git a/src/map/ExitDirection.h b/src/map/ExitDirection.h index 202340b5a..48beef89f 100644 --- a/src/map/ExitDirection.h +++ b/src/map/ExitDirection.h @@ -21,10 +21,10 @@ enum class NODISCARD ExitDirEnum : uint8_t { NONE }; -static constexpr const uint32_t NUM_EXITS_NESW = 4u; -static constexpr const uint32_t NUM_EXITS_NESWUD = 6u; -static constexpr const uint32_t NUM_EXITS = 7u; -static constexpr const uint32_t NUM_EXITS_INCLUDING_NONE = 8u; +static constexpr uint32_t NUM_EXITS_NESW = 4u; +static constexpr uint32_t NUM_EXITS_NESWUD = 6u; +static constexpr uint32_t NUM_EXITS = 7u; +static constexpr uint32_t NUM_EXITS_INCLUDING_NONE = 8u; namespace enums { NODISCARD const MMapper::Array &getAllExitsNESW(); diff --git a/src/proxy/AbstractTelnet.h b/src/proxy/AbstractTelnet.h index 34edb27b4..05d6e20a1 100644 --- a/src/proxy/AbstractTelnet.h +++ b/src/proxy/AbstractTelnet.h @@ -19,52 +19,52 @@ #include // telnet command codes (prefixed with TN_ to prevent duplicit #defines -static constexpr const uint8_t TN_EOR = 239; -static constexpr const uint8_t TN_SE = 240; -static constexpr const uint8_t TN_NOP = 241; -static constexpr const uint8_t TN_DM = 242; -static constexpr const uint8_t TN_B = 243; -static constexpr const uint8_t TN_IP = 244; -static constexpr const uint8_t TN_AO = 245; -static constexpr const uint8_t TN_AYT = 246; -static constexpr const uint8_t TN_EC = 247; -static constexpr const uint8_t TN_EL = 248; -static constexpr const uint8_t TN_GA = 249; -static constexpr const uint8_t TN_SB = 250; -static constexpr const uint8_t TN_WILL = 251; -static constexpr const uint8_t TN_WONT = 252; -static constexpr const uint8_t TN_DO = 253; -static constexpr const uint8_t TN_DONT = 254; -static constexpr const uint8_t TN_IAC = 255; +static constexpr uint8_t TN_EOR = 239; +static constexpr uint8_t TN_SE = 240; +static constexpr uint8_t TN_NOP = 241; +static constexpr uint8_t TN_DM = 242; +static constexpr uint8_t TN_B = 243; +static constexpr uint8_t TN_IP = 244; +static constexpr uint8_t TN_AO = 245; +static constexpr uint8_t TN_AYT = 246; +static constexpr uint8_t TN_EC = 247; +static constexpr uint8_t TN_EL = 248; +static constexpr uint8_t TN_GA = 249; +static constexpr uint8_t TN_SB = 250; +static constexpr uint8_t TN_WILL = 251; +static constexpr uint8_t TN_WONT = 252; +static constexpr uint8_t TN_DO = 253; +static constexpr uint8_t TN_DONT = 254; +static constexpr uint8_t TN_IAC = 255; // telnet option codes (supported options only) -static constexpr const uint8_t OPT_ECHO = 1; -static constexpr const uint8_t OPT_SUPPRESS_GA = 3; -static constexpr const uint8_t OPT_STATUS = 5; -static constexpr const uint8_t OPT_TIMING_MARK = 6; -static constexpr const uint8_t OPT_TERMINAL_TYPE = 24; -static constexpr const uint8_t OPT_EOR = 25; -static constexpr const uint8_t OPT_NAWS = 31; -static constexpr const uint8_t OPT_LINEMODE = 34; -static constexpr const uint8_t OPT_CHARSET = 42; -static constexpr const uint8_t OPT_MSSP = 70; -static constexpr const uint8_t OPT_COMPRESS2 = 86; -static constexpr const uint8_t OPT_GMCP = 201; +static constexpr uint8_t OPT_ECHO = 1; +static constexpr uint8_t OPT_SUPPRESS_GA = 3; +static constexpr uint8_t OPT_STATUS = 5; +static constexpr uint8_t OPT_TIMING_MARK = 6; +static constexpr uint8_t OPT_TERMINAL_TYPE = 24; +static constexpr uint8_t OPT_EOR = 25; +static constexpr uint8_t OPT_NAWS = 31; +static constexpr uint8_t OPT_LINEMODE = 34; +static constexpr uint8_t OPT_CHARSET = 42; +static constexpr uint8_t OPT_MSSP = 70; +static constexpr uint8_t OPT_COMPRESS2 = 86; +static constexpr uint8_t OPT_GMCP = 201; // telnet SB suboption types -static constexpr const uint8_t TNSB_IS = 0; -static constexpr const uint8_t TNSB_SEND = 1; -static constexpr const uint8_t TNSB_REQUEST = 1; -static constexpr const uint8_t TNSB_MODE = 1; -static constexpr const uint8_t TNSB_EDIT = 1; -static constexpr const uint8_t TNSB_MSSP_VAR = 1; -static constexpr const uint8_t TNSB_MSSP_VAL = 2; -static constexpr const uint8_t TNSB_ACCEPTED = 2; -static constexpr const uint8_t TNSB_REJECTED = 3; -static constexpr const uint8_t TNSB_TTABLE_IS = 4; -static constexpr const uint8_t TNSB_TTABLE_REJECTED = 5; -static constexpr const uint8_t TNSB_TTABLE_ACK = 6; -static constexpr const uint8_t TNSB_TTABLE_NAK = 7; +static constexpr uint8_t TNSB_IS = 0; +static constexpr uint8_t TNSB_SEND = 1; +static constexpr uint8_t TNSB_REQUEST = 1; +static constexpr uint8_t TNSB_MODE = 1; +static constexpr uint8_t TNSB_EDIT = 1; +static constexpr uint8_t TNSB_MSSP_VAR = 1; +static constexpr uint8_t TNSB_MSSP_VAL = 2; +static constexpr uint8_t TNSB_ACCEPTED = 2; +static constexpr uint8_t TNSB_REJECTED = 3; +static constexpr uint8_t TNSB_TTABLE_IS = 4; +static constexpr uint8_t TNSB_TTABLE_REJECTED = 5; +static constexpr uint8_t TNSB_TTABLE_ACK = 6; +static constexpr uint8_t TNSB_TTABLE_NAK = 7; struct NODISCARD AppendBuffer : public RawBytes { @@ -102,7 +102,7 @@ class NODISCARD AbstractTelnet friend TelnetFormatter; protected: - static constexpr const size_t NUM_OPTS = 256; + static constexpr size_t NUM_OPTS = 256; using OptionArray = MMapper::Array; struct NODISCARD Options final