From c356f284fb558c30cc144b590d7e6a6c8101ce59 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Sat, 27 Dec 2025 11:25:59 -0700 Subject: [PATCH 01/15] move MemSize and related functions to ra::data::Memory static class --- src/RA_Defs.cpp | 173 +------- src/RA_Defs.h | 5 +- src/RA_Integration.vcxproj | 2 +- src/RA_Integration.vcxproj.filters | 12 +- src/api/DeleteCodeNote.hh | 4 +- src/api/FetchCodeNotes.hh | 4 +- src/api/UpdateCodeNote.hh | 2 +- src/api/impl/ConnectedServer.cpp | 2 +- src/data/Types.hh | 232 ---------- src/data/context/ConsoleContext.cpp | 28 +- src/data/context/ConsoleContext.hh | 20 +- src/data/context/EmulatorContext.cpp | 134 +++--- src/data/context/EmulatorContext.hh | 24 +- src/data/context/GameContext.cpp | 8 +- src/data/context/GameContext.hh | 8 +- src/data/models/CodeNoteModel.cpp | 112 ++--- src/data/models/CodeNoteModel.hh | 36 +- src/data/models/CodeNotesModel.cpp | 58 +-- src/data/models/CodeNotesModel.hh | 60 +-- src/data/models/MemoryRegionsModel.cpp | 8 +- src/data/models/MemoryRegionsModel.hh | 10 +- src/data/models/TriggerValidation.cpp | 56 +-- src/data/models/TriggerValidation.hh | 1 - src/data/search/MemBlock.cpp | 16 +- src/data/search/MemBlock.hh | 20 +- src/devkit/RADevKit.vcxproj | 2 + src/devkit/RADevKit.vcxproj.filters | 6 + src/devkit/data/Memory.cpp | 213 ++++++++++ src/devkit/data/Memory.hh | 252 +++++++++++ src/services/AchievementLogicSerializer.cpp | 72 ++-- src/services/AchievementLogicSerializer.hh | 5 +- src/services/AchievementRuntime.cpp | 6 +- src/services/AchievementRuntime.hh | 2 +- src/services/AchievementRuntimeExports.cpp | 2 +- src/services/Search/SearchImpl.cpp | 22 +- src/services/Search/SearchImpl.hh | 36 +- src/services/Search/SearchImpl_16bit.hh | 6 +- .../Search/SearchImpl_16bit_aligned.hh | 8 +- src/services/Search/SearchImpl_16bit_be.hh | 6 +- .../Search/SearchImpl_16bit_be_aligned.hh | 6 +- src/services/Search/SearchImpl_24bit.hh | 2 +- src/services/Search/SearchImpl_32bit.hh | 6 +- .../Search/SearchImpl_32bit_aligned.hh | 8 +- src/services/Search/SearchImpl_32bit_be.hh | 6 +- .../Search/SearchImpl_32bit_be_aligned.hh | 6 +- src/services/Search/SearchImpl_4bit.hh | 18 +- src/services/Search/SearchImpl_8bit.hh | 4 +- src/services/Search/SearchImpl_asciitext.hh | 8 +- src/services/Search/SearchImpl_bitcount.hh | 4 +- src/services/Search/SearchImpl_double32.hh | 4 +- .../Search/SearchImpl_double32_aligned.hh | 12 +- src/services/Search/SearchImpl_double32_be.hh | 4 +- .../Search/SearchImpl_double32_be_aligned.hh | 8 +- src/services/Search/SearchImpl_float.hh | 14 +- .../Search/SearchImpl_float_aligned.hh | 8 +- src/services/Search/SearchImpl_float_be.hh | 4 +- .../Search/SearchImpl_float_be_aligned.hh | 8 +- src/services/Search/SearchImpl_mbf32.hh | 4 +- src/services/Search/SearchImpl_mbf32_le.hh | 4 +- src/services/SearchResults.cpp | 22 +- src/services/SearchResults.h | 16 +- src/ui/viewmodels/AssetListViewModel.cpp | 2 +- src/ui/viewmodels/AssetListViewModel.hh | 2 +- src/ui/viewmodels/AssetUploadViewModel.cpp | 6 +- src/ui/viewmodels/AssetUploadViewModel.hh | 4 +- src/ui/viewmodels/CodeNotesViewModel.cpp | 22 +- src/ui/viewmodels/CodeNotesViewModel.hh | 6 +- .../viewmodels/MemoryBookmarksViewModel.cpp | 62 +-- src/ui/viewmodels/MemoryBookmarksViewModel.hh | 6 +- .../viewmodels/MemoryInspectorViewModel.cpp | 18 +- src/ui/viewmodels/MemoryInspectorViewModel.hh | 12 +- src/ui/viewmodels/MemoryRegionsViewModel.cpp | 4 +- src/ui/viewmodels/MemorySearchViewModel.cpp | 68 +-- src/ui/viewmodels/MemorySearchViewModel.hh | 20 +- src/ui/viewmodels/MemoryViewerViewModel.cpp | 56 +-- src/ui/viewmodels/MemoryViewerViewModel.hh | 32 +- .../viewmodels/MemoryWatchListViewModel.cpp | 46 +- src/ui/viewmodels/MemoryWatchListViewModel.hh | 6 +- src/ui/viewmodels/MemoryWatchViewModel.cpp | 50 +-- src/ui/viewmodels/MemoryWatchViewModel.hh | 20 +- src/ui/viewmodels/PointerFinderViewModel.cpp | 10 +- src/ui/viewmodels/PointerFinderViewModel.hh | 4 +- .../viewmodels/PointerInspectorViewModel.cpp | 74 ++-- .../viewmodels/PointerInspectorViewModel.hh | 10 +- .../viewmodels/TriggerConditionViewModel.cpp | 36 +- .../viewmodels/TriggerConditionViewModel.hh | 20 +- src/ui/viewmodels/TriggerViewModel.cpp | 56 +-- src/ui/win32/MemoryInspectorDialog.cpp | 16 +- .../GridMemoryWatchFormatColumnBinding.hh | 16 +- .../bindings/MemoryViewerControlBinding.cpp | 6 +- tests/RA_UnitTestHelpers.h | 89 ---- tests/data/context/ConsoleContext_Tests.cpp | 2 +- tests/data/context/EmulatorContext_Tests.cpp | 172 ++++---- tests/data/context/GameContext_Tests.cpp | 6 +- tests/data/models/CodeNoteModel_Tests.cpp | 397 +++++++++--------- tests/data/models/CodeNotesModel_Tests.cpp | 287 ++++++------- .../data/models/MemoryRegionsModel_Tests.cpp | 26 +- tests/devkit/RADevKit.Tests.vcxproj.vcxproj | 1 + .../RADevKit.Tests.vcxproj.vcxproj.filters | 3 + tests/devkit/testutil/MemoryAsserts.hh | 106 +++++ tests/mocks/MockConsoleContext.hh | 6 +- tests/mocks/MockGameContext.hh | 8 +- .../AchievementRuntimeExports_Tests.cpp | 2 +- tests/services/FrameEventQueue_Tests.cpp | 4 +- tests/services/SearchResults_Tests.cpp | 385 ++++++++--------- .../viewmodels/AssetEditorViewModel_Tests.cpp | 29 +- .../viewmodels/AssetListViewModel_Tests.cpp | 2 +- .../viewmodels/CodeNotesViewModel_Tests.cpp | 17 +- .../MemoryBookmarksViewModel_Tests.cpp | 271 ++++++------ .../MemoryInspectorViewModel_Tests.cpp | 41 +- .../MemorySearchViewModel_Tests.cpp | 109 ++--- .../MemoryViewerViewModel_Tests.cpp | 95 ++--- .../MemoryWatchListViewModel_Tests.cpp | 163 +++---- .../PointerInspectorViewModel_Tests.cpp | 137 +++--- .../TriggerConditionViewModel_Tests.cpp | 87 ++-- .../ui/viewmodels/TriggerViewModel_Tests.cpp | 70 +-- 116 files changed, 2564 insertions(+), 2490 deletions(-) create mode 100644 src/devkit/data/Memory.cpp create mode 100644 src/devkit/data/Memory.hh create mode 100644 tests/devkit/testutil/MemoryAsserts.hh diff --git a/src/RA_Defs.cpp b/src/RA_Defs.cpp index af4930f57..1ef1a6c2e 100644 --- a/src/RA_Defs.cpp +++ b/src/RA_Defs.cpp @@ -10,7 +10,7 @@ namespace ra { _Use_decl_annotations_ -std::string ByteAddressToString(ByteAddress nAddr) +std::string ByteAddressToString(ra::data::ByteAddress nAddr) { #ifndef RA_UTEST const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); @@ -21,9 +21,9 @@ std::string ByteAddressToString(ByteAddress nAddr) } _Use_decl_annotations_ -ByteAddress ByteAddressFromString(const std::string& sByteAddress) +ra::data::ByteAddress ByteAddressFromString(const std::string& sByteAddress) { - ra::ByteAddress address{}; + ra::data::ByteAddress address{}; if (!ra::StringStartsWith(sByteAddress, "-")) // negative addresses not supported { @@ -42,69 +42,6 @@ ByteAddress ByteAddressFromString(const std::string& sByteAddress) namespace data { -static std::wstring U32ToFloatString(unsigned nValue, char nFloatType) -{ - rc_typed_value_t value; - value.type = RC_VALUE_TYPE_UNSIGNED; - value.value.u32 = nValue; - rc_transform_memref_value(&value, nFloatType); - - if (value.value.f32 < 0.000001) - { - if (value.value.f32 > 0.0) - return ra::StringPrintf(L"%e", value.value.f32); - - if (value.value.f32 < 0.0 && value.value.f32 > -0.000001) - return ra::StringPrintf(L"%e", value.value.f32); - } - - std::wstring sValue = ra::StringPrintf(L"%f", value.value.f32); - while (sValue.back() == L'0') - sValue.pop_back(); - if (sValue.back() == L'.') - sValue.push_back(L'0'); - - return sValue; -} - -std::wstring MemSizeFormat(unsigned nValue, MemSize nSize, MemFormat nFormat) -{ - switch (nSize) - { - case MemSize::Float: - return U32ToFloatString(nValue, RC_MEMSIZE_FLOAT); - - case MemSize::FloatBigEndian: - return U32ToFloatString(nValue, RC_MEMSIZE_FLOAT_BE); - - case MemSize::Double32: - return U32ToFloatString(nValue, RC_MEMSIZE_DOUBLE32); - - case MemSize::Double32BigEndian: - return U32ToFloatString(nValue, RC_MEMSIZE_DOUBLE32_BE); - - case MemSize::MBF32: - return U32ToFloatString(nValue, RC_MEMSIZE_MBF32); - - case MemSize::MBF32LE: - return U32ToFloatString(nValue, RC_MEMSIZE_MBF32_LE); - - default: - if (nFormat == MemFormat::Dec) - return std::to_wstring(nValue); - - const auto nBits = MemSizeBits(nSize); - switch (nBits / 8) - { - default: return ra::StringPrintf(L"%x", nValue); - case 1: return ra::StringPrintf(L"%02x", nValue); - case 2: return ra::StringPrintf(L"%04x", nValue); - case 3: return ra::StringPrintf(L"%06x", nValue); - case 4: return ra::StringPrintf(L"%08x", nValue); - } - } -} - const char* ValueFormatToString(ValueFormat nFormat) noexcept { switch (nFormat) @@ -138,109 +75,5 @@ ValueFormat ValueFormatFromString(const std::string& sFormat) noexcept return ra::itoe(rc_parse_format(sFormat.c_str())); } -unsigned FloatToU32(float fValue, MemSize nFloatType) noexcept -{ - // this leverages the fact that Windows uses IEE754 floats - union u - { - float fValue; - unsigned nValue; - } uUnion; - - uUnion.fValue = fValue; - - switch (nFloatType) - { - case MemSize::Float: - return uUnion.nValue; - - case MemSize::FloatBigEndian: - return ReverseBytes(uUnion.nValue); - - case MemSize::Double32: - case MemSize::Double32BigEndian: - { - // double has 3 extra bits for the exponent - const int32_t exponent = ra::to_signed((uUnion.nValue >> 23) & 0xFF) - 127 + 1023; // change exponent base from 127 to 1023 - const unsigned nValue = ((uUnion.nValue & 0x007FFFFF) >> 3) | // mantissa is shifted three bits right - ((ra::to_unsigned(exponent) & 0x7FF) << 20) | // adjusted exponent - ((uUnion.nValue & 0x80000000)); // sign is unmoved - - return (nFloatType == MemSize::Double32) ? nValue : ReverseBytes(nValue); - } - - case MemSize::MBF32: - case MemSize::MBF32LE: - { - // MBF32 puts the sign after the exponent, uses a 129 base instead of 127, and stores in big endian - unsigned nValue = ((uUnion.nValue & 0x007FFFFF)) | // mantissa is unmoved - ((uUnion.nValue & 0x7F800000) << 1) | // exponent is shifted one bit left - ((uUnion.nValue & 0x80000000) >> 8); // sign is shifted eight bits right - - nValue += 0x02000000; // adjust to 129 base - return (nFloatType == MemSize::MBF32LE) ? nValue : ReverseBytes(nValue); - } - - default: - return 0; - } -} - -float U32ToFloat(unsigned nValue, MemSize nFloatType) noexcept -{ - // this leverages the fact that Windows uses IEE754 floats - union u - { - float fValue; - unsigned nValue; - } uUnion{}; - - switch (nFloatType) - { - case MemSize::FloatBigEndian: - nValue = ReverseBytes(nValue); - __fallthrough; // to MemSize::Float - - case MemSize::Float: - uUnion.nValue = nValue; - break; - - case MemSize::Double32BigEndian: - nValue = ReverseBytes(nValue); - __fallthrough; // to MemSize::Double32 - - case MemSize::Double32: - { - // double has 3 extra bits for the exponent, and uses a 1023 base instead of a 127 base - const int32_t exponent = ra::to_signed((uUnion.nValue >> 20) & 0x7FF) - 1023 + 127; // change exponent base from 1023 to 127 - nValue = ((uUnion.nValue & 0x000FFFFF) << 3) | // mantissa is shifted three bits left - ((ra::to_unsigned(exponent) & 0xFF) << 23) | // adjusted exponent - ((uUnion.nValue & 0x80000000)); // sign is unmoved - - uUnion.nValue = nValue; - break; - } - - case MemSize::MBF32: - nValue = ReverseBytes(nValue); - __fallthrough; // to MemSize::MBF32LE - - case MemSize::MBF32LE: - // MBF32 puts the sign after the exponent, uses a 129 base instead of 127, and stores in big endian - nValue -= 0x02000000; // adjust to 129 base - nValue = ((nValue & 0x007FFFFF)) | // mantissa is unmoved - ((nValue & 0xFF000000) >> 1) | // exponent is shifted one bit right - ((nValue & 0x00800000) << 8); // sign is shifted eight bits left - - uUnion.nValue = nValue; - break; - - default: - return 0.0f; - } - - return uUnion.fValue; -} - } /* namespace data */ } /* namespace ra */ diff --git a/src/RA_Defs.h b/src/RA_Defs.h index b4a4fd70e..9dcfafa98 100644 --- a/src/RA_Defs.h +++ b/src/RA_Defs.h @@ -34,6 +34,7 @@ using namespace std::string_literals; #endif // RA_EXPORTS #include "data\Types.hh" +#include "data\Memory.hh" #define RA_DIR_OVERLAY L"Overlay\\" #define RA_DIR_BASE L"RACache\\" @@ -165,8 +166,8 @@ class ResizeContent #endif namespace ra { -_NODISCARD std::string ByteAddressToString(_In_ ByteAddress nAddr); -_NODISCARD ByteAddress ByteAddressFromString(_In_ const std::string& sByteAddress); +_NODISCARD std::string ByteAddressToString(_In_ ra::data::ByteAddress nAddr); +_NODISCARD ra::data::ByteAddress ByteAddressFromString(_In_ const std::string& sByteAddress); } // namespace ra #endif // !RA_DEFS_H diff --git a/src/RA_Integration.vcxproj b/src/RA_Integration.vcxproj index ed3422345..4cf62937f 100644 --- a/src/RA_Integration.vcxproj +++ b/src/RA_Integration.vcxproj @@ -73,12 +73,12 @@ + - diff --git a/src/RA_Integration.vcxproj.filters b/src/RA_Integration.vcxproj.filters index 376bdcf8f..f27658c0f 100644 --- a/src/RA_Integration.vcxproj.filters +++ b/src/RA_Integration.vcxproj.filters @@ -309,9 +309,6 @@ Services - - Data\Context - Data\Context @@ -423,6 +420,9 @@ Services\Impl + + Data\Context + @@ -842,9 +842,6 @@ Services - - Data\Context - Data\Context @@ -1040,6 +1037,9 @@ Services\Impl + + Data\Context + diff --git a/src/api/DeleteCodeNote.hh b/src/api/DeleteCodeNote.hh index 93db1a48b..e863053f4 100644 --- a/src/api/DeleteCodeNote.hh +++ b/src/api/DeleteCodeNote.hh @@ -4,7 +4,7 @@ #include "ApiCall.hh" -#include "data\Types.hh" +#include "data\Memory.hh" namespace ra { namespace api { @@ -22,7 +22,7 @@ public: struct Request : ApiRequestBase { unsigned int GameId{ 0U }; - ra::ByteAddress Address{ 0U }; + ra::data::ByteAddress Address{ 0U }; using Callback = std::function; diff --git a/src/api/FetchCodeNotes.hh b/src/api/FetchCodeNotes.hh index 5827504c9..e9fe17bba 100644 --- a/src/api/FetchCodeNotes.hh +++ b/src/api/FetchCodeNotes.hh @@ -4,7 +4,7 @@ #include "ApiCall.hh" -#include "data\Types.hh" +#include "data\Memory.hh" namespace ra { namespace api { @@ -18,7 +18,7 @@ public: { struct CodeNote { - ra::ByteAddress Address{ 0U }; + ra::data::ByteAddress Address{ 0U }; std::wstring Note; std::string Author; }; diff --git a/src/api/UpdateCodeNote.hh b/src/api/UpdateCodeNote.hh index ba712f526..156c4bc22 100644 --- a/src/api/UpdateCodeNote.hh +++ b/src/api/UpdateCodeNote.hh @@ -22,7 +22,7 @@ public: struct Request : ApiRequestBase { unsigned int GameId{ 0U }; - ra::ByteAddress Address{ 0U }; + ra::data::ByteAddress Address{ 0U }; std::wstring Note; using Callback = std::function; diff --git a/src/api/impl/ConnectedServer.cpp b/src/api/impl/ConnectedServer.cpp index 23e7426e5..e97b94edf 100644 --- a/src/api/impl/ConnectedServer.cpp +++ b/src/api/impl/ConnectedServer.cpp @@ -610,7 +610,7 @@ void ConnectedServer::ProcessCodeNotes(FetchCodeNotes::Response& response, const #pragma warning(pop) static void SetCodeNote(ApiResponseBase& response, const char* sApiName, - unsigned nGameId, ra::ByteAddress nAddress, const char* sNote) + unsigned nGameId, ra::data::ByteAddress nAddress, const char* sNote) { rc_api_update_code_note_request_t api_params; memset(&api_params, 0, sizeof(api_params)); diff --git a/src/data/Types.hh b/src/data/Types.hh index ed2cb3c2a..c552163da 100644 --- a/src/data/Types.hh +++ b/src/data/Types.hh @@ -2,39 +2,6 @@ #define RA_DATA_TYPES_H #pragma once -enum class MemSize : uint8_t -{ - Bit_0, - Bit_1, - Bit_2, - Bit_3, - Bit_4, - Bit_5, - Bit_6, - Bit_7, - Nibble_Lower, - Nibble_Upper, - EightBit, - SixteenBit, - TwentyFourBit, - ThirtyTwoBit, - BitCount, - SixteenBitBigEndian, - TwentyFourBitBigEndian, - ThirtyTwoBitBigEndian, - Float, - MBF32, - MBF32LE, - FloatBigEndian, - Double32, - Double32BigEndian, - - // extended sizes not supported by rcheevos - Unknown, - Text, - Array -}; - enum class ComparisonType : uint8_t { Equals, @@ -47,14 +14,6 @@ enum class ComparisonType : uint8_t namespace ra { -enum class MemFormat : uint8_t -{ - Hex, - Dec, - Unknown, -}; - -using ByteAddress = uint32_t; using AchievementID = uint32_t; using LeaderboardID = uint32_t; @@ -87,197 +46,6 @@ enum class ValueFormat : uint8_t const char* ValueFormatToString(ValueFormat nFormat) noexcept; ValueFormat ValueFormatFromString(const std::string& sFormat) noexcept; -constexpr bool MemSizeIsFloat(MemSize nSize) -{ - switch (nSize) - { - case MemSize::Float: - case MemSize::FloatBigEndian: - case MemSize::MBF32: - case MemSize::MBF32LE: - case MemSize::Double32: - case MemSize::Double32BigEndian: - return true; - - default: - return false; - } -} - -constexpr bool IsBigEndian(MemSize nSize) -{ - switch (nSize) - { - case MemSize::SixteenBitBigEndian: - case MemSize::TwentyFourBitBigEndian: - case MemSize::ThirtyTwoBitBigEndian: - case MemSize::FloatBigEndian: - case MemSize::Double32BigEndian: - case MemSize::MBF32: - return true; - - default: - return false; - } -} - -constexpr uint32_t ReverseBytes(uint32_t nValue) noexcept -{ - return ((nValue & 0xFF000000) >> 24) | - ((nValue & 0x00FF0000) >> 8) | - ((nValue & 0x0000FF00) << 8) | - ((nValue & 0x000000FF) << 24); -} - -constexpr unsigned int MemSizeBits(MemSize nSize) -{ - switch (nSize) - { - case MemSize::ThirtyTwoBit: - case MemSize::ThirtyTwoBitBigEndian: - case MemSize::Float: - case MemSize::FloatBigEndian: - case MemSize::MBF32: - case MemSize::MBF32LE: - case MemSize::Double32: - case MemSize::Double32BigEndian: - return 32; - - case MemSize::EightBit: - return 8; - - case MemSize::SixteenBit: - case MemSize::SixteenBitBigEndian: - return 16; - - case MemSize::TwentyFourBit: - case MemSize::TwentyFourBitBigEndian: - return 24; - - case MemSize::BitCount: // value will be 0-8 - case MemSize::Nibble_Lower: - case MemSize::Nibble_Upper: - return 4; - - case MemSize::Bit_0: - case MemSize::Bit_1: - case MemSize::Bit_2: - case MemSize::Bit_3: - case MemSize::Bit_4: - case MemSize::Bit_5: - case MemSize::Bit_6: - case MemSize::Bit_7: - return 1; - - default: - return 0; - } -} - -constexpr unsigned int MemSizeMax(MemSize nSize) -{ - const auto nBits = ra::data::MemSizeBits(nSize); - if (nBits >= 32) - return 0xFFFFFFFF; - - return (1 << nBits) - 1; -} - -constexpr unsigned int MemSizeBytes(MemSize nSize) -{ - switch (nSize) - { - case MemSize::ThirtyTwoBit: - case MemSize::ThirtyTwoBitBigEndian: - case MemSize::Float: - case MemSize::FloatBigEndian: - case MemSize::MBF32: - case MemSize::MBF32LE: - return 4; - - case MemSize::SixteenBit: - case MemSize::SixteenBitBigEndian: - return 2; - - case MemSize::TwentyFourBit: - case MemSize::TwentyFourBitBigEndian: - return 3; - - case MemSize::Text: - return 0; - - default: - return 1; - } -} - -std::wstring MemSizeFormat(unsigned nValue, MemSize nSize, MemFormat nFormat); - -constexpr const wchar_t* MemSizeString(MemSize nSize) -{ - switch (nSize) - { - case MemSize::Bit_0: - return L"Bit0"; - case MemSize::Bit_1: - return L"Bit1"; - case MemSize::Bit_2: - return L"Bit2"; - case MemSize::Bit_3: - return L"Bit3"; - case MemSize::Bit_4: - return L"Bit4"; - case MemSize::Bit_5: - return L"Bit5"; - case MemSize::Bit_6: - return L"Bit6"; - case MemSize::Bit_7: - return L"Bit7"; - case MemSize::Nibble_Lower: - return L"Lower4"; - case MemSize::Nibble_Upper: - return L"Upper4"; - case MemSize::EightBit: - return L"8-bit"; - case MemSize::SixteenBit: - return L"16-bit"; - case MemSize::TwentyFourBit: - return L"24-bit"; - case MemSize::ThirtyTwoBit: - return L"32-bit"; - case MemSize::BitCount: - return L"BitCount"; - case MemSize::SixteenBitBigEndian: - return L"16-bit BE"; - case MemSize::TwentyFourBitBigEndian: - return L"24-bit BE"; - case MemSize::ThirtyTwoBitBigEndian: - return L"32-bit BE"; - case MemSize::Float: - return L"Float"; - case MemSize::MBF32: - return L"MBF32"; - case MemSize::MBF32LE: - return L"MBF32 LE"; - case MemSize::FloatBigEndian: - return L"Float BE"; - case MemSize::Double32: - return L"Double32"; - case MemSize::Double32BigEndian: - return L"Double32 BE"; - case MemSize::Text: - return L"ASCII"; - case MemSize::Array: - return L"Array"; - default: - case MemSize::Unknown: - return L"Unknown"; - } -} - -unsigned FloatToU32(float fValue, MemSize nFloatType) noexcept; -float U32ToFloat(unsigned nValue, MemSize nFloatType) noexcept; - } // namespace data } // namespace ra diff --git a/src/data/context/ConsoleContext.cpp b/src/data/context/ConsoleContext.cpp index e0caaee8d..5d5165985 100644 --- a/src/data/context/ConsoleContext.cpp +++ b/src/data/context/ConsoleContext.cpp @@ -61,7 +61,7 @@ ConsoleContext::ConsoleContext(ConsoleID nId) noexcept } } -const ConsoleContext::MemoryRegion* ConsoleContext::GetMemoryRegion(ra::ByteAddress nAddress) const +const ConsoleContext::MemoryRegion* ConsoleContext::GetMemoryRegion(ra::data::ByteAddress nAddress) const { const auto& vRegions = MemoryRegions(); gsl::index nStart = 0; @@ -81,7 +81,7 @@ const ConsoleContext::MemoryRegion* ConsoleContext::GetMemoryRegion(ra::ByteAddr return nullptr; } -ra::ByteAddress ConsoleContext::ByteAddressFromRealAddress(ra::ByteAddress nRealAddress) const noexcept +ra::data::ByteAddress ConsoleContext::ByteAddressFromRealAddress(ra::data::ByteAddress nRealAddress) const noexcept { for (const auto& pRegion : m_vRegions) { @@ -152,7 +152,7 @@ ra::ByteAddress ConsoleContext::ByteAddressFromRealAddress(ra::ByteAddress nReal return 0xFFFFFFFF; } -ra::ByteAddress ConsoleContext::RealAddressFromByteAddress(ra::ByteAddress nByteAddress) const noexcept +ra::data::ByteAddress ConsoleContext::RealAddressFromByteAddress(ra::data::ByteAddress nByteAddress) const noexcept { for (const auto& pRegion : m_vRegions) { @@ -163,7 +163,7 @@ ra::ByteAddress ConsoleContext::RealAddressFromByteAddress(ra::ByteAddress nByte return 0xFFFFFFFF; } -bool ConsoleContext::GetRealAddressConversion(MemSize* nReadSize, uint32_t* nMask, uint32_t* nOffset) const +bool ConsoleContext::GetRealAddressConversion(Memory::Size* nReadSize, uint32_t* nMask, uint32_t* nOffset) const { Expects(nReadSize != nullptr); Expects(nMask != nullptr); @@ -175,26 +175,26 @@ bool ConsoleContext::GetRealAddressConversion(MemSize* nReadSize, uint32_t* nMas case ConsoleID::DSi: case ConsoleID::N64: case ConsoleID::PlayStation: - *nReadSize = MemSize::TwentyFourBit; + *nReadSize = Memory::Size::TwentyFourBit; *nMask = 0xFFFFFFFF; *nOffset = 0; return true; case ConsoleID::GameCube: - *nReadSize = MemSize::ThirtyTwoBitBigEndian; + *nReadSize = Memory::Size::ThirtyTwoBitBigEndian; *nMask = 0x01FFFFFF; *nOffset = 0; return true; case ConsoleID::WII: - *nReadSize = MemSize::ThirtyTwoBitBigEndian; + *nReadSize = Memory::Size::ThirtyTwoBitBigEndian; *nMask = 0x1FFFFFFF; *nOffset = 0; return true; case ConsoleID::PlayStation2: case ConsoleID::PSP: - *nReadSize = MemSize::ThirtyTwoBit; + *nReadSize = Memory::Size::ThirtyTwoBit; *nMask = 0x01FFFFFF; *nOffset = 0; return true; @@ -206,7 +206,7 @@ bool ConsoleContext::GetRealAddressConversion(MemSize* nReadSize, uint32_t* nMas // However, most developers who have implemented sets just do a 24-bit // read _and_ use a +0x8000 offset when necessary. As these offsets are // encoded in the code notes, we shouldn't provide an explicit offset here. - *nReadSize = MemSize::TwentyFourBit; + *nReadSize = Memory::Size::TwentyFourBit; *nMask = 0x00FFFFFF; *nOffset = 0; return true; @@ -218,22 +218,22 @@ bool ConsoleContext::GetRealAddressConversion(MemSize* nReadSize, uint32_t* nMas { if (m_nMaxAddress > 0x00FFFFFF) { - *nReadSize = MemSize::ThirtyTwoBit; + *nReadSize = Memory::Size::ThirtyTwoBit; *nMask = 0xFFFFFFFF; } else if (m_nMaxAddress > 0x0000FFFF) { - *nReadSize = MemSize::TwentyFourBit; + *nReadSize = Memory::Size::TwentyFourBit; *nMask = 0x00FFFFFF; } else if (m_nMaxAddress > 0x000000FF) { - *nReadSize = MemSize::SixteenBit; + *nReadSize = Memory::Size::SixteenBit; *nMask = 0x0000FFFF; } else { - *nReadSize = MemSize::EightBit; + *nReadSize = Memory::Size::EightBit; *nMask = 0x000000FF; } @@ -242,7 +242,7 @@ bool ConsoleContext::GetRealAddressConversion(MemSize* nReadSize, uint32_t* nMas } } - *nReadSize = MemSize::ThirtyTwoBit; + *nReadSize = Memory::Size::ThirtyTwoBit; *nMask = 0xFFFFFFFF; *nOffset = 0; return false; diff --git a/src/data/context/ConsoleContext.hh b/src/data/context/ConsoleContext.hh index 2e07494be..c5d3e6059 100644 --- a/src/data/context/ConsoleContext.hh +++ b/src/data/context/ConsoleContext.hh @@ -3,7 +3,7 @@ #pragma once #include "RAInterface\RA_Consoles.h" -#include "data\Types.hh" +#include "data\Memory.hh" #include "util\GSL.hh" #include @@ -77,9 +77,9 @@ public: struct MemoryRegion { - ra::ByteAddress StartAddress = 0U; - ra::ByteAddress EndAddress = 0U; - ra::ByteAddress RealAddress = 0U; + ra::data::ByteAddress StartAddress = 0U; + ra::data::ByteAddress EndAddress = 0U; + ra::data::ByteAddress RealAddress = 0U; AddressType Type = AddressType::Unknown; std::string Description; }; @@ -93,19 +93,19 @@ public: /// Gets the memory region containing the specified address. /// /// Matching , nullptr if not found. - const MemoryRegion* GetMemoryRegion(ra::ByteAddress nAddress) const; + const MemoryRegion* GetMemoryRegion(ra::data::ByteAddress nAddress) const; /// /// Converts a real address into the "RetroAchievements" address where the data should be. /// /// Converted address, or 0xFFFFFFFF if conversion could not be completed. - ra::ByteAddress ByteAddressFromRealAddress(ra::ByteAddress nRealAddress) const noexcept; + ra::data::ByteAddress ByteAddressFromRealAddress(ra::data::ByteAddress nRealAddress) const noexcept; /// /// Converts an "RetroAchievements" address into a real address where the data might be found. /// /// Converted address, or 0xFFFFFFFF if conversion could not be completed. - ra::ByteAddress RealAddressFromByteAddress(ra::ByteAddress nRealAddress) const noexcept; + ra::data::ByteAddress RealAddressFromByteAddress(ra::data::ByteAddress nRealAddress) const noexcept; /// /// Gets the read size and mask to use for reading a pointer from memory and converting it to @@ -115,19 +115,19 @@ public: /// [out] the mask to apply (if 0xFFFFFFFF, no mask is necessary). /// [out] the offset to apply (if 0, no offset is necessary). /// true if a mapping was found, false if not. - bool GetRealAddressConversion(MemSize* nReadSize, uint32_t* nMask, uint32_t* nOffset) const; + bool GetRealAddressConversion(Memory::Size* nReadSize, uint32_t* nMask, uint32_t* nOffset) const; /// /// Gets the maximum valid address for the console. /// - ra::ByteAddress MaxAddress() const noexcept { return m_nMaxAddress; } + ra::data::ByteAddress MaxAddress() const noexcept { return m_nMaxAddress; } protected: ConsoleID m_nId{}; std::wstring m_sName; std::vector m_vRegions; - ra::ByteAddress m_nMaxAddress = 0; + ra::data::ByteAddress m_nMaxAddress = 0; }; } // namespace context diff --git a/src/data/context/EmulatorContext.cpp b/src/data/context/EmulatorContext.cpp index 6af238dea..cba89664c 100644 --- a/src/data/context/EmulatorContext.cpp +++ b/src/data/context/EmulatorContext.cpp @@ -34,7 +34,7 @@ namespace ra { namespace data { namespace context { -static std::string FormatAddressLarge(ra::ByteAddress nAddress) +static std::string FormatAddressLarge(ra::data::ByteAddress nAddress) { std::string sAddress; sAddress.resize(10); @@ -42,7 +42,7 @@ static std::string FormatAddressLarge(ra::ByteAddress nAddress) return sAddress; } -static std::string FormatAddressMedium(ra::ByteAddress nAddress) +static std::string FormatAddressMedium(ra::data::ByteAddress nAddress) { if (nAddress & 0xFF000000) return FormatAddressLarge(nAddress); @@ -53,7 +53,7 @@ static std::string FormatAddressMedium(ra::ByteAddress nAddress) return sAddress; } -static std::string FormatAddressSmall(ra::ByteAddress nAddress) +static std::string FormatAddressSmall(ra::data::ByteAddress nAddress) { if (nAddress & 0xFFFF0000) return FormatAddressMedium(nAddress); @@ -692,7 +692,7 @@ bool EmulatorContext::HasInvalidRegions() const noexcept return false; } -bool EmulatorContext::IsValidAddress(ra::ByteAddress nAddress) const noexcept +bool EmulatorContext::IsValidAddress(ra::data::ByteAddress nAddress) const noexcept { for (const auto& pBlock : m_vMemoryBlocks) { @@ -704,7 +704,7 @@ bool EmulatorContext::IsValidAddress(ra::ByteAddress nAddress) const noexcept break; } - nAddress -= gsl::narrow_cast(pBlock.size); + nAddress -= gsl::narrow_cast(pBlock.size); } return false; @@ -733,7 +733,7 @@ void EmulatorContext::AssertIsOnDoFrameThread() const #endif } -uint8_t EmulatorContext::ReadMemoryByte(ra::ByteAddress nAddress) const +uint8_t EmulatorContext::ReadMemoryByte(ra::data::ByteAddress nAddress) const { AssertIsOnDoFrameThread(); @@ -747,13 +747,13 @@ uint8_t EmulatorContext::ReadMemoryByte(ra::ByteAddress nAddress) const break; } - nAddress -= gsl::narrow_cast(pBlock.size); + nAddress -= gsl::narrow_cast(pBlock.size); } return 0; } -uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, uint8_t pBuffer[], size_t nCount, +uint32_t EmulatorContext::ReadMemory(ra::data::ByteAddress nAddress, uint8_t pBuffer[], size_t nCount, const EmulatorContext::MemoryBlock& pBlock) { Expects(pBuffer != nullptr); @@ -818,7 +818,7 @@ uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, uint8_t pBuffer[] } _Use_decl_annotations_ -uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, uint8_t pBuffer[], size_t nCount) const +uint32_t EmulatorContext::ReadMemory(ra::data::ByteAddress nAddress, uint8_t pBuffer[], size_t nCount) const { AssertIsOnDoFrameThread(); @@ -829,7 +829,7 @@ uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, uint8_t pBuffer[] { if (nAddress >= pBlock.size) { - nAddress -= gsl::narrow_cast(pBlock.size); + nAddress -= gsl::narrow_cast(pBlock.size); continue; } @@ -853,76 +853,76 @@ uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, uint8_t pBuffer[] return nBytesRead; } -uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, MemSize nSize) const +uint32_t EmulatorContext::ReadMemory(ra::data::ByteAddress nAddress, Memory::Size nSize) const { switch (nSize) { - case MemSize::Bit_0: + case Memory::Size::Bit_0: return (ReadMemoryByte(nAddress) & 0x01); - case MemSize::Bit_1: + case Memory::Size::Bit_1: return (ReadMemoryByte(nAddress) & 0x02) ? 1 : 0; - case MemSize::Bit_2: + case Memory::Size::Bit_2: return (ReadMemoryByte(nAddress) & 0x04) ? 1 : 0; - case MemSize::Bit_3: + case Memory::Size::Bit_3: return (ReadMemoryByte(nAddress) & 0x08) ? 1 : 0; - case MemSize::Bit_4: + case Memory::Size::Bit_4: return (ReadMemoryByte(nAddress) & 0x10) ? 1 : 0; - case MemSize::Bit_5: + case Memory::Size::Bit_5: return (ReadMemoryByte(nAddress) & 0x20) ? 1 : 0; - case MemSize::Bit_6: + case Memory::Size::Bit_6: return (ReadMemoryByte(nAddress) & 0x40) ? 1 : 0; - case MemSize::Bit_7: + case Memory::Size::Bit_7: return (ReadMemoryByte(nAddress) & 0x80) ? 1 : 0; - case MemSize::Nibble_Lower: + case Memory::Size::Nibble_Lower: return (ReadMemoryByte(nAddress) & 0x0F); - case MemSize::Nibble_Upper: + case Memory::Size::Nibble_Upper: return ((ReadMemoryByte(nAddress) >> 4) & 0x0F); - case MemSize::EightBit: + case Memory::Size::EightBit: return ReadMemoryByte(nAddress); default: - case MemSize::SixteenBit: + case Memory::Size::SixteenBit: { uint8_t buffer[2]; ReadMemory(nAddress, buffer, 2); return buffer[0] | (buffer[1] << 8); } - case MemSize::TwentyFourBit: + case Memory::Size::TwentyFourBit: { uint8_t buffer[3]; ReadMemory(nAddress, buffer, 3); return buffer[0] | (buffer[1] << 8) | (buffer[2] << 16); } - case MemSize::Float: - case MemSize::FloatBigEndian: - case MemSize::Double32: - case MemSize::Double32BigEndian: - case MemSize::MBF32: - case MemSize::MBF32LE: - case MemSize::ThirtyTwoBit: + case Memory::Size::Float: + case Memory::Size::FloatBigEndian: + case Memory::Size::Double32: + case Memory::Size::Double32BigEndian: + case Memory::Size::MBF32: + case Memory::Size::MBF32LE: + case Memory::Size::ThirtyTwoBit: { uint8_t buffer[4]; ReadMemory(nAddress, buffer, 4); return buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24); } - case MemSize::SixteenBitBigEndian: + case Memory::Size::SixteenBitBigEndian: { uint8_t buffer[2]; ReadMemory(nAddress, buffer, 2); return buffer[1] | (buffer[0] << 8); } - case MemSize::TwentyFourBitBigEndian: + case Memory::Size::TwentyFourBitBigEndian: { uint8_t buffer[3]; ReadMemory(nAddress, buffer, 3); return buffer[2] | (buffer[1] << 8) | (buffer[0] << 16); } - case MemSize::ThirtyTwoBitBigEndian: + case Memory::Size::ThirtyTwoBitBigEndian: { uint8_t buffer[4]; ReadMemory(nAddress, buffer, 4); return buffer[3] | (buffer[2] << 8) | (buffer[1] << 16) | (buffer[0] << 24); } - case MemSize::BitCount: + case Memory::Size::BitCount: { const uint8_t nValue = ReadMemoryByte(nAddress); static const std::array nBitsSet = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 }; @@ -931,7 +931,7 @@ uint32_t EmulatorContext::ReadMemory(ra::ByteAddress nAddress, MemSize nSize) co } } -void EmulatorContext::WriteMemory(ra::ByteAddress nAddress, const uint8_t* pBytes, size_t nBytes) const +void EmulatorContext::WriteMemory(ra::data::ByteAddress nAddress, const uint8_t* pBytes, size_t nBytes) const { Expects(pBytes != nullptr); size_t nBytesWritten = 0; @@ -964,7 +964,7 @@ void EmulatorContext::WriteMemory(ra::ByteAddress nAddress, const uint8_t* pByte } } - nBlockAddress -= gsl::narrow_cast(pBlock.size); + nBlockAddress -= gsl::narrow_cast(pBlock.size); } if (nBytesWritten > 0) @@ -982,12 +982,12 @@ void EmulatorContext::WriteMemory(ra::ByteAddress nAddress, const uint8_t* pByte } } -void EmulatorContext::WriteMemoryByte(ra::ByteAddress nAddress, uint8_t nValue) const +void EmulatorContext::WriteMemoryByte(ra::data::ByteAddress nAddress, uint8_t nValue) const { WriteMemory(nAddress, &nValue, 1); } -void EmulatorContext::WriteMemory(ra::ByteAddress nAddress, MemSize nSize, uint32_t nValue) const +void EmulatorContext::WriteMemory(ra::data::ByteAddress nAddress, Memory::Size nSize, uint32_t nValue) const { union { @@ -998,89 +998,89 @@ void EmulatorContext::WriteMemory(ra::ByteAddress nAddress, MemSize nSize, uint3 switch (nSize) { - case MemSize::EightBit: + case Memory::Size::EightBit: WriteMemory(nAddress, u.u8, 1); break; - case MemSize::SixteenBit: + case Memory::Size::SixteenBit: WriteMemory(nAddress, u.u8, 2); break; - case MemSize::TwentyFourBit: + case Memory::Size::TwentyFourBit: WriteMemory(nAddress, u.u8, 3); break; - case MemSize::ThirtyTwoBit: + case Memory::Size::ThirtyTwoBit: // already little endian WriteMemory(nAddress, u.u8, 4); break; - case MemSize::Float: - case MemSize::FloatBigEndian: - case MemSize::Double32: - case MemSize::Double32BigEndian: - case MemSize::MBF32: - case MemSize::MBF32LE: + case Memory::Size::Float: + case Memory::Size::FloatBigEndian: + case Memory::Size::Double32: + case Memory::Size::Double32BigEndian: + case Memory::Size::MBF32: + case Memory::Size::MBF32LE: // assume the value has already been encoded into a 32-bit little endian value WriteMemory(nAddress, u.u8, 4); break; - case MemSize::SixteenBitBigEndian: + case Memory::Size::SixteenBitBigEndian: u.u8[3] = u.u8[0]; u.u8[2] = u.u8[1]; WriteMemory(nAddress, &u.u8[2], 2); break; - case MemSize::TwentyFourBitBigEndian: + case Memory::Size::TwentyFourBitBigEndian: u.u8[3] = u.u8[0]; u.u8[0] = u.u8[2]; u.u8[2] = u.u8[3]; WriteMemory(nAddress, u.u8, 3); break; - case MemSize::ThirtyTwoBitBigEndian: - u.u32 = ReverseBytes(nValue); + case Memory::Size::ThirtyTwoBitBigEndian: + u.u32 = ra::data::Memory::ReverseBytes(nValue); WriteMemory(nAddress, u.u8, 4); break; - case MemSize::Bit_0: + case Memory::Size::Bit_0: u.u32 = (ReadMemoryByte(nAddress) & ~0x01) | (nValue & 1); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_1: + case Memory::Size::Bit_1: u.u32 = (ReadMemoryByte(nAddress) & ~0x02) | ((nValue & 1) << 1); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_2: + case Memory::Size::Bit_2: u.u32 = (ReadMemoryByte(nAddress) & ~0x04) | ((nValue & 1) << 2); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_3: + case Memory::Size::Bit_3: u.u32 = (ReadMemoryByte(nAddress) & ~0x08) | ((nValue & 1) << 3); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_4: + case Memory::Size::Bit_4: u.u32 = (ReadMemoryByte(nAddress) & ~0x10) | ((nValue & 1) << 4); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_5: + case Memory::Size::Bit_5: u.u32 = (ReadMemoryByte(nAddress) & ~0x20) | ((nValue & 1) << 5); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_6: + case Memory::Size::Bit_6: u.u32 = (ReadMemoryByte(nAddress) & ~0x40) | ((nValue & 1) << 6); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Bit_7: + case Memory::Size::Bit_7: u.u32 = (ReadMemoryByte(nAddress) & ~0x80) | ((nValue & 1) << 7); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Nibble_Lower: + case Memory::Size::Nibble_Lower: u.u32 = (ReadMemoryByte(nAddress) & ~0x0F) | (nValue & 0x0F); WriteMemory(nAddress, u.u8, 1); break; - case MemSize::Nibble_Upper: + case Memory::Size::Nibble_Upper: u.u32 = (ReadMemoryByte(nAddress) & ~0xF0) | ((nValue & 0x0F) << 4); WriteMemory(nAddress, u.u8, 1); break; @@ -1126,21 +1126,21 @@ bool EmulatorContext::IsMemoryInsecure() const _CONSTANT_VAR MAX_BLOCK_SIZE = 256U * 1024; // 256K -void EmulatorContext::CaptureMemory(std::vector& vBlocks, ra::ByteAddress nAddress, uint32_t nCount, uint32_t nPadding) const +void EmulatorContext::CaptureMemory(std::vector& vBlocks, ra::data::ByteAddress nAddress, uint32_t nCount, uint32_t nPadding) const { - ra::ByteAddress nAdjustedAddress = nAddress; + ra::data::ByteAddress nAdjustedAddress = nAddress; for (const auto& pMemoryBlock : m_vMemoryBlocks) { if (nAdjustedAddress >= pMemoryBlock.size) { - nAdjustedAddress -= gsl::narrow_cast(pMemoryBlock.size); + nAdjustedAddress -= gsl::narrow_cast(pMemoryBlock.size); continue; } if (!pMemoryBlock.read && !pMemoryBlock.readBlock) { nCount -= gsl::narrow_cast(pMemoryBlock.size); - nAddress += gsl::narrow_cast(pMemoryBlock.size); + nAddress += gsl::narrow_cast(pMemoryBlock.size); nAdjustedAddress = 0; continue; } diff --git a/src/data/context/EmulatorContext.hh b/src/data/context/EmulatorContext.hh index 837e667b3..5cba48d43 100644 --- a/src/data/context/EmulatorContext.hh +++ b/src/data/context/EmulatorContext.hh @@ -210,32 +210,32 @@ public: /// /// Determines if the specified address is valid. /// - bool IsValidAddress(ra::ByteAddress nAddress) const noexcept; + bool IsValidAddress(ra::data::ByteAddress nAddress) const noexcept; /// /// Reads memory from the emulator. /// - uint32_t ReadMemory(ra::ByteAddress nAddress, MemSize nSize) const; + uint32_t ReadMemory(ra::data::ByteAddress nAddress, Memory::Size nSize) const; /// /// Reads memory from the emulator. /// - uint8_t ReadMemoryByte(ra::ByteAddress nAddress) const; + uint8_t ReadMemoryByte(ra::data::ByteAddress nAddress) const; /// /// Reads memory from the emulator. /// - uint32_t ReadMemory(ra::ByteAddress nAddress, _Out_writes_(nCount) uint8_t pBuffer[], size_t nCount) const; + uint32_t ReadMemory(ra::data::ByteAddress nAddress, _Out_writes_(nCount) uint8_t pBuffer[], size_t nCount) const; /// /// Writes memory to the emulator. /// - void WriteMemoryByte(ra::ByteAddress nAddress, uint8_t nValue) const; + void WriteMemoryByte(ra::data::ByteAddress nAddress, uint8_t nValue) const; /// /// Writes memory to the emulator. /// - void WriteMemory(ra::ByteAddress nAddress, MemSize nSize, uint32_t nValue) const; + void WriteMemory(ra::data::ByteAddress nAddress, Memory::Size nSize, uint32_t nValue) const; class DispatchesReadMemory { @@ -246,12 +246,12 @@ public: /// /// Captures the current state of memory /// - void CaptureMemory(std::vector& vMemBlocks, ra::ByteAddress nAddress, uint32_t nCount, uint32_t nPadding) const; + void CaptureMemory(std::vector& vMemBlocks, ra::data::ByteAddress nAddress, uint32_t nCount, uint32_t nPadding) const; /// /// Converts an address to a displayable string. /// - std::string FormatAddress(ra::ByteAddress nAddress) const { return m_fFormatAddress(nAddress); } + std::string FormatAddress(ra::data::ByteAddress nAddress) const { return m_fFormatAddress(nAddress); } /// /// Gets whether or not memory has been modified. @@ -284,7 +284,7 @@ public: NotifyTarget& operator=(NotifyTarget&&) noexcept = default; virtual void OnTotalMemorySizeChanged() noexcept(false) {} - virtual void OnByteWritten(ra::ByteAddress, uint8_t) noexcept(false) {} + virtual void OnByteWritten(ra::data::ByteAddress, uint8_t) noexcept(false) {} }; void AddNotifyTarget(NotifyTarget& pTarget) noexcept { m_vNotifyTargets.Add(pTarget); } @@ -293,7 +293,7 @@ public: private: mutable ra::data::NotifyTargetSet m_vNotifyTargets; - void WriteMemory(ra::ByteAddress nAddress, const uint8_t* pBytes, size_t nByteCount) const; + void WriteMemory(ra::data::ByteAddress nAddress, const uint8_t* pBytes, size_t nByteCount) const; protected: void UpdateUserAgent(); @@ -317,7 +317,7 @@ protected: std::function m_fGetGameTitle; std::function m_fRebuildMenu; - std::function m_fFormatAddress; + std::function m_fFormatAddress; struct MemoryBlock { @@ -326,7 +326,7 @@ protected: MemoryWriteFunction* write; MemoryReadBlockFunction* readBlock; }; - static uint32_t ReadMemory(ra::ByteAddress nAddress, uint8_t pBuffer[], size_t nCount, const MemoryBlock& pBlock); + static uint32_t ReadMemory(ra::data::ByteAddress nAddress, uint8_t pBuffer[], size_t nCount, const MemoryBlock& pBlock); std::vector m_vMemoryBlocks; size_t m_nTotalMemorySize = 0U; diff --git a/src/data/context/GameContext.cpp b/src/data/context/GameContext.cpp index f873e8b38..fb429db87 100644 --- a/src/data/context/GameContext.cpp +++ b/src/data/context/GameContext.cpp @@ -254,10 +254,10 @@ void GameContext::EndLoadGame(int nResult, bool bWasPaused, bool bShowSoftcoreWa auto pCodeNotes = std::make_unique(); pCodeNotes->Refresh( m_nGameId, - [this](ra::ByteAddress nAddress, const std::wstring& sNewNote) { + [this](ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { OnCodeNoteChanged(nAddress, sNewNote); }, - [this](ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring sNote) { + [this](ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring sNote) { OnCodeNoteMoved(nOldAddress, nNewAddress, sNote); }, [this]() { @@ -697,7 +697,7 @@ void GameContext::DoFrame() pAsset.DoFrame(); } -void GameContext::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) +void GameContext::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { if (m_vNotifyTargets.LockIfNotEmpty()) { @@ -711,7 +711,7 @@ void GameContext::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring } } -void GameContext::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) +void GameContext::OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { if (m_vNotifyTargets.LockIfNotEmpty()) { diff --git a/src/data/context/GameContext.hh b/src/data/context/GameContext.hh index a2ac8c6e8..8632adbde 100644 --- a/src/data/context/GameContext.hh +++ b/src/data/context/GameContext.hh @@ -149,8 +149,8 @@ public: virtual void OnActiveGameChanged() noexcept(false) {} virtual void OnBeginGameLoad() noexcept(false) {} virtual void OnEndGameLoad() noexcept(false) {} - virtual void OnCodeNoteChanged(ra::ByteAddress, const std::wstring&) noexcept(false) {} - virtual void OnCodeNoteMoved(ra::ByteAddress, ra::ByteAddress, const std::wstring&) noexcept(false) {} + virtual void OnCodeNoteChanged(ra::data::ByteAddress, const std::wstring&) noexcept(false) {} + virtual void OnCodeNoteMoved(ra::data::ByteAddress, ra::data::ByteAddress, const std::wstring&) noexcept(false) {} }; void AddNotifyTarget(NotifyTarget& pTarget) noexcept { m_vNotifyTargets.Add(pTarget); } @@ -205,8 +205,8 @@ private: protected: void OnBeforeActiveGameChanged(); void OnActiveGameChanged(); - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote); - void OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote); + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote); + void OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote); void BeginLoad(); void EndLoad(); diff --git a/src/data/models/CodeNoteModel.cpp b/src/data/models/CodeNoteModel.cpp index 238166f26..8c03c8eb2 100644 --- a/src/data/models/CodeNoteModel.cpp +++ b/src/data/models/CodeNoteModel.cpp @@ -14,7 +14,7 @@ namespace models { struct CodeNoteModel::PointerData { uint32_t RawPointerValue = 0xFFFFFFFF; // last raw value of pointer captured - ra::ByteAddress PointerAddress = 0xFFFFFFFF; // raw pointer value converted to RA address + ra::data::ByteAddress PointerAddress = 0xFFFFFFFF; // raw pointer value converted to RA address unsigned int OffsetRange = 0; // highest offset captured within pointer block unsigned int HeaderLength = 0; // length of note text not associated to OffsetNotes bool HasPointers = false; // true if there are nested pointers @@ -61,7 +61,7 @@ std::wstring CodeNoteModel::GetPointerDescription() const return m_pPointerData != nullptr ? m_sNote.substr(0, m_pPointerData->HeaderLength) : std::wstring(); } -ra::ByteAddress CodeNoteModel::GetPointerAddress() const noexcept +ra::data::ByteAddress CodeNoteModel::GetPointerAddress() const noexcept { return m_pPointerData != nullptr ? m_pPointerData->PointerAddress : 0xFFFFFFFF; } @@ -81,7 +81,7 @@ bool CodeNoteModel::HasNestedPointers() const noexcept return m_pPointerData != nullptr && m_pPointerData->HasPointers; } -static ra::ByteAddress ConvertPointer(ra::ByteAddress nAddress) +static ra::data::ByteAddress ConvertPointer(ra::data::ByteAddress nAddress) { const auto& pConsoleContext = ra::services::ServiceLocator::Get(); const auto nConvertedAddress = pConsoleContext.ByteAddressFromRealAddress(nAddress); @@ -91,7 +91,7 @@ static ra::ByteAddress ConvertPointer(ra::ByteAddress nAddress) return nAddress; } -void CodeNoteModel::UpdateRawPointerValue(ra::ByteAddress nAddress, const ra::data::context::EmulatorContext& pEmulatorContext, +void CodeNoteModel::UpdateRawPointerValue(ra::data::ByteAddress nAddress, const ra::data::context::EmulatorContext& pEmulatorContext, NoteMovedFunction fNoteMovedCallback) { if (m_pPointerData == nullptr) @@ -163,7 +163,7 @@ const CodeNoteModel* CodeNoteModel::GetPointerNoteAtOffset(int nOffset) const return nullptr; } -std::pair CodeNoteModel::GetPointerNoteAtAddress(ra::ByteAddress nAddress) const +std::pair CodeNoteModel::GetPointerNoteAtAddress(ra::data::ByteAddress nAddress) const { if (m_pPointerData == nullptr) return {0, nullptr}; @@ -259,7 +259,7 @@ bool CodeNoteModel::GetPointerChainRecursive(std::vector& return false; } -bool CodeNoteModel::GetPreviousAddress(ra::ByteAddress nBeforeAddress, ra::ByteAddress& nPreviousAddress) const +bool CodeNoteModel::GetPreviousAddress(ra::data::ByteAddress nBeforeAddress, ra::data::ByteAddress& nPreviousAddress) const { if (m_pPointerData == nullptr) return false; @@ -286,7 +286,7 @@ bool CodeNoteModel::GetPreviousAddress(ra::ByteAddress nBeforeAddress, ra::ByteA return bResult; } -bool CodeNoteModel::GetNextAddress(ra::ByteAddress nAfterAddress, ra::ByteAddress& nNextAddress) const +bool CodeNoteModel::GetNextAddress(ra::data::ByteAddress nAfterAddress, ra::data::ByteAddress& nNextAddress) const { if (m_pPointerData == nullptr) return false; @@ -460,7 +460,7 @@ void CodeNoteModel::CheckForHexEnum(size_t nNextIndex) { if (bHex) { - m_nMemFormat = MemFormat::Hex; + m_nMemFormat = Memory::Format::Hex; break; } else if (bAllValuesPotentialHex) @@ -473,13 +473,13 @@ void CodeNoteModel::CheckForHexEnum(size_t nNextIndex) } else if (IsBitX(m_sNote, nIndex, nSplitIndex)) // bit1=Happy { - m_nMemFormat = MemFormat::Hex; + m_nMemFormat = Memory::Format::Hex; break; } } if (bAllValuesPotentialHex && bFoundPotentialHexValueWithLeadingZero) - m_nMemFormat = MemFormat::Hex; + m_nMemFormat = Memory::Format::Hex; } void CodeNoteModel::SetNote(const std::wstring& sNote, bool bImpliedPointer) @@ -488,7 +488,7 @@ void CodeNoteModel::SetNote(const std::wstring& sNote, bool bImpliedPointer) return; m_sNote = sNote; - m_nMemFormat = MemFormat::Dec; + m_nMemFormat = Memory::Format::Dec; std::wstring sLine; size_t nIndex = 0; @@ -508,7 +508,7 @@ void CodeNoteModel::SetNote(const std::wstring& sNote, bool bImpliedPointer) if (sLine.at(0) == '+' && bImpliedPointer) { m_nMemSize = GetImpliedPointerSize(); - m_nBytes = ra::data::MemSizeBytes(m_nMemSize); + m_nBytes = Memory::SizeBytes(m_nMemSize); // found a line starting with a plus sign, bit no pointer annotation. bImpliedPointer // must be true. assume the parent note is not described. pass -1 as the note size @@ -539,13 +539,13 @@ void CodeNoteModel::SetNote(const std::wstring& sNote, bool bImpliedPointer) // found "pointer" ExtractSize(sLine, true); - m_nMemFormat = MemFormat::Hex; + m_nMemFormat = Memory::Format::Hex; - if (m_nMemSize == MemSize::Unknown) + if (m_nMemSize == Memory::Size::Unknown) { // pointer size not specified. assume 32-bit m_nMemSize = GetImpliedPointerSize(); - m_nBytes = ra::data::MemSizeBytes(m_nMemSize); + m_nBytes = Memory::SizeBytes(m_nMemSize); } // if there are any lines starting with a plus sign, extract the indirect code notes @@ -564,7 +564,7 @@ void CodeNoteModel::SetNote(const std::wstring& sNote, bool bImpliedPointer) break; } - if (m_nMemSize != MemSize::Unknown) // found a size. stop processing. + if (m_nMemSize != Memory::Size::Unknown) // found a size. stop processing. break; } @@ -574,21 +574,21 @@ void CodeNoteModel::SetNote(const std::wstring& sNote, bool bImpliedPointer) nIndex = nNextIndex + 1; } while (true); - if (m_nMemFormat == MemFormat::Dec) // implicitly ignored nested notes as pointers will be flagged as hex + if (m_nMemFormat == Memory::Format::Dec) // implicitly ignored nested notes as pointers will be flagged as hex CheckForHexEnum(nNextIndex); } -MemSize CodeNoteModel::GetImpliedPointerSize() +Memory::Size CodeNoteModel::GetImpliedPointerSize() { const auto& pConsoleContext = ra::services::ServiceLocator::Get(); - MemSize nSize; + Memory::Size nSize; uint32_t nMask; uint32_t nOffset; if (pConsoleContext.GetRealAddressConversion(&nSize, &nMask, &nOffset)) return nSize; - return MemSize::ThirtyTwoBit; + return Memory::Size::ThirtyTwoBit; } static constexpr bool IsHexDigit(wchar_t c) @@ -758,7 +758,7 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) { // provide defaults in case no matches are found m_nBytes = 1; - m_nMemSize = MemSize::Unknown; + m_nMemSize = Memory::Size::Unknown; // "Nbit" smallest possible note - and that's just the size annotation if (sNote.length() < 4) @@ -788,14 +788,14 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) if (nBits == 32) { m_nBytes = 4; - m_nMemSize = MemSize::MBF32; + m_nMemSize = Memory::Size::MBF32; bWordIsSize = true; bFoundSize = true; } else if (nBits == 40) { m_nBytes = 5; - m_nMemSize = MemSize::MBF32; + m_nMemSize = Memory::Size::MBF32; bWordIsSize = true; bFoundSize = true; } @@ -803,14 +803,14 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) else if (nLastTokenType == Parser::TokenType::Double && sWord == L"32") { m_nBytes = 4; - m_nMemSize = MemSize::Double32; + m_nMemSize = Memory::Size::Double32; bWordIsSize = true; bFoundSize = true; } } else if (nTokenType == Parser::TokenType::BCD || nTokenType == Parser::TokenType::Hex) { - m_nMemFormat = MemFormat::Hex; + m_nMemFormat = Memory::Format::Hex; } else if (nTokenType == Parser::TokenType::ASCII) { @@ -820,17 +820,17 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) { if (nTokenType == Parser::TokenType::Float) { - if (m_nMemSize == MemSize::ThirtyTwoBit) + if (m_nMemSize == Memory::Size::ThirtyTwoBit) { - m_nMemSize = MemSize::Float; + m_nMemSize = Memory::Size::Float; bWordIsSize = true; // allow trailing be/bigendian } } else if (nTokenType == Parser::TokenType::Double) { - if (m_nMemSize == MemSize::ThirtyTwoBit || m_nBytes == 8) + if (m_nMemSize == Memory::Size::ThirtyTwoBit || m_nBytes == 8) { - m_nMemSize = MemSize::Double32; + m_nMemSize = Memory::Size::Double32; bWordIsSize = true; // allow trailing be/bigendian } } @@ -838,23 +838,23 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) { switch (m_nMemSize) { - case MemSize::SixteenBit: m_nMemSize = MemSize::SixteenBitBigEndian; break; - case MemSize::TwentyFourBit: m_nMemSize = MemSize::TwentyFourBitBigEndian; break; - case MemSize::ThirtyTwoBit: m_nMemSize = MemSize::ThirtyTwoBitBigEndian; break; - case MemSize::Float: m_nMemSize = MemSize::FloatBigEndian; break; - case MemSize::Double32: m_nMemSize = MemSize::Double32BigEndian; break; + case Memory::Size::SixteenBit: m_nMemSize = Memory::Size::SixteenBitBigEndian; break; + case Memory::Size::TwentyFourBit: m_nMemSize = Memory::Size::TwentyFourBitBigEndian; break; + case Memory::Size::ThirtyTwoBit: m_nMemSize = Memory::Size::ThirtyTwoBitBigEndian; break; + case Memory::Size::Float: m_nMemSize = Memory::Size::FloatBigEndian; break; + case Memory::Size::Double32: m_nMemSize = Memory::Size::Double32BigEndian; break; default: break; } } else if (nTokenType == Parser::TokenType::LittleEndian) { - if (m_nMemSize == MemSize::MBF32) - m_nMemSize = MemSize::MBF32LE; + if (m_nMemSize == Memory::Size::MBF32) + m_nMemSize = Memory::Size::MBF32LE; } else if (nTokenType == Parser::TokenType::MBF) { if (m_nBytes == 4 || m_nBytes == 5) - m_nMemSize = MemSize::MBF32; + m_nMemSize = Memory::Size::MBF32; } } else if (nLastTokenType == Parser::TokenType::Number) @@ -882,17 +882,17 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) } if (bWordIsSize && - (m_nMemSize == MemSize::Unknown || // size not yet determined - MemSizeBytes(m_nMemSize) != m_nBytes)) // size mismatch + (m_nMemSize == Memory::Size::Unknown || // size not yet determined + Memory::SizeBytes(m_nMemSize) != m_nBytes)) // size mismatch { switch (m_nBytes) { case 0: m_nBytes = 1; break; // Unexpected size, reset to defaults (1 byte, Unknown) - case 1: m_nMemSize = MemSize::EightBit; break; - case 2: m_nMemSize = MemSize::SixteenBit; break; - case 3: m_nMemSize = MemSize::TwentyFourBit; break; - case 4: m_nMemSize = MemSize::ThirtyTwoBit; break; - default: m_nMemSize = MemSize::Array; break; + case 1: m_nMemSize = Memory::Size::EightBit; break; + case 2: m_nMemSize = Memory::Size::SixteenBit; break; + case 3: m_nMemSize = Memory::Size::TwentyFourBit; break; + case 4: m_nMemSize = Memory::Size::ThirtyTwoBit; break; + default: m_nMemSize = Memory::Size::Array; break; } } } @@ -901,11 +901,11 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) if (!bFoundSize) { m_nBytes = 4; - m_nMemSize = MemSize::Float; + m_nMemSize = Memory::Size::Float; bWordIsSize = true; // allow trailing be/bigendian if (nLastTokenType == Parser::TokenType::BigEndian) - m_nMemSize = MemSize::FloatBigEndian; + m_nMemSize = Memory::Size::FloatBigEndian; } } else if (nTokenType == Parser::TokenType::Double) @@ -913,11 +913,11 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) if (!bFoundSize) { m_nBytes = 8; - m_nMemSize = MemSize::Double32; + m_nMemSize = Memory::Size::Double32; bWordIsSize = true; // allow trailing be/bigendian if (nLastTokenType == Parser::TokenType::BigEndian) - m_nMemSize = MemSize::Double32BigEndian; + m_nMemSize = Memory::Size::Double32BigEndian; } } else if (nLastTokenType == Parser::TokenType::HexNumber) @@ -928,7 +928,7 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) { wchar_t* pEnd; m_nBytes = gsl::narrow_cast(std::wcstoll(sPreviousWord.c_str(), &pEnd, 16)); - m_nMemSize = MemSize::Array; + m_nMemSize = Memory::Size::Array; bBytesFromBits = false; bWordIsSize = true; bFoundSize = true; @@ -959,8 +959,8 @@ void CodeNoteModel::ExtractSize(const std::wstring& sNote, bool bIsPointer) } } while (true); - if (m_nMemSize == MemSize::Array && bFoundASCII) - m_nMemSize = MemSize::Text; + if (m_nMemSize == Memory::Size::Array && bFoundASCII) + m_nMemSize = Memory::Size::Text; } static void RemoveIndentPrefix(std::wstring& sNote) @@ -1085,7 +1085,7 @@ void CodeNoteModel::ProcessIndirectNotes(const std::wstring& sNote, size_t nInde } } const auto sNoteBody = sNextNote.substr(pEnd - sNextNote.c_str()); - const auto nAddress = gsl::narrow_cast(nOffset); + const auto nAddress = gsl::narrow_cast(nOffset); CodeNoteModel* pExistingNote = nullptr; for (auto& pOffsetNote : pointerData->OffsetNotes) @@ -1127,7 +1127,7 @@ void CodeNoteModel::ProcessIndirectNotes(const std::wstring& sNote, size_t nInde // assume anything annotated as a 32-bit pointer will read a real (non-translated) address and // flag it to be converted to an RA address when evaluating indirect notes in DoFrame() - if (m_nMemSize == MemSize::ThirtyTwoBit || m_nMemSize == MemSize::ThirtyTwoBitBigEndian) + if (m_nMemSize == Memory::Size::ThirtyTwoBit || m_nMemSize == Memory::Size::ThirtyTwoBitBigEndian) { const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); const auto nMaxAddress = pEmulatorContext.TotalMemorySize(); @@ -1213,7 +1213,7 @@ std::wstring CodeNoteModel::TrimSize(const std::wstring& sNote, bool bKeepPointe } void CodeNoteModel::EnumeratePointerNotes( - std::function fCallback) const + std::function fCallback) const { if (m_pPointerData == nullptr) return; @@ -1224,8 +1224,8 @@ void CodeNoteModel::EnumeratePointerNotes( EnumeratePointerNotes(m_pPointerData->PointerAddress, fCallback); } -void CodeNoteModel::EnumeratePointerNotes(ra::ByteAddress nPointerAddress, - std::function fCallback) const +void CodeNoteModel::EnumeratePointerNotes(ra::data::ByteAddress nPointerAddress, + std::function fCallback) const { if (m_pPointerData == nullptr) return; diff --git a/src/data/models/CodeNoteModel.hh b/src/data/models/CodeNoteModel.hh index 827efba1d..2ff8e3dca 100644 --- a/src/data/models/CodeNoteModel.hh +++ b/src/data/models/CodeNoteModel.hh @@ -22,38 +22,38 @@ public: const std::string& GetAuthor() const noexcept { return m_sAuthor; } const std::wstring& GetNote() const noexcept { return m_sNote; } - const ra::ByteAddress GetAddress() const noexcept { return m_nAddress; } + const ra::data::ByteAddress GetAddress() const noexcept { return m_nAddress; } const unsigned int GetBytes() const noexcept { return m_nBytes; } - const MemSize GetMemSize() const noexcept { return m_nMemSize; } - const MemFormat GetDefaultMemFormat() const noexcept { return m_nMemFormat; } + const Memory::Size GetMemSize() const noexcept { return m_nMemSize; } + const Memory::Format GetDefaultMemFormat() const noexcept { return m_nMemFormat; } std::wstring_view GetEnumText(uint32_t nValue) const; void SetAuthor(const std::string& sAuthor) { m_sAuthor = sAuthor; } - void SetAddress(ra::ByteAddress nAddress) noexcept { m_nAddress = nAddress; } - void SetMemSize(MemSize nMemSize) noexcept { m_nMemSize = nMemSize; } + void SetAddress(ra::data::ByteAddress nAddress) noexcept { m_nAddress = nAddress; } + void SetMemSize(Memory::Size nMemSize) noexcept { m_nMemSize = nMemSize; } void SetNote(const std::wstring& sNote, bool bImpliedPointer = false); bool IsPointer() const noexcept { return m_pPointerData != nullptr; } std::wstring GetPointerDescription() const; - ra::ByteAddress GetPointerAddress() const noexcept; + ra::data::ByteAddress GetPointerAddress() const noexcept; bool HasRawPointerValue() const noexcept; uint32_t GetRawPointerValue() const noexcept; bool HasNestedPointers() const noexcept; const CodeNoteModel* GetPointerNoteAtOffset(int nOffset) const; - std::pair GetPointerNoteAtAddress(ra::ByteAddress nAddress) const; + std::pair GetPointerNoteAtAddress(ra::data::ByteAddress nAddress) const; virtual bool GetPointerChain(std::vector& vChain, const CodeNoteModel& pRootNote) const; - typedef std::function NoteMovedFunction; - void UpdateRawPointerValue(ra::ByteAddress nAddress, const ra::data::context::EmulatorContext& pEmulatorContext, NoteMovedFunction fNoteMovedCallback); + typedef std::function NoteMovedFunction; + void UpdateRawPointerValue(ra::data::ByteAddress nAddress, const ra::data::context::EmulatorContext& pEmulatorContext, NoteMovedFunction fNoteMovedCallback); - bool GetPreviousAddress(ra::ByteAddress nBeforeAddress, ra::ByteAddress& nPreviousAddress) const; - bool GetNextAddress(ra::ByteAddress nAfterAddress, ra::ByteAddress& nNextAddress) const; + bool GetPreviousAddress(ra::data::ByteAddress nBeforeAddress, ra::data::ByteAddress& nPreviousAddress) const; + bool GetNextAddress(ra::data::ByteAddress nAfterAddress, ra::data::ByteAddress& nNextAddress) const; std::wstring GetPrimaryNote() const; - void EnumeratePointerNotes(ra::ByteAddress nPointerAddress, - std::function fCallback) const; - void EnumeratePointerNotes(std::function fCallback) const; + void EnumeratePointerNotes(ra::data::ByteAddress nPointerAddress, + std::function fCallback) const; + void EnumeratePointerNotes(std::function fCallback) const; class Parser { @@ -95,10 +95,10 @@ public: private: std::string m_sAuthor; std::wstring m_sNote; - ra::ByteAddress m_nAddress = 0; // address of root nodes, offset to indirect nodes + ra::data::ByteAddress m_nAddress = 0; // address of root nodes, offset to indirect nodes unsigned int m_nBytes = 1; - MemSize m_nMemSize = MemSize::Unknown; - MemFormat m_nMemFormat = MemFormat::Dec; + Memory::Size m_nMemSize = Memory::Size::Unknown; + Memory::Format m_nMemFormat = Memory::Format::Dec; enum EnumState { None, @@ -116,7 +116,7 @@ private: void ProcessIndirectNotes(const std::wstring& sNote, size_t nIndex); void ExtractSize(const std::wstring& sNote, bool bIsPointer); - static MemSize GetImpliedPointerSize(); + static Memory::Size GetImpliedPointerSize(); void CheckForHexEnum(size_t nStartIndex); }; diff --git a/src/data/models/CodeNotesModel.cpp b/src/data/models/CodeNotesModel.cpp index 33e7e3b2b..2449a8775 100644 --- a/src/data/models/CodeNotesModel.cpp +++ b/src/data/models/CodeNotesModel.cpp @@ -77,7 +77,7 @@ void CodeNotesModel::Refresh(unsigned int nGameId, } } - std::map mPendingCodeNotes; + std::map mPendingCodeNotes; { std::unique_lock lock(m_oMutex); mPendingCodeNotes.swap(m_mPendingCodeNotes); @@ -103,12 +103,12 @@ void CodeNotesModel::Refresh(unsigned int nGameId, GSL_SUPPRESS_R30 // left has to be a const ref to the unique_ptr because the function is used in lower_bound GSL_SUPPRESS_R32 // left has to be a const ref to the unique_ptr because the function is used in lower_bound static int CompareNoteAddresses(const std::unique_ptr& left, - ra::ByteAddress nAddress) noexcept + ra::data::ByteAddress nAddress) noexcept { return left->GetAddress() < nAddress; } -void CodeNotesModel::AddCodeNote(ra::ByteAddress nAddress, const std::string& sAuthor, const std::wstring& sNote) +void CodeNotesModel::AddCodeNote(ra::data::ByteAddress nAddress, const std::string& sAuthor, const std::wstring& sNote) { std::unique_ptr note = std::make_unique(); note->SetAuthor(sAuthor); @@ -133,7 +133,7 @@ void CodeNotesModel::AddCodeNote(ra::ByteAddress nAddress, const std::string& sA // CodeNoteChanged events for indirect child notes will be raised by first call to DoFrame } -void CodeNotesModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) +void CodeNotesModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { SetValue(ra::data::models::AssetModelBase::ChangesProperty, m_mOriginalCodeNotes.empty() ? @@ -144,7 +144,7 @@ void CodeNotesModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstr m_fCodeNoteChanged(nAddress, sNewNote); } -ra::ByteAddress CodeNotesModel::FindCodeNoteStart(ra::ByteAddress nAddress) const +ra::data::ByteAddress CodeNotesModel::FindCodeNoteStart(ra::data::ByteAddress nAddress) const { auto pIter = std::lower_bound(m_vCodeNotes.begin(), m_vCodeNotes.end(), nAddress, CompareNoteAddresses); @@ -182,8 +182,8 @@ ra::ByteAddress CodeNotesModel::FindCodeNoteStart(ra::ByteAddress nAddress) cons return 0xFFFFFFFF; } -std::wstring CodeNotesModel::BuildCodeNoteSized(ra::ByteAddress nAddress, - unsigned nCheckBytes, ra::ByteAddress nNoteAddress, const CodeNoteModel& pNote) +std::wstring CodeNotesModel::BuildCodeNoteSized(ra::data::ByteAddress nAddress, + unsigned nCheckBytes, ra::data::ByteAddress nNoteAddress, const CodeNoteModel& pNote) { // extract the first line std::wstring sNote = pNote.GetNote(); @@ -215,9 +215,9 @@ std::wstring CodeNotesModel::BuildCodeNoteSized(ra::ByteAddress nAddress, return sNote; } -std::wstring CodeNotesModel::FindCodeNote(ra::ByteAddress nAddress, MemSize nSize) const +std::wstring CodeNotesModel::FindCodeNote(ra::data::ByteAddress nAddress, Memory::Size nSize) const { - const unsigned int nCheckBytes = ra::data::MemSizeBytes(nSize); + const unsigned int nCheckBytes = ra::data::Memory::SizeBytes(nSize); // lower_bound will return the item if it's an exact match, or the *next* item otherwise auto pIter = std::lower_bound(m_vCodeNotes.begin(), m_vCodeNotes.end(), nAddress, CompareNoteAddresses); @@ -272,7 +272,7 @@ std::wstring CodeNotesModel::FindCodeNote(ra::ByteAddress nAddress, MemSize nSiz return std::wstring(); } -const std::wstring* CodeNotesModel::FindCodeNote(ra::ByteAddress nAddress, _Inout_ std::string& sAuthor) const +const std::wstring* CodeNotesModel::FindCodeNote(ra::data::ByteAddress nAddress, _Inout_ std::string& sAuthor) const { const auto pIter = std::lower_bound(m_vCodeNotes.begin(), m_vCodeNotes.end(), nAddress, CompareNoteAddresses); if (pIter != m_vCodeNotes.end()) @@ -288,7 +288,7 @@ const std::wstring* CodeNotesModel::FindCodeNote(ra::ByteAddress nAddress, _Inou return nullptr; } -void CodeNotesModel::SetCodeNote(ra::ByteAddress nAddress, const std::wstring& sNote) +void CodeNotesModel::SetCodeNote(ra::data::ByteAddress nAddress, const std::wstring& sNote) { std::string sOriginalAuthor; @@ -364,7 +364,7 @@ void CodeNotesModel::SetCodeNote(ra::ByteAddress nAddress, const std::wstring& s } } -const CodeNoteModel* CodeNotesModel::FindCodeNoteModel(ra::ByteAddress nAddress, bool bIncludeDerived) const +const CodeNoteModel* CodeNotesModel::FindCodeNoteModel(ra::data::ByteAddress nAddress, bool bIncludeDerived) const { const auto pIter = std::lower_bound(m_vCodeNotes.begin(), m_vCodeNotes.end(), nAddress, CompareNoteAddresses); if (pIter != m_vCodeNotes.end() && (*pIter)->GetAddress() == nAddress) @@ -376,8 +376,8 @@ const CodeNoteModel* CodeNotesModel::FindCodeNoteModel(ra::ByteAddress nAddress, return nullptr; } -std::pair - CodeNotesModel::FindIndirectCodeNoteInternal(ra::ByteAddress nAddress) const +std::pair + CodeNotesModel::FindIndirectCodeNoteInternal(ra::data::ByteAddress nAddress) const { for (const auto& pCodeNote : m_vCodeNotes) { @@ -389,7 +389,7 @@ std::pair return {0, nullptr}; } -ra::ByteAddress CodeNotesModel::GetIndirectSource(ra::ByteAddress nAddress) const +ra::data::ByteAddress CodeNotesModel::GetIndirectSource(ra::data::ByteAddress nAddress) const { if (m_bHasPointers) { @@ -401,9 +401,9 @@ ra::ByteAddress CodeNotesModel::GetIndirectSource(ra::ByteAddress nAddress) cons return 0xFFFFFFFF; } -ra::ByteAddress CodeNotesModel::GetNextNoteAddress(ra::ByteAddress nAfterAddress, bool bIncludeDerived) const +ra::data::ByteAddress CodeNotesModel::GetNextNoteAddress(ra::data::ByteAddress nAfterAddress, bool bIncludeDerived) const { - ra::ByteAddress nBestAddress = 0xFFFFFFFF; + ra::data::ByteAddress nBestAddress = 0xFFFFFFFF; // lower_bound will return the item if it's an exact match, or the *next* item otherwise const auto pIter = std::lower_bound(m_vCodeNotes.begin(), m_vCodeNotes.end(), nAfterAddress + 1, CompareNoteAddresses); @@ -412,7 +412,7 @@ ra::ByteAddress CodeNotesModel::GetNextNoteAddress(ra::ByteAddress nAfterAddress if (m_bHasPointers && bIncludeDerived) { - ra::ByteAddress nNextAddress = 0U; + ra::data::ByteAddress nNextAddress = 0U; for (const auto& pNote : m_vCodeNotes) { if (pNote->GetNextAddress(nAfterAddress, nNextAddress)) @@ -423,7 +423,7 @@ ra::ByteAddress CodeNotesModel::GetNextNoteAddress(ra::ByteAddress nAfterAddress return nBestAddress; } -ra::ByteAddress CodeNotesModel::GetPreviousNoteAddress(ra::ByteAddress nBeforeAddress, bool bIncludeDerived) const +ra::data::ByteAddress CodeNotesModel::GetPreviousNoteAddress(ra::data::ByteAddress nBeforeAddress, bool bIncludeDerived) const { unsigned nBestAddress = 0xFFFFFFFF; @@ -444,7 +444,7 @@ ra::ByteAddress CodeNotesModel::GetPreviousNoteAddress(ra::ByteAddress nBeforeAd if (m_bHasPointers && bIncludeDerived) { - ra::ByteAddress nPreviousAddress = 0U; + ra::data::ByteAddress nPreviousAddress = 0U; // scan pointed-at addresses to see if there's anything between the next lower item and nBeforeAddress for (const auto& pNote : m_vCodeNotes) @@ -457,7 +457,7 @@ ra::ByteAddress CodeNotesModel::GetPreviousNoteAddress(ra::ByteAddress nBeforeAd return nBestAddress; } -void CodeNotesModel::EnumerateCodeNotes(std::function callback, bool bIncludeDerived) const +void CodeNotesModel::EnumerateCodeNotes(std::function callback, bool bIncludeDerived) const { if (!bIncludeDerived || !m_bHasPointers) { @@ -472,14 +472,14 @@ void CodeNotesModel::EnumerateCodeNotes(std::function mNotes; + std::map mNotes; for (const auto& pCodeNote : m_vCodeNotes) { if (!pCodeNote->IsPointer() || pCodeNote->GetRawPointerValue() == 0) continue; - std::function fCallback = - [&mNotes, &fCallback](ra::ByteAddress nAddress, const CodeNoteModel& pNote) + std::function fCallback = + [&mNotes, &fCallback](ra::data::ByteAddress nAddress, const CodeNoteModel& pNote) { mNotes[nAddress] = &pNote; @@ -524,7 +524,7 @@ void CodeNotesModel::DoFrame() else if (pCodeNote->HasRawPointerValue()) { pCodeNote->UpdateRawPointerValue(pCodeNote->GetAddress(), pEmulatorContext, - [this](ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const CodeNoteModel& pOffsetNote) { + [this](ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const CodeNoteModel& pOffsetNote) { m_fCodeNoteMoved(nOldAddress, nNewAddress, pOffsetNote.GetNote()); }); } @@ -532,7 +532,7 @@ void CodeNotesModel::DoFrame() { // pointer hasn't been read before, provide dummy previous address pCodeNote->UpdateRawPointerValue(pCodeNote->GetAddress(), pEmulatorContext, - [this](ra::ByteAddress, ra::ByteAddress nNewAddress, const CodeNoteModel& pOffsetNote) { + [this](ra::data::ByteAddress, ra::data::ByteAddress nNewAddress, const CodeNoteModel& pOffsetNote) { m_fCodeNoteMoved(0xFFFFFFFF, nNewAddress, pOffsetNote.GetNote()); }); } @@ -540,7 +540,7 @@ void CodeNotesModel::DoFrame() } } -void CodeNotesModel::SetServerCodeNote(ra::ByteAddress nAddress, const std::wstring& sNote) +void CodeNotesModel::SetServerCodeNote(ra::data::ByteAddress nAddress, const std::wstring& sNote) { const auto pIter = m_mOriginalCodeNotes.find(nAddress); if (pIter != m_mOriginalCodeNotes.end()) @@ -567,7 +567,7 @@ void CodeNotesModel::SetServerCodeNote(ra::ByteAddress nAddress, const std::wstr AddCodeNote(nAddress, pUserContext.GetDisplayName(), sNote); } -const std::wstring* CodeNotesModel::GetServerCodeNote(ra::ByteAddress nAddress) const +const std::wstring* CodeNotesModel::GetServerCodeNote(ra::data::ByteAddress nAddress) const { const auto pIter = m_mOriginalCodeNotes.find(nAddress); if (pIter != m_mOriginalCodeNotes.end()) @@ -576,7 +576,7 @@ const std::wstring* CodeNotesModel::GetServerCodeNote(ra::ByteAddress nAddress) return nullptr; } -const std::string* CodeNotesModel::GetServerCodeNoteAuthor(ra::ByteAddress nAddress) const +const std::string* CodeNotesModel::GetServerCodeNoteAuthor(ra::data::ByteAddress nAddress) const { const auto pIter = m_mOriginalCodeNotes.find(nAddress); if (pIter != m_mOriginalCodeNotes.end()) diff --git a/src/data/models/CodeNotesModel.hh b/src/data/models/CodeNotesModel.hh index 496ecfae7..66e7adf4d 100644 --- a/src/data/models/CodeNotesModel.hh +++ b/src/data/models/CodeNotesModel.hh @@ -24,8 +24,8 @@ public: bool IsShownInList() const noexcept override { return false; } - typedef std::function CodeNoteChangedFunction; - typedef std::function CodeNoteMovedFunction; + typedef std::function CodeNoteChangedFunction; + typedef std::function CodeNoteMovedFunction; /// /// Repopulates with code notes from the server. @@ -40,7 +40,7 @@ public: /// Returns the note associated with the specified address. /// /// The note associated to the address, nullptr if no note is associated to the address. - const std::wstring* FindCodeNote(ra::ByteAddress nAddress) const + const std::wstring* FindCodeNote(ra::data::ByteAddress nAddress) const { const auto* pNote = FindCodeNoteModel(nAddress); return (pNote != nullptr) ? &pNote->GetNote() : nullptr; @@ -50,7 +50,7 @@ public: /// Returns the note model associated with the specified address. /// /// The note model associated to the address, nullptr if no note is associated to the address. - const CodeNoteModel* FindCodeNoteModel(ra::ByteAddress nAddress, bool bIncludeDerived = true) const; + const CodeNoteModel* FindCodeNoteModel(ra::data::ByteAddress nAddress, bool bIncludeDerived = true) const; /// /// Returns the address of the first byte containing the specified code note. @@ -58,7 +58,7 @@ public: /// /// Returns 0xFFFFFFFF if not found. /// - ra::ByteAddress FindCodeNoteStart(ra::ByteAddress nAddress) const; + ra::data::ByteAddress FindCodeNoteStart(ra::data::ByteAddress nAddress) const; /// /// Returns the note associated with the specified address. @@ -67,7 +67,7 @@ public: /// The note associated to the address or neighboring addresses based on . /// Returns an empty string if no note is associated to the address. /// - std::wstring FindCodeNote(ra::ByteAddress nAddress, MemSize nSize) const; + std::wstring FindCodeNote(ra::data::ByteAddress nAddress, Memory::Size nSize) const; /// /// Returns the note associated with the specified address. @@ -76,7 +76,7 @@ public: /// The author associated to the address. /// The note associated to the address, nullptr if no note is associated to the address. /// Does not find notes derived from pointers - const std::wstring* FindCodeNote(ra::ByteAddress nAddress, _Inout_ std::string& sAuthor) const; + const std::wstring* FindCodeNote(ra::data::ByteAddress nAddress, _Inout_ std::string& sAuthor) const; /// /// Returns the number of bytes associated to the code note at the specified address. @@ -84,7 +84,7 @@ public: /// Address to query. /// Number of bytes associated to the code note, or 0 if no note exists at the address. /// Only works for the first byte of a multi-byte address. - unsigned GetCodeNoteBytes(ra::ByteAddress nAddress) const + unsigned GetCodeNoteBytes(ra::data::ByteAddress nAddress) const { const auto* pNote = FindCodeNoteModel(nAddress); return (pNote == nullptr) ? 0 : pNote->GetBytes(); @@ -94,12 +94,12 @@ public: /// Returns the number of bytes associated to the code note at the specified address. /// /// Address to query. - /// MemSize associated to the code note, or Unknown if no note exists at the address. + /// Memory::Size associated to the code note, or Unknown if no note exists at the address. /// Only works for the first byte of a multi-byte address. - MemSize GetCodeNoteMemSize(ra::ByteAddress nAddress) const + Memory::Size GetCodeNoteMemSize(ra::data::ByteAddress nAddress) const { const auto* pNote = FindCodeNoteModel(nAddress); - return (pNote == nullptr) ? MemSize::Unknown : pNote->GetMemSize(); + return (pNote == nullptr) ? Memory::Size::Unknown : pNote->GetMemSize(); } /// @@ -108,7 +108,7 @@ public: /// /// Returns 0xFFFFFFFF if not found, or not an indirect note. /// - ra::ByteAddress GetIndirectSource(ra::ByteAddress nAddress) const; + ra::data::ByteAddress GetIndirectSource(ra::data::ByteAddress nAddress) const; /// /// Returns the address of the next code note after the provided address. @@ -116,7 +116,7 @@ public: /// /// Returns 0xFFFFFFFF if not found. /// - ra::ByteAddress GetNextNoteAddress(ra::ByteAddress nAfterAddress, bool bIncludeDerived = false) const; + ra::data::ByteAddress GetNextNoteAddress(ra::data::ByteAddress nAfterAddress, bool bIncludeDerived = false) const; /// /// Returns the address of the next code note before the provided address. @@ -124,7 +124,7 @@ public: /// /// Returns 0xFFFFFFFF if not found. /// - ra::ByteAddress GetPreviousNoteAddress(ra::ByteAddress nBeforeAddress, bool bIncludeDerived = false) const; + ra::data::ByteAddress GetPreviousNoteAddress(ra::data::ByteAddress nBeforeAddress, bool bIncludeDerived = false) const; /// /// Enumerates the code notes @@ -132,9 +132,9 @@ public: /// /// is called for each known code note. If it returns false enumeration stops. /// - void EnumerateCodeNotes(std::function callback, bool bIncludeDerived = false) const + void EnumerateCodeNotes(std::function callback, bool bIncludeDerived = false) const { - EnumerateCodeNotes([callback](ra::ByteAddress nAddress, const CodeNoteModel& pCodeNote) + EnumerateCodeNotes([callback](ra::data::ByteAddress nAddress, const CodeNoteModel& pCodeNote) { return callback(nAddress, pCodeNote.GetBytes(), pCodeNote.GetNote()); }, bIncludeDerived); @@ -146,7 +146,7 @@ public: /// /// is called for each known code note. If it returns false enumeration stops. /// - void EnumerateCodeNotes(std::function callback, bool bIncludeDerived = false) const; + void EnumerateCodeNotes(std::function callback, bool bIncludeDerived = false) const; /// /// Sets the note to associate with the specified address. @@ -154,7 +154,7 @@ public: /// The address to set the note for. /// The new note for the address. /// true if the note was updated, false if an error occurred. - void SetCodeNote(ra::ByteAddress nAddress, const std::wstring& sNote); + void SetCodeNote(ra::data::ByteAddress nAddress, const std::wstring& sNote); /// /// Returns the number of known code notes (not including indirect notes). @@ -164,7 +164,7 @@ public: /// /// Gets the address of the first code note. /// - ra::ByteAddress FirstCodeNoteAddress() const noexcept + ra::data::ByteAddress FirstCodeNoteAddress() const noexcept { return (m_vCodeNotes.empty()) ? 0U : m_vCodeNotes.front()->GetAddress(); } @@ -175,7 +175,7 @@ public: /// /// is called for each known code note. If it returns false enumeration stops. /// - void EnumerateModifiedCodeNotes(std::function callback) const + void EnumerateModifiedCodeNotes(std::function callback) const { for (const auto& pair : m_mOriginalCodeNotes) { @@ -187,14 +187,14 @@ public: /// /// Gets whether or not the note for specified address has been modified. /// - bool IsNoteModified(ra::ByteAddress nAddress) const + bool IsNoteModified(ra::data::ByteAddress nAddress) const { return m_mOriginalCodeNotes.find(nAddress) != m_mOriginalCodeNotes.end(); } - void SetServerCodeNote(ra::ByteAddress nAddress, const std::wstring& sNote); - const std::wstring* GetServerCodeNote(ra::ByteAddress nAddress) const; - const std::string* GetServerCodeNoteAuthor(ra::ByteAddress nAddress) const; + void SetServerCodeNote(ra::data::ByteAddress nAddress, const std::wstring& sNote); + const std::wstring* GetServerCodeNote(ra::data::ByteAddress nAddress) const; + const std::string* GetServerCodeNoteAuthor(ra::data::ByteAddress nAddress) const; void Serialize(ra::services::TextWriter&) const override; bool Deserialize(ra::Tokenizer&) override; @@ -202,15 +202,15 @@ public: void DoFrame() override; protected: - void AddCodeNote(ra::ByteAddress nAddress, const std::string& sAuthor, const std::wstring& sNote); - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote); + void AddCodeNote(ra::data::ByteAddress nAddress, const std::string& sAuthor, const std::wstring& sNote); + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote); std::vector> m_vCodeNotes; - std::map> m_mOriginalCodeNotes; + std::map> m_mOriginalCodeNotes; - std::map m_mPendingCodeNotes; + std::map m_mPendingCodeNotes; - std::pair FindIndirectCodeNoteInternal(ra::ByteAddress nAddress) const; + std::pair FindIndirectCodeNoteInternal(ra::data::ByteAddress nAddress) const; unsigned int m_nGameId = 0; bool m_bHasPointers = false; @@ -220,7 +220,7 @@ protected: CodeNoteMovedFunction m_fCodeNoteMoved; private: - static std::wstring BuildCodeNoteSized(ra::ByteAddress nAddress, unsigned nCheckBytes, ra::ByteAddress nNoteAddress, const CodeNoteModel& pNote); + static std::wstring BuildCodeNoteSized(ra::data::ByteAddress nAddress, unsigned nCheckBytes, ra::data::ByteAddress nNoteAddress, const CodeNoteModel& pNote); mutable std::mutex m_oMutex; }; diff --git a/src/data/models/MemoryRegionsModel.cpp b/src/data/models/MemoryRegionsModel.cpp index eb02f68b4..d63fb94ad 100644 --- a/src/data/models/MemoryRegionsModel.cpp +++ b/src/data/models/MemoryRegionsModel.cpp @@ -59,7 +59,7 @@ bool MemoryRegionsModel::Deserialize(ra::Tokenizer& pTokenizer) return true; } -void MemoryRegionsModel::AddCustomRegion(ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, const std::wstring& sLabel) +void MemoryRegionsModel::AddCustomRegion(ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, const std::wstring& sLabel) { MemoryRegion pRegion; pRegion.sLabel = sLabel; @@ -80,7 +80,7 @@ void MemoryRegionsModel::ResetCustomRegions() SetValue(ChangesProperty, ra::etoi(AssetChanges::None)); } -static bool ParseAddress(const wchar_t** pointer, ra::ByteAddress& address) noexcept +static bool ParseAddress(const wchar_t** pointer, ra::data::ByteAddress& address) noexcept { if (pointer == nullptr) return false; @@ -132,10 +132,10 @@ static bool ParseAddress(const wchar_t** pointer, ra::ByteAddress& address) noex return true; } -bool MemoryRegionsModel::ParseFilterRange(const std::wstring& sRange, _Out_ ra::ByteAddress& nStart, _Out_ ra::ByteAddress& nEnd) +bool MemoryRegionsModel::ParseFilterRange(const std::wstring& sRange, _Out_ ra::data::ByteAddress& nStart, _Out_ ra::data::ByteAddress& nEnd) { const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); - const auto nMax = gsl::narrow_cast(pEmulatorContext.TotalMemorySize()) - 1; + const auto nMax = gsl::narrow_cast(pEmulatorContext.TotalMemorySize()) - 1; if (sRange.empty()) { diff --git a/src/data/models/MemoryRegionsModel.hh b/src/data/models/MemoryRegionsModel.hh index 6186e5053..e5f2f17e5 100644 --- a/src/data/models/MemoryRegionsModel.hh +++ b/src/data/models/MemoryRegionsModel.hh @@ -4,7 +4,7 @@ #include "AssetModelBase.hh" -#include "data/Types.hh" +#include "data/Memory.hh" namespace ra { namespace data { @@ -28,16 +28,16 @@ public: struct MemoryRegion { std::wstring sLabel; - ra::ByteAddress nStartAddress = 0; - ra::ByteAddress nEndAddress = 0; + ra::data::ByteAddress nStartAddress = 0; + ra::data::ByteAddress nEndAddress = 0; }; const std::vector& CustomRegions() const noexcept { return m_vRegions; } void ResetCustomRegions(); - void AddCustomRegion(ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, const std::wstring& sLabel); + void AddCustomRegion(ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, const std::wstring& sLabel); - static bool ParseFilterRange(const std::wstring& sRange, _Out_ ra::ByteAddress& nStart, _Out_ ra::ByteAddress& nEnd); + static bool ParseFilterRange(const std::wstring& sRange, _Out_ ra::data::ByteAddress& nStart, _Out_ ra::data::ByteAddress& nEnd); protected: diff --git a/src/data/models/TriggerValidation.cpp b/src/data/models/TriggerValidation.cpp index 14ad3ec8c..b6862ae1c 100644 --- a/src/data/models/TriggerValidation.cpp +++ b/src/data/models/TriggerValidation.cpp @@ -16,40 +16,6 @@ namespace ra { namespace data { namespace models { -MemSize TriggerValidation::MapRcheevosMemSize(char nSize) noexcept -{ - switch (nSize) - { - case RC_MEMSIZE_BIT_0: return MemSize::Bit_0; - case RC_MEMSIZE_BIT_1: return MemSize::Bit_1; - case RC_MEMSIZE_BIT_2: return MemSize::Bit_2; - case RC_MEMSIZE_BIT_3: return MemSize::Bit_3; - case RC_MEMSIZE_BIT_4: return MemSize::Bit_4; - case RC_MEMSIZE_BIT_5: return MemSize::Bit_5; - case RC_MEMSIZE_BIT_6: return MemSize::Bit_6; - case RC_MEMSIZE_BIT_7: return MemSize::Bit_7; - case RC_MEMSIZE_LOW: return MemSize::Nibble_Lower; - case RC_MEMSIZE_HIGH: return MemSize::Nibble_Upper; - case RC_MEMSIZE_8_BITS: return MemSize::EightBit; - case RC_MEMSIZE_16_BITS: return MemSize::SixteenBit; - case RC_MEMSIZE_24_BITS: return MemSize::TwentyFourBit; - case RC_MEMSIZE_32_BITS: return MemSize::ThirtyTwoBit; - case RC_MEMSIZE_BITCOUNT: return MemSize::BitCount; - case RC_MEMSIZE_16_BITS_BE: return MemSize::SixteenBitBigEndian; - case RC_MEMSIZE_24_BITS_BE: return MemSize::TwentyFourBitBigEndian; - case RC_MEMSIZE_32_BITS_BE: return MemSize::ThirtyTwoBitBigEndian; - case RC_MEMSIZE_FLOAT: return MemSize::Float; - case RC_MEMSIZE_FLOAT_BE: return MemSize::FloatBigEndian; - case RC_MEMSIZE_MBF32: return MemSize::MBF32; - case RC_MEMSIZE_MBF32_LE: return MemSize::MBF32LE; - case RC_MEMSIZE_DOUBLE32: return MemSize::Double32; - case RC_MEMSIZE_DOUBLE32_BE: return MemSize::Double32BigEndian; - default: - assert(!"Unsupported operand size"); - return MemSize::EightBit; - } -} - static bool ValidateLeaderboardCondSet(const rc_condset_t* pCondSet, std::wstring& sError) { if (!pCondSet) @@ -95,17 +61,17 @@ static bool ValidateLeaderboardTrigger(const rc_trigger_t* pTrigger, std::wstrin static bool ValidateCodeNotesOperand(const rc_operand_t& pOperand, const ra::data::models::CodeNotesModel& pNotes, std::wstring& sError) { - const auto nMemRefSize = TriggerValidation::MapRcheevosMemSize(pOperand.size); + const auto nMemRefSize = Memory::SizeFromRcheevosSize(pOperand.size); const auto nAddress = pOperand.value.memref->address; - ra::ByteAddress nStartAddress = nAddress; - MemSize nNoteSize = MemSize::Unknown; + ra::data::ByteAddress nStartAddress = nAddress; + Memory::Size nNoteSize = Memory::Size::Unknown; const auto* pNote = pNotes.FindCodeNoteModel(nAddress, false); if (pNote) { // ignore bit/nibble reads inside a known address - if (nMemRefSize == MemSize::BitCount || MemSizeBits(nMemRefSize) < 8) + if (nMemRefSize == Memory::Size::BitCount || Memory::SizeBits(nMemRefSize) < 8) return true; nNoteSize = pNote->GetMemSize(); @@ -127,22 +93,22 @@ static bool ValidateCodeNotesOperand(const rc_operand_t& pOperand, const ra::dat return true; // "array" and "text" are not real sizes to validate against - if (nNoteSize == MemSize::Array || nNoteSize == MemSize::Text) + if (nNoteSize == Memory::Size::Array || nNoteSize == Memory::Size::Text) return true; - if (nNoteSize == MemSize::Unknown) + if (nNoteSize == Memory::Size::Unknown) { // note exists, but did not specify a size. assume 8-bit - if (MemSizeBits(nMemRefSize) <= 8) + if (Memory::SizeBits(nMemRefSize) <= 8) return true; - sError = ra::StringPrintf(L"%s read of address %s differs from implied code note size %s", MemSizeString(nMemRefSize), - ra::ByteAddressToString(nAddress).substr(2), MemSizeString(MemSize::EightBit)); + sError = ra::StringPrintf(L"%s read of address %s differs from implied code note size %s", Memory::SizeString(nMemRefSize), + ra::ByteAddressToString(nAddress).substr(2), Memory::SizeString(Memory::Size::EightBit)); } else { - sError = ra::StringPrintf(L"%s read of address %s differs from code note size %s", MemSizeString(nMemRefSize), - ra::ByteAddressToString(nAddress).substr(2), MemSizeString(nNoteSize)); + sError = ra::StringPrintf(L"%s read of address %s differs from code note size %s", Memory::SizeString(nMemRefSize), + ra::ByteAddressToString(nAddress).substr(2), Memory::SizeString(nNoteSize)); } if (nStartAddress != nAddress) diff --git a/src/data/models/TriggerValidation.hh b/src/data/models/TriggerValidation.hh index 2617a0d59..538d9f941 100644 --- a/src/data/models/TriggerValidation.hh +++ b/src/data/models/TriggerValidation.hh @@ -13,7 +13,6 @@ class TriggerValidation { public: static bool Validate(const std::string& sTrigger, std::wstring& sError, AssetType nType); - static MemSize MapRcheevosMemSize(char nSize) noexcept; }; } // namespace models diff --git a/src/data/search/MemBlock.cpp b/src/data/search/MemBlock.cpp index f5b1d7105..fdb7f82af 100644 --- a/src/data/search/MemBlock.cpp +++ b/src/data/search/MemBlock.cpp @@ -231,7 +231,7 @@ uint8_t* MemBlock::AllocateMatchingAddresses() noexcept return &m_vAddresses[0]; } -void MemBlock::SetMatchingAddresses(std::vector& vAddresses, gsl::index nFirstIndex, gsl::index nLastIndex) +void MemBlock::SetMatchingAddresses(std::vector& vAddresses, gsl::index nFirstIndex, gsl::index nLastIndex) { m_nMatchingAddresses = gsl::narrow_cast(nLastIndex - nFirstIndex) + 1; @@ -267,7 +267,7 @@ void MemBlock::CopyMatchingAddresses(const MemBlock& pSource) } } -void MemBlock::ExcludeMatchingAddress(ra::ByteAddress nAddress) +void MemBlock::ExcludeMatchingAddress(ra::data::ByteAddress nAddress) { const auto nAddressesSize = (m_nMaxAddresses + 7) / 8; unsigned char* pAddresses = nullptr; @@ -292,7 +292,7 @@ void MemBlock::ExcludeMatchingAddress(ra::ByteAddress nAddress) --m_nMatchingAddresses; } -bool MemBlock::ContainsAddress(ra::ByteAddress nAddress) const noexcept +bool MemBlock::ContainsAddress(ra::data::ByteAddress nAddress) const noexcept { if (nAddress < m_nFirstAddress) return false; @@ -301,7 +301,7 @@ bool MemBlock::ContainsAddress(ra::ByteAddress nAddress) const noexcept return (nAddress < m_nMaxAddresses); } -bool MemBlock::ContainsMatchingAddress(ra::ByteAddress nAddress) const +bool MemBlock::ContainsMatchingAddress(ra::data::ByteAddress nAddress) const { if (nAddress < m_nFirstAddress) return false; @@ -319,15 +319,15 @@ bool MemBlock::ContainsMatchingAddress(ra::ByteAddress nAddress) const return (pAddresses[nIndex >> 3] & nBit); } -ra::ByteAddress MemBlock::GetMatchingAddress(gsl::index nIndex) const noexcept +ra::data::ByteAddress MemBlock::GetMatchingAddress(gsl::index nIndex) const noexcept { if (AreAllAddressesMatching()) - return m_nFirstAddress + gsl::narrow_cast(nIndex); + return m_nFirstAddress + gsl::narrow_cast(nIndex); const auto nAddressesSize = (m_nMaxAddresses + 7) / 8; const uint8_t* pAddresses = (nAddressesSize > sizeof(m_vAddresses)) ? m_pAddresses : &m_vAddresses[0]; - ra::ByteAddress nAddress = m_nFirstAddress; - const ra::ByteAddress nStop = m_nFirstAddress + m_nMaxAddresses; + ra::data::ByteAddress nAddress = m_nFirstAddress; + const ra::data::ByteAddress nStop = m_nFirstAddress + m_nMaxAddresses; uint8_t nMask = 0x01; if (pAddresses != nullptr) diff --git a/src/data/search/MemBlock.hh b/src/data/search/MemBlock.hh index 3d999f48f..acd38be14 100644 --- a/src/data/search/MemBlock.hh +++ b/src/data/search/MemBlock.hh @@ -2,7 +2,7 @@ #define SEARCH_MEMBLOCK_H #pragma once -#include "data\Types.hh" +#include "data\Memory.hh" namespace ra { namespace data { @@ -52,23 +52,23 @@ public: return IsBytesAllocated() ? &m_pAllocatedMemory->pBytes[0] : &m_vBytes[0]; } - void SetFirstAddress(ra::ByteAddress nAddress) noexcept { m_nFirstAddress = nAddress; } - ra::ByteAddress GetFirstAddress() const noexcept { return m_nFirstAddress; } + void SetFirstAddress(ra::data::ByteAddress nAddress) noexcept { m_nFirstAddress = nAddress; } + ra::data::ByteAddress GetFirstAddress() const noexcept { return m_nFirstAddress; } uint32_t GetBytesSize() const noexcept { return m_nBytesSize & 0x00FFFFFF; } bool IsBytesAllocated() const noexcept { return GetBytesSize() > sizeof(m_vBytes); } void SetMaxAddresses(uint32_t nMaxAddresses) noexcept { m_nMaxAddresses = nMaxAddresses; } uint32_t GetMaxAddresses() const noexcept { return m_nMaxAddresses; } - bool ContainsAddress(ra::ByteAddress nAddress) const noexcept; + bool ContainsAddress(ra::data::ByteAddress nAddress) const noexcept; - void SetMatchingAddresses(std::vector& vAddresses, gsl::index nFirstIndex, gsl::index nLastIndex); + void SetMatchingAddresses(std::vector& vAddresses, gsl::index nFirstIndex, gsl::index nLastIndex); void CopyMatchingAddresses(const MemBlock& pSource); - void ExcludeMatchingAddress(ra::ByteAddress nAddress); - bool ContainsMatchingAddress(ra::ByteAddress nAddress) const; + void ExcludeMatchingAddress(ra::data::ByteAddress nAddress); + bool ContainsMatchingAddress(ra::data::ByteAddress nAddress) const; void SetMatchingAddressCount(uint32_t nCount) noexcept { m_nMatchingAddresses = nCount; } uint32_t GetMatchingAddressCount() const noexcept { return m_nMatchingAddresses; } - ra::ByteAddress GetMatchingAddress(gsl::index nIndex) const noexcept; + ra::data::ByteAddress GetMatchingAddress(gsl::index nIndex) const noexcept; bool AreAllAddressesMatching() const noexcept { return m_nMatchingAddresses == m_nMaxAddresses; } const uint8_t* GetMatchingAddressPointer() const noexcept @@ -80,7 +80,7 @@ public: return (nAddressesSize > sizeof(m_vAddresses)) ? m_pAddresses : &m_vAddresses[0]; } - bool HasMatchingAddress(const uint8_t* pMatchingAddresses, ra::ByteAddress nAddress) const noexcept + bool HasMatchingAddress(const uint8_t* pMatchingAddresses, ra::data::ByteAddress nAddress) const noexcept { if (!pMatchingAddresses) return true; @@ -100,7 +100,7 @@ private: uint8_t* AllocateMatchingAddresses() noexcept; void SetRepeat(uint32_t nCount, uint32_t nValue) noexcept; - ra::ByteAddress m_nFirstAddress; // 4 bytes + ra::data::ByteAddress m_nFirstAddress; // 4 bytes uint32_t m_nBytesSize; // 4 bytes union // 8 bytes diff --git a/src/devkit/RADevKit.vcxproj b/src/devkit/RADevKit.vcxproj index f5bfa90e4..868d26dee 100644 --- a/src/devkit/RADevKit.vcxproj +++ b/src/devkit/RADevKit.vcxproj @@ -60,6 +60,7 @@ + @@ -72,6 +73,7 @@ + diff --git a/src/devkit/RADevKit.vcxproj.filters b/src/devkit/RADevKit.vcxproj.filters index f9e5b2aed..f55b15350 100644 --- a/src/devkit/RADevKit.vcxproj.filters +++ b/src/devkit/RADevKit.vcxproj.filters @@ -114,6 +114,9 @@ context\impl + + data + @@ -146,5 +149,8 @@ context\impl + + data + \ No newline at end of file diff --git a/src/devkit/data/Memory.cpp b/src/devkit/data/Memory.cpp new file mode 100644 index 000000000..28950be17 --- /dev/null +++ b/src/devkit/data/Memory.cpp @@ -0,0 +1,213 @@ +#include "Memory.hh" + +#include "util\Strings.hh" + +#include +#include + +namespace ra { +namespace data { + +Memory::Size Memory::SizeFromRcheevosSize(uint8_t nSize) noexcept +{ + switch (nSize) + { + case RC_MEMSIZE_BIT_0: return Size::Bit_0; + case RC_MEMSIZE_BIT_1: return Size::Bit_1; + case RC_MEMSIZE_BIT_2: return Size::Bit_2; + case RC_MEMSIZE_BIT_3: return Size::Bit_3; + case RC_MEMSIZE_BIT_4: return Size::Bit_4; + case RC_MEMSIZE_BIT_5: return Size::Bit_5; + case RC_MEMSIZE_BIT_6: return Size::Bit_6; + case RC_MEMSIZE_BIT_7: return Size::Bit_7; + case RC_MEMSIZE_LOW: return Size::Nibble_Lower; + case RC_MEMSIZE_HIGH: return Size::Nibble_Upper; + case RC_MEMSIZE_8_BITS: return Size::EightBit; + case RC_MEMSIZE_16_BITS: return Size::SixteenBit; + case RC_MEMSIZE_24_BITS: return Size::TwentyFourBit; + case RC_MEMSIZE_32_BITS: return Size::ThirtyTwoBit; + case RC_MEMSIZE_BITCOUNT: return Size::BitCount; + case RC_MEMSIZE_16_BITS_BE: return Size::SixteenBitBigEndian; + case RC_MEMSIZE_24_BITS_BE: return Size::TwentyFourBitBigEndian; + case RC_MEMSIZE_32_BITS_BE: return Size::ThirtyTwoBitBigEndian; + case RC_MEMSIZE_FLOAT: return Size::Float; + case RC_MEMSIZE_FLOAT_BE: return Size::FloatBigEndian; + case RC_MEMSIZE_MBF32: return Size::MBF32; + case RC_MEMSIZE_MBF32_LE: return Size::MBF32LE; + case RC_MEMSIZE_DOUBLE32: return Size::Double32; + case RC_MEMSIZE_DOUBLE32_BE: return Size::Double32BigEndian; + default: + assert(!"Unsupported operand size"); + return Size::EightBit; + } +} + +static std::wstring U32ToFloatString(unsigned nValue, char nFloatType) +{ + rc_typed_value_t value; + value.type = RC_VALUE_TYPE_UNSIGNED; + value.value.u32 = nValue; + rc_transform_memref_value(&value, nFloatType); + + if (value.value.f32 < 0.000001) + { + if (value.value.f32 > 0.0) + return ra::StringPrintf(L"%e", value.value.f32); + + if (value.value.f32 < 0.0 && value.value.f32 > -0.000001) + return ra::StringPrintf(L"%e", value.value.f32); + } + + std::wstring sValue = ra::StringPrintf(L"%f", value.value.f32); + while (sValue.back() == L'0') + sValue.pop_back(); + if (sValue.back() == L'.') + sValue.push_back(L'0'); + + return sValue; +} + +std::wstring Memory::FormatValue(unsigned nValue, Memory::Size nSize, Memory::Format nFormat) +{ + switch (nSize) + { + case Size::Float: + return U32ToFloatString(nValue, RC_MEMSIZE_FLOAT); + + case Size::FloatBigEndian: + return U32ToFloatString(nValue, RC_MEMSIZE_FLOAT_BE); + + case Size::Double32: + return U32ToFloatString(nValue, RC_MEMSIZE_DOUBLE32); + + case Size::Double32BigEndian: + return U32ToFloatString(nValue, RC_MEMSIZE_DOUBLE32_BE); + + case Size::MBF32: + return U32ToFloatString(nValue, RC_MEMSIZE_MBF32); + + case Size::MBF32LE: + return U32ToFloatString(nValue, RC_MEMSIZE_MBF32_LE); + + default: + if (nFormat == Format::Dec) + return std::to_wstring(nValue); + + const auto nBits = SizeBits(nSize); + switch (nBits / 8) + { + default: return ra::StringPrintf(L"%x", nValue); + case 1: return ra::StringPrintf(L"%02x", nValue); + case 2: return ra::StringPrintf(L"%04x", nValue); + case 3: return ra::StringPrintf(L"%06x", nValue); + case 4: return ra::StringPrintf(L"%08x", nValue); + } + } +} + +unsigned Memory::FloatToU32(float fValue, Memory::Size nFloatType) noexcept +{ + // this leverages the fact that Windows uses IEE754 floats + union u + { + float fValue; + unsigned nValue; + } uUnion; + + uUnion.fValue = fValue; + + switch (nFloatType) + { + case Size::Float: + return uUnion.nValue; + + case Size::FloatBigEndian: + return ReverseBytes(uUnion.nValue); + + case Size::Double32: + case Size::Double32BigEndian: + { + // double has 3 extra bits for the exponent + const int32_t exponent = ra::to_signed((uUnion.nValue >> 23) & 0xFF) - 127 + 1023; // change exponent base from 127 to 1023 + const unsigned nValue = ((uUnion.nValue & 0x007FFFFF) >> 3) | // mantissa is shifted three bits right + ((ra::to_unsigned(exponent) & 0x7FF) << 20) | // adjusted exponent + ((uUnion.nValue & 0x80000000)); // sign is unmoved + + return (nFloatType == Size::Double32) ? nValue : ReverseBytes(nValue); + } + + case Size::MBF32: + case Size::MBF32LE: + { + // MBF32 puts the sign after the exponent, uses a 129 base instead of 127, and stores in big endian + unsigned nValue = ((uUnion.nValue & 0x007FFFFF)) | // mantissa is unmoved + ((uUnion.nValue & 0x7F800000) << 1) | // exponent is shifted one bit left + ((uUnion.nValue & 0x80000000) >> 8); // sign is shifted eight bits right + + nValue += 0x02000000; // adjust to 129 base + return (nFloatType == Size::MBF32LE) ? nValue : ReverseBytes(nValue); + } + + default: + return 0; + } +} + +float Memory::U32ToFloat(unsigned nValue, Memory::Size nFloatType) noexcept +{ + // this leverages the fact that Windows uses IEE754 floats + union u + { + float fValue; + unsigned nValue; + } uUnion{}; + + switch (nFloatType) + { + case Size::FloatBigEndian: + nValue = ReverseBytes(nValue); + __fallthrough; // to Memory::Size::Float + + case Size::Float: + uUnion.nValue = nValue; + break; + + case Size::Double32BigEndian: + nValue = ReverseBytes(nValue); + __fallthrough; // to Memory::Size::Double32 + + case Size::Double32: + { + // double has 3 extra bits for the exponent, and uses a 1023 base instead of a 127 base + const int32_t exponent = ra::to_signed((uUnion.nValue >> 20) & 0x7FF) - 1023 + 127; // change exponent base from 1023 to 127 + nValue = ((uUnion.nValue & 0x000FFFFF) << 3) | // mantissa is shifted three bits left + ((ra::to_unsigned(exponent) & 0xFF) << 23) | // adjusted exponent + ((uUnion.nValue & 0x80000000)); // sign is unmoved + + uUnion.nValue = nValue; + break; + } + + case Size::MBF32: + nValue = ReverseBytes(nValue); + __fallthrough; // to Memory::Size::MBF32LE + + case Size::MBF32LE: + // MBF32 puts the sign after the exponent, uses a 129 base instead of 127, and stores in big endian + nValue -= 0x02000000; // adjust to 129 base + nValue = ((nValue & 0x007FFFFF)) | // mantissa is unmoved + ((nValue & 0xFF000000) >> 1) | // exponent is shifted one bit right + ((nValue & 0x00800000) << 8); // sign is shifted eight bits left + + uUnion.nValue = nValue; + break; + + default: + return 0.0f; + } + + return uUnion.fValue; +} + +} // namespace data +} // namespace ra diff --git a/src/devkit/data/Memory.hh b/src/devkit/data/Memory.hh new file mode 100644 index 000000000..a1cf15e1a --- /dev/null +++ b/src/devkit/data/Memory.hh @@ -0,0 +1,252 @@ +#ifndef RA_DATA_MEMORY_H +#define RA_DATA_MEMORY_H +#pragma once + +#include +#include + +namespace ra { +namespace data { + +using ByteAddress = uint32_t; + +class Memory { +public: + enum class Size : uint8_t + { + Bit_0, + Bit_1, + Bit_2, + Bit_3, + Bit_4, + Bit_5, + Bit_6, + Bit_7, + Nibble_Lower, + Nibble_Upper, + EightBit, + SixteenBit, + TwentyFourBit, + ThirtyTwoBit, + BitCount, + SixteenBitBigEndian, + TwentyFourBitBigEndian, + ThirtyTwoBitBigEndian, + Float, + MBF32, + MBF32LE, + FloatBigEndian, + Double32, + Double32BigEndian, + + // extended sizes not supported by rcheevos + Unknown, + Text, + Array + }; + + static constexpr const wchar_t* SizeString(Size nSize) + { + switch (nSize) + { + case Size::Bit_0: + return L"Bit0"; + case Size::Bit_1: + return L"Bit1"; + case Size::Bit_2: + return L"Bit2"; + case Size::Bit_3: + return L"Bit3"; + case Size::Bit_4: + return L"Bit4"; + case Size::Bit_5: + return L"Bit5"; + case Size::Bit_6: + return L"Bit6"; + case Size::Bit_7: + return L"Bit7"; + case Size::Nibble_Lower: + return L"Lower4"; + case Size::Nibble_Upper: + return L"Upper4"; + case Size::EightBit: + return L"8-bit"; + case Size::SixteenBit: + return L"16-bit"; + case Size::TwentyFourBit: + return L"24-bit"; + case Size::ThirtyTwoBit: + return L"32-bit"; + case Size::BitCount: + return L"BitCount"; + case Size::SixteenBitBigEndian: + return L"16-bit BE"; + case Size::TwentyFourBitBigEndian: + return L"24-bit BE"; + case Size::ThirtyTwoBitBigEndian: + return L"32-bit BE"; + case Size::Float: + return L"Float"; + case Size::MBF32: + return L"MBF32"; + case Size::MBF32LE: + return L"MBF32 LE"; + case Size::FloatBigEndian: + return L"Float BE"; + case Size::Double32: + return L"Double32"; + case Size::Double32BigEndian: + return L"Double32 BE"; + case Size::Text: + return L"ASCII"; + case Size::Array: + return L"Array"; + default: + case Size::Unknown: + return L"Unknown"; + } + } + + static constexpr unsigned int SizeBits(Size nSize) + { + switch (nSize) + { + case Size::ThirtyTwoBit: + case Size::ThirtyTwoBitBigEndian: + case Size::Float: + case Size::FloatBigEndian: + case Size::MBF32: + case Size::MBF32LE: + case Size::Double32: + case Size::Double32BigEndian: + return 32; + + case Size::EightBit: + return 8; + + case Size::SixteenBit: + case Size::SixteenBitBigEndian: + return 16; + + case Size::TwentyFourBit: + case Size::TwentyFourBitBigEndian: + return 24; + + case Size::BitCount: // value will be 0-8 + case Size::Nibble_Lower: + case Size::Nibble_Upper: + return 4; + + case Size::Bit_0: + case Size::Bit_1: + case Size::Bit_2: + case Size::Bit_3: + case Size::Bit_4: + case Size::Bit_5: + case Size::Bit_6: + case Size::Bit_7: + return 1; + + default: + return 0; + } + } + + static constexpr unsigned int SizeBytes(Size nSize) + { + switch (nSize) + { + case Size::ThirtyTwoBit: + case Size::ThirtyTwoBitBigEndian: + case Size::Float: + case Size::FloatBigEndian: + case Size::MBF32: + case Size::MBF32LE: + return 4; + + case Size::SixteenBit: + case Size::SixteenBitBigEndian: + return 2; + + case Size::TwentyFourBit: + case Size::TwentyFourBitBigEndian: + return 3; + + case Size::Text: + return 0; + + default: + return 1; + } + } + + static constexpr unsigned int SizeMax(Size nSize) + { + const auto nBits = SizeBits(nSize); + if (nBits >= 32) + return 0xFFFFFFFF; + + return (1 << nBits) - 1; + } + + static constexpr bool SizeIsFloat(Size nSize) + { + switch (nSize) + { + case Size::Float: + case Size::FloatBigEndian: + case Size::MBF32: + case Size::MBF32LE: + case Size::Double32: + case Size::Double32BigEndian: + return true; + + default: + return false; + } + } + + static constexpr bool SizeIsBigEndian(Size nSize) + { + switch (nSize) + { + case Size::SixteenBitBigEndian: + case Size::TwentyFourBitBigEndian: + case Size::ThirtyTwoBitBigEndian: + case Size::FloatBigEndian: + case Size::Double32BigEndian: + case Size::MBF32: + return true; + + default: + return false; + } + } + + static Size SizeFromRcheevosSize(uint8_t nSize) noexcept; + + enum class Format : uint8_t + { + Hex, + Dec, + Unknown, + }; + + static std::wstring FormatValue(unsigned nValue, Size nSize, Format nFormat); + + static unsigned FloatToU32(float fValue, Size nFloatType) noexcept; + static float U32ToFloat(unsigned nValue, Size nFloatType) noexcept; + + static constexpr uint32_t ReverseBytes(uint32_t nValue) noexcept + { + return ((nValue & 0xFF000000) >> 24) | + ((nValue & 0x00FF0000) >> 8) | + ((nValue & 0x0000FF00) << 8) | + ((nValue & 0x000000FF) << 24); + } +}; + +} // namespace data +} // namespace ra + +#endif RA_DATA_MEMORY_H diff --git a/src/services/AchievementLogicSerializer.cpp b/src/services/AchievementLogicSerializer.cpp index 7595e5d6a..c27b066cf 100644 --- a/src/services/AchievementLogicSerializer.cpp +++ b/src/services/AchievementLogicSerializer.cpp @@ -69,7 +69,7 @@ void AchievementLogicSerializer::AppendConditionType(std::string& sBuffer, Trigg sBuffer.push_back(':'); } -void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOperandType nType, MemSize nSize, uint32_t nValue) +void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size nSize, uint32_t nValue) { switch (nType) { @@ -117,69 +117,69 @@ void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOper switch (nSize) { - case MemSize::BitCount: sBuffer.push_back('K'); break; - case MemSize::Bit_0: sBuffer.push_back('M'); break; - case MemSize::Bit_1: sBuffer.push_back('N'); break; - case MemSize::Bit_2: sBuffer.push_back('O'); break; - case MemSize::Bit_3: sBuffer.push_back('P'); break; - case MemSize::Bit_4: sBuffer.push_back('Q'); break; - case MemSize::Bit_5: sBuffer.push_back('R'); break; - case MemSize::Bit_6: sBuffer.push_back('S'); break; - case MemSize::Bit_7: sBuffer.push_back('T'); break; - case MemSize::Nibble_Lower: sBuffer.push_back('L'); break; - case MemSize::Nibble_Upper: sBuffer.push_back('U'); break; - case MemSize::EightBit: sBuffer.push_back('H'); break; - case MemSize::TwentyFourBit: sBuffer.push_back('W'); break; - case MemSize::ThirtyTwoBit: sBuffer.push_back('X'); break; - case MemSize::SixteenBit: sBuffer.push_back(' '); break; - case MemSize::ThirtyTwoBitBigEndian: sBuffer.push_back('G'); break; - case MemSize::SixteenBitBigEndian: sBuffer.push_back('I'); break; - case MemSize::TwentyFourBitBigEndian:sBuffer.push_back('J'); break; - - case MemSize::Float: + case ra::data::Memory::Size::BitCount: sBuffer.push_back('K'); break; + case ra::data::Memory::Size::Bit_0: sBuffer.push_back('M'); break; + case ra::data::Memory::Size::Bit_1: sBuffer.push_back('N'); break; + case ra::data::Memory::Size::Bit_2: sBuffer.push_back('O'); break; + case ra::data::Memory::Size::Bit_3: sBuffer.push_back('P'); break; + case ra::data::Memory::Size::Bit_4: sBuffer.push_back('Q'); break; + case ra::data::Memory::Size::Bit_5: sBuffer.push_back('R'); break; + case ra::data::Memory::Size::Bit_6: sBuffer.push_back('S'); break; + case ra::data::Memory::Size::Bit_7: sBuffer.push_back('T'); break; + case ra::data::Memory::Size::Nibble_Lower: sBuffer.push_back('L'); break; + case ra::data::Memory::Size::Nibble_Upper: sBuffer.push_back('U'); break; + case ra::data::Memory::Size::EightBit: sBuffer.push_back('H'); break; + case ra::data::Memory::Size::TwentyFourBit: sBuffer.push_back('W'); break; + case ra::data::Memory::Size::ThirtyTwoBit: sBuffer.push_back('X'); break; + case ra::data::Memory::Size::SixteenBit: sBuffer.push_back(' '); break; + case ra::data::Memory::Size::ThirtyTwoBitBigEndian: sBuffer.push_back('G'); break; + case ra::data::Memory::Size::SixteenBitBigEndian: sBuffer.push_back('I'); break; + case ra::data::Memory::Size::TwentyFourBitBigEndian:sBuffer.push_back('J'); break; + + case ra::data::Memory::Size::Float: sBuffer.pop_back(); sBuffer.pop_back(); sBuffer.push_back('f'); sBuffer.push_back('F'); break; - case MemSize::FloatBigEndian: + case ra::data::Memory::Size::FloatBigEndian: sBuffer.pop_back(); sBuffer.pop_back(); sBuffer.push_back('f'); sBuffer.push_back('B'); break; - case MemSize::Double32: + case ra::data::Memory::Size::Double32: sBuffer.pop_back(); sBuffer.pop_back(); sBuffer.push_back('f'); sBuffer.push_back('H'); break; - case MemSize::Double32BigEndian: + case ra::data::Memory::Size::Double32BigEndian: sBuffer.pop_back(); sBuffer.pop_back(); sBuffer.push_back('f'); sBuffer.push_back('I'); break; - case MemSize::MBF32: + case ra::data::Memory::Size::MBF32: sBuffer.pop_back(); sBuffer.pop_back(); sBuffer.push_back('f'); sBuffer.push_back('M'); break; - case MemSize::MBF32LE: + case ra::data::Memory::Size::MBF32LE: sBuffer.pop_back(); sBuffer.pop_back(); sBuffer.push_back('f'); sBuffer.push_back('L'); break; - case MemSize::Array: - case MemSize::Text: + case ra::data::Memory::Size::Array: + case ra::data::Memory::Size::Text: /* not a real size, use 32-bit BE as best approximation */ sBuffer.push_back('G'); break; @@ -192,7 +192,7 @@ void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOper sBuffer.append(ra::ByteAddressToString(nValue), 2); } -void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOperandType nType, MemSize, float fValue) +void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size, float fValue) { switch (nType) { @@ -303,7 +303,7 @@ std::string AchievementLogicSerializer::BuildMemRefChain(const ra::data::models: if (!pLeafNote.GetPointerChain(vChain, pRootNote)) return std::string(); - MemSize nSize = MemSize::ThirtyTwoBit; + auto nSize = ra::data::Memory::Size::ThirtyTwoBit; uint32_t nMask = 0xFFFFFFFF; uint32_t nOffset = 0; @@ -319,7 +319,7 @@ std::string AchievementLogicSerializer::BuildMemRefChain(const ra::data::models: std::string sBuffer; size_t nBitmaskOffset = std::string::npos; - ra::ByteAddress nPointerBase = 0, nAddress = 0; + ra::data::ByteAddress nPointerBase = 0, nAddress = 0; for (size_t i = 0; i < vChain.size() - 1; ++i) { const auto* pNote = vChain.at(i); @@ -344,16 +344,16 @@ std::string AchievementLogicSerializer::BuildMemRefChain(const ra::data::models: if (nOffset != 0) { AppendOperator(sBuffer, ra::services::TriggerOperatorType::Subtract); - AppendOperand(sBuffer, ra::services::TriggerOperandType::Value, MemSize::ThirtyTwoBit, nOffset); + AppendOperand(sBuffer, ra::services::TriggerOperandType::Value, ra::data::Memory::Size::ThirtyTwoBit, nOffset); } else if (nMask != 0xFFFFFFFF) { - const auto nBitsMask = ra::to_unsigned((1 << ra::data::MemSizeBits(nSize)) - 1); + const auto nBitsMask = ra::to_unsigned((1 << ra::data::Memory::SizeBits(nSize)) - 1); if (nMask != nBitsMask) { nBitmaskOffset = sBuffer.length(); AppendOperator(sBuffer, ra::services::TriggerOperatorType::BitwiseAnd); - AppendOperand(sBuffer, ra::services::TriggerOperandType::Value, MemSize::ThirtyTwoBit, nMask); + AppendOperand(sBuffer, ra::services::TriggerOperandType::Value, ra::data::Memory::Size::ThirtyTwoBit, nMask); } } @@ -370,8 +370,8 @@ std::string AchievementLogicSerializer::BuildMemRefChain(const ra::data::models: AppendConditionType(sBuffer, ra::services::TriggerConditionType::Measured); nSize = pLeafNote.GetMemSize(); - if (nSize == MemSize::Unknown) - nSize = MemSize::EightBit; + if (nSize == ra::data::Memory::Size::Unknown) + nSize = ra::data::Memory::Size::EightBit; AppendOperand(sBuffer, ra::services::TriggerOperandType::Address, nSize, nAddress); diff --git a/src/services/AchievementLogicSerializer.hh b/src/services/AchievementLogicSerializer.hh index 5803f1367..4429be601 100644 --- a/src/services/AchievementLogicSerializer.hh +++ b/src/services/AchievementLogicSerializer.hh @@ -2,6 +2,7 @@ #define RA_ACHIEVEMENT_LOGIC_SERIALIZER_HH #pragma once +#include "data\Memory.hh" #include "data\Types.hh" #include "data\models\CodeNoteModel.hh" @@ -74,8 +75,8 @@ public: static void AppendConditionType(std::string& sBuffer, TriggerConditionType nType); - static void AppendOperand(std::string& sBuffer, TriggerOperandType nType, MemSize nSize, uint32_t nValue); - static void AppendOperand(std::string& sBuffer, TriggerOperandType nType, MemSize nSize, float fValue); + static void AppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size nSize, uint32_t nValue); + static void AppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size nSize, float fValue); static void AppendOperator(std::string& sBuffer, TriggerOperatorType nType); diff --git a/src/services/AchievementRuntime.cpp b/src/services/AchievementRuntime.cpp index c48211cd4..f32df786c 100644 --- a/src/services/AchievementRuntime.cpp +++ b/src/services/AchievementRuntime.cpp @@ -1553,7 +1553,7 @@ void AchievementRuntime::Idle() const rc_client_idle(pClient); } -void AchievementRuntime::InvalidateAddress(ra::ByteAddress nAddress) +void AchievementRuntime::InvalidateAddress(ra::data::ByteAddress nAddress) { auto* pClient = ra::services::ServiceLocator::Get().GetClient(); @@ -2708,9 +2708,9 @@ extern "C" unsigned int rc_peek_callback(unsigned int nAddress, unsigned int nBy case 1: return pEmulatorContext.ReadMemoryByte(nAddress); case 2: - return pEmulatorContext.ReadMemory(nAddress, MemSize::SixteenBit); + return pEmulatorContext.ReadMemory(nAddress, ra::data::Memory::Size::SixteenBit); case 4: - return pEmulatorContext.ReadMemory(nAddress, MemSize::ThirtyTwoBit); + return pEmulatorContext.ReadMemory(nAddress, ra::data::Memory::Size::ThirtyTwoBit); default: return 0U; } diff --git a/src/services/AchievementRuntime.hh b/src/services/AchievementRuntime.hh index 5e46587ba..443c4ab79 100644 --- a/src/services/AchievementRuntime.hh +++ b/src/services/AchievementRuntime.hh @@ -86,7 +86,7 @@ public: /// std::wstring GetRichPresenceDisplayString() const; - void InvalidateAddress(ra::ByteAddress nAddress); + void InvalidateAddress(ra::data::ByteAddress nAddress); /// /// Processes all active achievements for the current frame. diff --git a/src/services/AchievementRuntimeExports.cpp b/src/services/AchievementRuntimeExports.cpp index e354e2611..231d6f9a1 100644 --- a/src/services/AchievementRuntimeExports.cpp +++ b/src/services/AchievementRuntimeExports.cpp @@ -70,7 +70,7 @@ class AchievementRuntimeExports : private AchievementRuntime private: typedef struct MemoryBlockWrapper { - ra::ByteAddress nOffset; + ra::data::ByteAddress nOffset; ra::data::context::EmulatorContext::MemoryReadFunction* fReadByte; ra::data::context::EmulatorContext::MemoryWriteFunction* fWriteByte; ra::data::context::EmulatorContext::MemoryReadBlockFunction* fReadBlock; diff --git a/src/services/Search/SearchImpl.cpp b/src/services/Search/SearchImpl.cpp index b95a2c8ba..382ab018e 100644 --- a/src/services/Search/SearchImpl.cpp +++ b/src/services/Search/SearchImpl.cpp @@ -8,7 +8,7 @@ namespace ra { namespace services { namespace search { -bool SearchImpl::ContainsAddress(const SearchResults& srResults, ra::ByteAddress nAddress) const +bool SearchImpl::ContainsAddress(const SearchResults& srResults, ra::data::ByteAddress nAddress) const { if (nAddress & (GetStride() - 1)) return false; @@ -59,7 +59,7 @@ bool SearchImpl::ValidateFilterValue(SearchResults& srNew) const return true; } -void SearchImpl::ApplyFilter(SearchResults& srNew, const SearchResults& srPrevious, std::function pReadMemory) const +void SearchImpl::ApplyFilter(SearchResults& srNew, const SearchResults& srPrevious, std::function pReadMemory) const { uint32_t nLargestBlock = 0U; for (auto& block : srPrevious.m_vBlocks) @@ -69,7 +69,7 @@ void SearchImpl::ApplyFilter(SearchResults& srNew, const SearchResults& srPrevio } std::vector vMemory(nLargestBlock); - std::vector vMatches; + std::vector vMatches; uint32_t nAdjustment = 0; switch (srNew.GetFilterType()) @@ -210,10 +210,10 @@ bool SearchImpl::GetValueAtVirtualAddress(const SearchResults& srResults, Search std::wstring SearchImpl::GetFormattedValue(const SearchResults&, const SearchResult& pResult) const { - return L"0x" + ra::data::MemSizeFormat(pResult.nValue, pResult.nSize, MemFormat::Hex); + return L"0x" + ra::data::Memory::FormatValue(pResult.nValue, pResult.nSize, ra::data::Memory::Format::Hex); } -std::wstring SearchImpl::GetFormattedValue(const SearchResults& pResults, ra::ByteAddress nAddress, MemSize nSize) const +std::wstring SearchImpl::GetFormattedValue(const SearchResults& pResults, ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize) const { SearchResult pResult{ ConvertFromRealAddress(nAddress), 0, nSize }; if (GetValueAtVirtualAddress(pResults, pResult)) @@ -273,7 +273,7 @@ bool SearchImpl::MatchesFilter(const SearchResults& pResults, const SearchResult void SearchImpl::ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const + std::vector& vMatches) const { const auto nBlockAddress = pPreviousBlock.GetFirstAddress(); const auto nStride = GetStride(); @@ -284,7 +284,7 @@ void SearchImpl::ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pByte const uint32_t nValue1 = BuildValue(pScan); if (CompareValues(nValue1, nConstantValue, nComparison)) { - const ra::ByteAddress nAddress = nBlockAddress + + const ra::data::ByteAddress nAddress = nBlockAddress + ConvertFromRealAddress(gsl::narrow_cast(pScan - pBytes)); if (pPreviousBlock.HasMatchingAddress(pMatchingAddresses, nAddress)) vMatches.push_back(nAddress); @@ -294,7 +294,7 @@ void SearchImpl::ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pByte void SearchImpl::ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const + std::vector& vMatches) const { const auto* pBlockBytes = pPreviousBlock.GetBytes(); const auto nBlockAddress = pPreviousBlock.GetFirstAddress(); @@ -307,7 +307,7 @@ void SearchImpl::ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytes const uint32_t nValue2 = BuildValue(pBlockBytes) + nAdjustment; if (CompareValues(nValue1, nValue2, nComparison)) { - const ra::ByteAddress nAddress = nBlockAddress + + const ra::data::ByteAddress nAddress = nBlockAddress + ConvertFromRealAddress(gsl::narrow_cast(pScan - pBytes)); if (pPreviousBlock.HasMatchingAddress(pMatchingAddresses, nAddress)) vMatches.push_back(nAddress); @@ -333,8 +333,8 @@ uint32_t SearchImpl::BuildValue(const uint8_t* ptr) const noexcept return ptr ? ptr[0] : 0; } -void SearchImpl::AddBlocks(SearchResults& srNew, std::vector& vMatches, - std::vector& vMemory, ra::ByteAddress nPreviousBlockFirstAddress, uint32_t nPadding) const +void SearchImpl::AddBlocks(SearchResults& srNew, std::vector& vMatches, + std::vector& vMemory, ra::data::ByteAddress nPreviousBlockFirstAddress, uint32_t nPadding) const { const gsl::index nStopIndex = gsl::narrow_cast(vMatches.size()) - 1; gsl::index nFirstIndex = 0; diff --git a/src/services/Search/SearchImpl.hh b/src/services/Search/SearchImpl.hh index 31280bc0d..777d1e1bd 100644 --- a/src/services/Search/SearchImpl.hh +++ b/src/services/Search/SearchImpl.hh @@ -33,7 +33,7 @@ public: virtual uint32_t GetStride() const noexcept { return 1U; } // Gets the size of values handled by this implementation - virtual MemSize GetMemSize() const noexcept { return MemSize::EightBit; } + virtual ra::data::Memory::Size GetMemSize() const noexcept { return ra::data::Memory::Size::EightBit; } // Gets the number of addresses that are represented by the specified number of bytes virtual uint32_t GetAddressCountForBytes(uint32_t nBytes) const noexcept @@ -42,22 +42,22 @@ public: } // Gets the virtual address for a real address - virtual ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept + virtual ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept { return nAddress; } // Gets the real address for a virtual address - virtual ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept + virtual ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept { return nAddress; } // Determines if the specified real address exists in the collection of matched addresses. - virtual bool ContainsAddress(const SearchResults& srResults, ra::ByteAddress nAddress) const; + virtual bool ContainsAddress(const SearchResults& srResults, ra::data::ByteAddress nAddress) const; - void AddBlocks(SearchResults& srNew, std::vector& vMatches, std::vector& vMemory, - ra::ByteAddress nPreviousBlockFirstAddress, uint32_t nPadding) const; + void AddBlocks(SearchResults& srNew, std::vector& vMatches, std::vector& vMemory, + ra::data::ByteAddress nPreviousBlockFirstAddress, uint32_t nPadding) const; // Removes the result associated to the specified real address from the collection of matched addresses. virtual bool ExcludeResult(SearchResults& srResults, const SearchResult& pResult) const; @@ -66,7 +66,7 @@ public: // populates a vector of addresses that match the specified filter when applied to a previous search result virtual void ApplyFilter(SearchResults& srNew, const SearchResults& srPrevious, - std::function pReadMemory) const; + std::function pReadMemory) const; // gets the nIndex'th search result bool GetMatchingAddress(const SearchResults& srResults, gsl::index nIndex, @@ -85,8 +85,8 @@ public: virtual std::wstring GetFormattedValue(const SearchResults&, const SearchResult& pResult) const; // gets the formatted value for the search result at the specified real address - virtual std::wstring GetFormattedValue(const SearchResults& pResults, ra::ByteAddress nAddress, - MemSize nSize) const; + virtual std::wstring GetFormattedValue(const SearchResults& pResults, ra::data::ByteAddress nAddress, + ra::data::Memory::Size nSize) const; // updates the provided result with the current value at the provided real address virtual bool UpdateValue(const SearchResults& pResults, SearchResult& pResult, _Out_ std::wstring* sFormattedValue, @@ -108,12 +108,12 @@ protected: // generic implementation for less used search types virtual void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const; + std::vector& vMatches) const; // generic implementation for less used search types virtual void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const; + std::vector& vMatches) const; template _NODISCARD static constexpr bool CompareValues(_In_ T nLeft, _In_ T nRight, @@ -145,13 +145,13 @@ protected: template void ApplyCompareFilterLittleEndian(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, unsigned nAdjustment, - std::vector& vMatches) const + std::vector& vMatches) const { const auto* pScan = pBytes; if (pScan == nullptr) return; - ra::ByteAddress nAddress = pPreviousBlock.GetFirstAddress(); + ra::data::ByteAddress nAddress = pPreviousBlock.GetFirstAddress(); constexpr int TBlockStride = TIsConstantFilter ? 0 : TStride; const auto* pBlockBytes = TIsConstantFilter ? pScan : pPreviousBlock.GetBytes(); Expects(pBlockBytes != nullptr); @@ -226,7 +226,7 @@ protected: template void ApplyCompareFilterLittleEndian(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, - unsigned nAdjustment, std::vector& vMatches) const + unsigned nAdjustment, std::vector& vMatches) const { switch (nComparison) { @@ -257,7 +257,7 @@ protected: template void ApplyCompareFilterLittleEndian(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, - unsigned nAdjustment, std::vector& vMatches) const + unsigned nAdjustment, std::vector& vMatches) const { if (TIsConstantFilter) SearchImpl::ApplyConstantFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); @@ -276,7 +276,7 @@ protected: return !srResults.m_vBlocks.empty(); } - static ra::ByteAddress GetFirstAddress(const SearchResults& srResults) noexcept + static ra::data::ByteAddress GetFirstAddress(const SearchResults& srResults) noexcept { return srResults.m_vBlocks.front().GetFirstAddress(); } @@ -287,7 +287,7 @@ protected: } // Removes the result associated to the specified virtual address from the collection of matched addresses. - static bool ExcludeAddress(SearchResults& srResults, ra::ByteAddress nAddress) + static bool ExcludeAddress(SearchResults& srResults, ra::data::ByteAddress nAddress) { const auto nIndex = GetIndexOfBlockForVirtualAddress(srResults, nAddress); if (nIndex < srResults.m_vBlocks.size()) @@ -311,7 +311,7 @@ protected: virtual uint32_t BuildValue(const uint8_t* ptr) const noexcept; - static MemBlock& AddBlock(SearchResults& srResults, ra::ByteAddress nAddress, uint32_t nSize, + static MemBlock& AddBlock(SearchResults& srResults, ra::data::ByteAddress nAddress, uint32_t nSize, uint32_t nMaxAddresses) { return srResults.m_vBlocks.emplace_back(nAddress, nSize, nMaxAddresses); diff --git a/src/services/Search/SearchImpl_16bit.hh b/src/services/Search/SearchImpl_16bit.hh index a4b70beee..122e7c475 100644 --- a/src/services/Search/SearchImpl_16bit.hh +++ b/src/services/Search/SearchImpl_16bit.hh @@ -11,7 +11,7 @@ namespace search { class SixteenBitSearchImpl : public SearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::SixteenBit; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::SixteenBit; } unsigned int GetPadding() const noexcept override { return 1U; } @@ -26,7 +26,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -34,7 +34,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_16bit_aligned.hh b/src/services/Search/SearchImpl_16bit_aligned.hh index afd6299ff..fb972ced3 100644 --- a/src/services/Search/SearchImpl_16bit_aligned.hh +++ b/src/services/Search/SearchImpl_16bit_aligned.hh @@ -18,12 +18,12 @@ public: return nBytes / 2; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 2; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 2; } @@ -31,7 +31,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -39,7 +39,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_16bit_be.hh b/src/services/Search/SearchImpl_16bit_be.hh index 92e2cfdf4..adc65db7b 100644 --- a/src/services/Search/SearchImpl_16bit_be.hh +++ b/src/services/Search/SearchImpl_16bit_be.hh @@ -11,7 +11,7 @@ namespace search { class SixteenBitBigEndianSearchImpl : public SixteenBitSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::SixteenBitBigEndian; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::SixteenBitBigEndian; } protected: unsigned int BuildValue(const uint8_t* ptr) const noexcept override @@ -25,7 +25,7 @@ protected: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyConstantFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -33,7 +33,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyCompareFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_16bit_be_aligned.hh b/src/services/Search/SearchImpl_16bit_be_aligned.hh index 480a7c490..2846de42d 100644 --- a/src/services/Search/SearchImpl_16bit_be_aligned.hh +++ b/src/services/Search/SearchImpl_16bit_be_aligned.hh @@ -11,7 +11,7 @@ namespace search { class SixteenBitBigEndianAlignedSearchImpl : public SixteenBitAlignedSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::SixteenBitBigEndian; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::SixteenBitBigEndian; } protected: unsigned int BuildValue(const uint8_t* ptr) const noexcept override @@ -25,7 +25,7 @@ protected: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyConstantFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -33,7 +33,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyCompareFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_24bit.hh b/src/services/Search/SearchImpl_24bit.hh index a2fc51a77..4c28f9061 100644 --- a/src/services/Search/SearchImpl_24bit.hh +++ b/src/services/Search/SearchImpl_24bit.hh @@ -11,7 +11,7 @@ namespace search { class TwentyFourBitSearchImpl : public SearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::TwentyFourBit; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::TwentyFourBit; } unsigned int GetPadding() const noexcept override { return 2U; } diff --git a/src/services/Search/SearchImpl_32bit.hh b/src/services/Search/SearchImpl_32bit.hh index f37337738..7b1f5b963 100644 --- a/src/services/Search/SearchImpl_32bit.hh +++ b/src/services/Search/SearchImpl_32bit.hh @@ -11,7 +11,7 @@ namespace search { class ThirtyTwoBitSearchImpl : public SearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::ThirtyTwoBit; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::ThirtyTwoBit; } unsigned int GetPadding() const noexcept override { return 3U; } @@ -26,7 +26,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -34,7 +34,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_32bit_aligned.hh b/src/services/Search/SearchImpl_32bit_aligned.hh index 515ca2c1c..6c6c02692 100644 --- a/src/services/Search/SearchImpl_32bit_aligned.hh +++ b/src/services/Search/SearchImpl_32bit_aligned.hh @@ -18,12 +18,12 @@ public: return nBytes / 4; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 4; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 4; } @@ -31,7 +31,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -39,7 +39,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_32bit_be.hh b/src/services/Search/SearchImpl_32bit_be.hh index 93491bcb2..b7cd80604 100644 --- a/src/services/Search/SearchImpl_32bit_be.hh +++ b/src/services/Search/SearchImpl_32bit_be.hh @@ -10,7 +10,7 @@ namespace search { class ThirtyTwoBitBigEndianSearchImpl : public ThirtyTwoBitSearchImpl { - MemSize GetMemSize() const noexcept override { return MemSize::ThirtyTwoBitBigEndian; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::ThirtyTwoBitBigEndian; } unsigned int BuildValue(const uint8_t* ptr) const noexcept override { @@ -23,7 +23,7 @@ class ThirtyTwoBitBigEndianSearchImpl : public ThirtyTwoBitSearchImpl protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyConstantFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -31,7 +31,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyCompareFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_32bit_be_aligned.hh b/src/services/Search/SearchImpl_32bit_be_aligned.hh index be06f0cf3..ea77997b8 100644 --- a/src/services/Search/SearchImpl_32bit_be_aligned.hh +++ b/src/services/Search/SearchImpl_32bit_be_aligned.hh @@ -10,7 +10,7 @@ namespace search { class ThirtyTwoBitBigEndianAlignedSearchImpl : public ThirtyTwoBitAlignedSearchImpl { - MemSize GetMemSize() const noexcept override { return MemSize::ThirtyTwoBitBigEndian; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::ThirtyTwoBitBigEndian; } unsigned int BuildValue(const uint8_t* ptr) const noexcept override { @@ -23,7 +23,7 @@ class ThirtyTwoBitBigEndianAlignedSearchImpl : public ThirtyTwoBitAlignedSearchI protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyConstantFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -31,7 +31,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { SearchImpl::ApplyCompareFilter(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_4bit.hh b/src/services/Search/SearchImpl_4bit.hh index cf7a08bd3..ceed6579e 100644 --- a/src/services/Search/SearchImpl_4bit.hh +++ b/src/services/Search/SearchImpl_4bit.hh @@ -10,24 +10,24 @@ namespace search { class FourBitSearchImpl : public SearchImpl { - MemSize GetMemSize() const noexcept override { return MemSize::Nibble_Lower; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::Nibble_Lower; } unsigned int GetAddressCountForBytes(unsigned int nBytes) const noexcept override { return nBytes * 2; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 2; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 2; } - bool ContainsAddress(const SearchResults& srResults, ra::ByteAddress nAddress) const override + bool ContainsAddress(const SearchResults& srResults, ra::data::ByteAddress nAddress) const override { nAddress <<= 1; @@ -43,7 +43,7 @@ class FourBitSearchImpl : public SearchImpl bool ExcludeResult(SearchResults& srResults, const SearchResult& pResult) const override { auto nAddress = pResult.nAddress << 1; - if (pResult.nSize == MemSize::Nibble_Upper) + if (pResult.nSize == ra::data::Memory::Size::Nibble_Upper) nAddress |= 1; return ExcludeAddress(srResults, nAddress); @@ -51,7 +51,7 @@ class FourBitSearchImpl : public SearchImpl void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { const auto nBlockAddress = pPreviousBlock.GetFirstAddress(); const auto* pMatchingAddresses = pPreviousBlock.GetMatchingAddressPointer(); @@ -79,7 +79,7 @@ class FourBitSearchImpl : public SearchImpl void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { const auto* pBlockBytes = pPreviousBlock.GetBytes(); const auto nBlockAddress = pPreviousBlock.GetFirstAddress(); @@ -113,7 +113,7 @@ protected: bool GetValueFromMemBlock(const MemBlock& block, SearchResult& result) const noexcept override { if (result.nAddress & 1) - result.nSize = MemSize::Nibble_Upper; + result.nSize = ra::data::Memory::Size::Nibble_Upper; result.nAddress >>= 1; @@ -123,7 +123,7 @@ protected: result.nValue = BuildValue(block.GetBytes() + nOffset); - if (result.nSize == MemSize::Nibble_Lower) + if (result.nSize == ra::data::Memory::Size::Nibble_Lower) result.nValue &= 0x0F; else result.nValue = (result.nValue >> 4) & 0x0F; diff --git a/src/services/Search/SearchImpl_8bit.hh b/src/services/Search/SearchImpl_8bit.hh index 36f32c58d..b4356b415 100644 --- a/src/services/Search/SearchImpl_8bit.hh +++ b/src/services/Search/SearchImpl_8bit.hh @@ -13,7 +13,7 @@ class EightBitSearchImpl : public SearchImpl protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nConstantValue, vMatches); @@ -21,7 +21,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { ApplyCompareFilterLittleEndian(pBytes, pBytesStop, pPreviousBlock, nComparison, nAdjustment, vMatches); diff --git a/src/services/Search/SearchImpl_asciitext.hh b/src/services/Search/SearchImpl_asciitext.hh index 7cf2ba142..4bc57f33f 100644 --- a/src/services/Search/SearchImpl_asciitext.hh +++ b/src/services/Search/SearchImpl_asciitext.hh @@ -14,7 +14,7 @@ class AsciiTextSearchImpl : public SearchImpl { public: // indicate that search results can be very wide - MemSize GetMemSize() const noexcept override { return MemSize::Text; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::Text; } bool ValidateFilterValue(SearchResults& srNew) const noexcept override { @@ -29,7 +29,7 @@ public: } // populates a vector of addresses that match the specified filter when applied to a previous search result - void ApplyFilter(SearchResults& srNew, const SearchResults& srPrevious, std::function pReadMemory) const override + void ApplyFilter(SearchResults& srNew, const SearchResults& srPrevious, std::function pReadMemory) const override { size_t nCompareLength = 16; // maximum length for generic search std::vector vSearchText; @@ -46,7 +46,7 @@ public: } std::vector vMemory(nLargestBlock); - std::vector vMatches; + std::vector vMatches; for (auto& block : GetBlocks(srPrevious)) { @@ -151,7 +151,7 @@ public: return GetFormattedValue(pResults, pResult.nAddress, GetMemSize()); } - std::wstring GetFormattedValue(const SearchResults& pResults, ra::ByteAddress nAddress, MemSize) const override + std::wstring GetFormattedValue(const SearchResults& pResults, ra::data::ByteAddress nAddress, ra::data::Memory::Size) const override { std::array pBuffer = {0}; pResults.GetBytes(nAddress, &pBuffer.at(0), pBuffer.size()); diff --git a/src/services/Search/SearchImpl_bitcount.hh b/src/services/Search/SearchImpl_bitcount.hh index 2d1697d06..e060ed87d 100644 --- a/src/services/Search/SearchImpl_bitcount.hh +++ b/src/services/Search/SearchImpl_bitcount.hh @@ -14,7 +14,7 @@ class BitCountSearchImpl : public SearchImpl { protected: // captured value (result.nValue) is actually the raw byte - MemSize GetMemSize() const noexcept override { return MemSize::BitCount; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::BitCount; } unsigned int BuildValue(const unsigned char* ptr) const noexcept override { @@ -26,7 +26,7 @@ protected: _Out_ std::wstring* sFormattedValue, const ra::data::context::EmulatorContext& pEmulatorContext) const override { const unsigned int nPreviousValue = pResult.nValue; - pResult.nValue = pEmulatorContext.ReadMemory(pResult.nAddress, MemSize::EightBit); + pResult.nValue = pEmulatorContext.ReadMemory(pResult.nAddress, ra::data::Memory::Size::EightBit); if (sFormattedValue) *sFormattedValue = GetFormattedValue(pResults, pResult); diff --git a/src/services/Search/SearchImpl_double32.hh b/src/services/Search/SearchImpl_double32.hh index 244674632..12a65ca1d 100644 --- a/src/services/Search/SearchImpl_double32.hh +++ b/src/services/Search/SearchImpl_double32.hh @@ -11,7 +11,7 @@ namespace search { class Double32SearchImpl : public FloatSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::Double32; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::Double32; } // technically, doubles are 8-bytes long, so padding should be 7, but // unaligned searches only look at 4-bytes at a time, so the 3 returned @@ -26,7 +26,7 @@ protected: uint32_t DeconstructFloatValue(float fValue) const noexcept override { - return ra::data::FloatToU32(fValue, MemSize::Double32); + return ra::data::Memory::FloatToU32(fValue, ra::data::Memory::Size::Double32); } }; diff --git a/src/services/Search/SearchImpl_double32_aligned.hh b/src/services/Search/SearchImpl_double32_aligned.hh index 686f22beb..aa35bbd8c 100644 --- a/src/services/Search/SearchImpl_double32_aligned.hh +++ b/src/services/Search/SearchImpl_double32_aligned.hh @@ -15,7 +15,7 @@ public: unsigned int GetPadding() const noexcept override { return 7U; } - bool ContainsAddress(const SearchResults& srResults, ra::ByteAddress nAddress) const override + bool ContainsAddress(const SearchResults& srResults, ra::data::ByteAddress nAddress) const override { if ((nAddress & 7) != 4) return false; @@ -35,12 +35,12 @@ public: return nBytes / 8; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 8; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 8; } @@ -48,7 +48,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { pBytes += 4; // we're only looking at the four most significant bytes @@ -69,7 +69,7 @@ protected: GSL_SUPPRESS_TYPE1 void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { // cannot use base implementation because we need to offset pBytes and pBlockBytes const auto* pBlockBytes = pPreviousBlock.GetBytes() + 4; @@ -86,7 +86,7 @@ protected: const float fValue2 = BuildFloatValue(pBlockBytes) + fAdjustment; if (CompareValues(fValue1, fValue2, nComparison)) { - const ra::ByteAddress nAddress = nBlockAddress + + const ra::data::ByteAddress nAddress = nBlockAddress + ConvertFromRealAddress(gsl::narrow_cast(pScan - pBytes - 4)); if (pPreviousBlock.HasMatchingAddress(pMatchingAddresses, nAddress)) vMatches.push_back(nAddress); diff --git a/src/services/Search/SearchImpl_double32_be.hh b/src/services/Search/SearchImpl_double32_be.hh index df947a633..387198a7f 100644 --- a/src/services/Search/SearchImpl_double32_be.hh +++ b/src/services/Search/SearchImpl_double32_be.hh @@ -11,7 +11,7 @@ namespace search { class Double32BESearchImpl : public FloatSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::Double32BigEndian; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::Double32BigEndian; } // technically, doubles are 8-bytes long, so padding should be 7, but // unaligned searches only look at 4-bytes at a time, so the 3 returned @@ -26,7 +26,7 @@ protected: uint32_t DeconstructFloatValue(float fValue) const noexcept override { - return ra::data::FloatToU32(fValue, MemSize::Double32BigEndian); + return ra::data::Memory::FloatToU32(fValue, ra::data::Memory::Size::Double32BigEndian); } }; diff --git a/src/services/Search/SearchImpl_double32_be_aligned.hh b/src/services/Search/SearchImpl_double32_be_aligned.hh index 4a5a3112a..9a6cfabe6 100644 --- a/src/services/Search/SearchImpl_double32_be_aligned.hh +++ b/src/services/Search/SearchImpl_double32_be_aligned.hh @@ -20,12 +20,12 @@ public: return nBytes / 8; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 8; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 8; } @@ -33,7 +33,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { @@ -50,7 +50,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { diff --git a/src/services/Search/SearchImpl_float.hh b/src/services/Search/SearchImpl_float.hh index 644a1caac..68cd9e212 100644 --- a/src/services/Search/SearchImpl_float.hh +++ b/src/services/Search/SearchImpl_float.hh @@ -13,11 +13,11 @@ namespace search { class FloatSearchImpl : public ThirtyTwoBitSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::Float; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::Float; } std::wstring GetFormattedValue(const SearchResults&, const SearchResult& pResult) const override { - return ra::data::MemSizeFormat(pResult.nValue, pResult.nSize, MemFormat::Dec); + return ra::data::Memory::FormatValue(pResult.nValue, pResult.nSize, ra::data::Memory::Format::Dec); } bool ValidateFilterValue(SearchResults& srNew) const noexcept override @@ -94,13 +94,13 @@ protected: virtual uint32_t DeconstructFloatValue(float fValue) const noexcept { - return ra::data::FloatToU32(fValue, MemSize::Float); + return ra::data::Memory::FloatToU32(fValue, ra::data::Memory::Size::Float); } GSL_SUPPRESS_TYPE1 void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { @@ -122,7 +122,7 @@ protected: const float fValue1 = BuildFloatValue(pScan); if (CompareValues(fValue1, fConstantValue, nComparison)) { - const ra::ByteAddress nAddress = nBlockAddress + + const ra::data::ByteAddress nAddress = nBlockAddress + ConvertFromRealAddress(gsl::narrow_cast(pScan - pBytes)); if (pPreviousBlock.HasMatchingAddress(pMatchingAddresses, nAddress)) vMatches.push_back(nAddress); @@ -133,7 +133,7 @@ protected: GSL_SUPPRESS_TYPE1 void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { @@ -157,7 +157,7 @@ protected: const float fValue2 = BuildFloatValue(pBlockBytes) + fAdjustment; if (CompareValues(fValue1, fValue2, nComparison)) { - const ra::ByteAddress nAddress = nBlockAddress + + const ra::data::ByteAddress nAddress = nBlockAddress + ConvertFromRealAddress(gsl::narrow_cast(pScan - pBytes)); if (pPreviousBlock.HasMatchingAddress(pMatchingAddresses, nAddress)) vMatches.push_back(nAddress); diff --git a/src/services/Search/SearchImpl_float_aligned.hh b/src/services/Search/SearchImpl_float_aligned.hh index 8425be553..a6c1a5f53 100644 --- a/src/services/Search/SearchImpl_float_aligned.hh +++ b/src/services/Search/SearchImpl_float_aligned.hh @@ -18,12 +18,12 @@ public: return nBytes / 4; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 4; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 4; } @@ -31,7 +31,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { @@ -48,7 +48,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { diff --git a/src/services/Search/SearchImpl_float_be.hh b/src/services/Search/SearchImpl_float_be.hh index cb846756c..13c925c08 100644 --- a/src/services/Search/SearchImpl_float_be.hh +++ b/src/services/Search/SearchImpl_float_be.hh @@ -11,7 +11,7 @@ namespace search { class FloatBESearchImpl : public FloatSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::FloatBigEndian; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::FloatBigEndian; } protected: float BuildFloatValue(const unsigned char* ptr) const noexcept override @@ -21,7 +21,7 @@ protected: uint32_t DeconstructFloatValue(float fValue) const noexcept override { - return ra::data::FloatToU32(fValue, MemSize::FloatBigEndian); + return ra::data::Memory::FloatToU32(fValue, ra::data::Memory::Size::FloatBigEndian); } }; diff --git a/src/services/Search/SearchImpl_float_be_aligned.hh b/src/services/Search/SearchImpl_float_be_aligned.hh index 6b3b4cbf1..eaddb2e3d 100644 --- a/src/services/Search/SearchImpl_float_be_aligned.hh +++ b/src/services/Search/SearchImpl_float_be_aligned.hh @@ -18,12 +18,12 @@ public: return nBytes / 4; } - ra::ByteAddress ConvertFromRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertFromRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress / 4; } - ra::ByteAddress ConvertToRealAddress(ra::ByteAddress nAddress) const noexcept override + ra::data::ByteAddress ConvertToRealAddress(ra::data::ByteAddress nAddress) const noexcept override { return nAddress * 4; } @@ -31,7 +31,7 @@ public: protected: void ApplyConstantFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nConstantValue, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { @@ -48,7 +48,7 @@ protected: void ApplyCompareFilter(const uint8_t* pBytes, const uint8_t* pBytesStop, const MemBlock& pPreviousBlock, ComparisonType nComparison, unsigned nAdjustment, - std::vector& vMatches) const override + std::vector& vMatches) const override { if (nComparison == ComparisonType::Equals || nComparison == ComparisonType::NotEqualTo) { diff --git a/src/services/Search/SearchImpl_mbf32.hh b/src/services/Search/SearchImpl_mbf32.hh index 2c524cebe..84afe3828 100644 --- a/src/services/Search/SearchImpl_mbf32.hh +++ b/src/services/Search/SearchImpl_mbf32.hh @@ -11,7 +11,7 @@ namespace search { class MBF32SearchImpl : public FloatSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::MBF32; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::MBF32; } protected: float BuildFloatValue(const uint8_t* ptr) const noexcept override @@ -21,7 +21,7 @@ protected: uint32_t DeconstructFloatValue(float fValue) const noexcept override { - return ra::data::FloatToU32(fValue, MemSize::MBF32); + return ra::data::Memory::FloatToU32(fValue, ra::data::Memory::Size::MBF32); } }; diff --git a/src/services/Search/SearchImpl_mbf32_le.hh b/src/services/Search/SearchImpl_mbf32_le.hh index 167a744e9..1e8e43628 100644 --- a/src/services/Search/SearchImpl_mbf32_le.hh +++ b/src/services/Search/SearchImpl_mbf32_le.hh @@ -11,7 +11,7 @@ namespace search { class MBF32LESearchImpl : public FloatSearchImpl { public: - MemSize GetMemSize() const noexcept override { return MemSize::MBF32LE; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::MBF32LE; } protected: float BuildFloatValue(const uint8_t* ptr) const noexcept override @@ -21,7 +21,7 @@ protected: uint32_t DeconstructFloatValue(float fValue) const noexcept override { - return ra::data::FloatToU32(fValue, MemSize::MBF32LE); + return ra::data::Memory::FloatToU32(fValue, ra::data::Memory::Size::MBF32LE); } }; diff --git a/src/services/SearchResults.cpp b/src/services/SearchResults.cpp index 187ba4310..8e0ecf3e0 100644 --- a/src/services/SearchResults.cpp +++ b/src/services/SearchResults.cpp @@ -142,7 +142,7 @@ static size_t CalcSize(const std::vector& vBlocks) } #endif -void SearchResults::Initialize(ra::ByteAddress nAddress, size_t nBytes, SearchType nType) +void SearchResults::Initialize(ra::data::ByteAddress nAddress, size_t nBytes, SearchType nType) { m_nType = nType; m_pImpl = GetSearchImpl(nType); @@ -179,7 +179,7 @@ void SearchResults::Initialize(const std::vector& vResults, Search m_pImpl = GetSearchImpl(nType); const auto bAligned = m_pImpl->ConvertToRealAddress(m_pImpl->ConvertFromRealAddress(7)) != 7; - const auto nSize = ra::data::MemSizeBytes(m_pImpl->GetMemSize()); + const auto nSize = ra::data::Memory::SizeBytes(m_pImpl->GetMemSize()); bool bNeedsReversed = false; switch (nType) { @@ -203,7 +203,7 @@ void SearchResults::Initialize(const std::vector& vResults, Search std::vector vMemory; vMemory.resize(nMemorySize); - std::vector vAddresses; + std::vector vAddresses; vAddresses.reserve(vResults.size()); for (const auto& pResult : vResults) @@ -253,7 +253,7 @@ void SearchResults::Initialize(const std::vector& vResults, Search RA_LOG_INFO("Allocated %zu bytes for initial search", CalcSize(m_vBlocks)); } -bool SearchResults::ContainsAddress(ra::ByteAddress nAddress) const +bool SearchResults::ContainsAddress(ra::data::ByteAddress nAddress) const { if (m_pImpl) return m_pImpl->ContainsAddress(*this, nAddress); @@ -277,7 +277,7 @@ void SearchResults::MergeSearchResults(const SearchResults& srMemory, const Sear // srAddresses collection. auto& pNewBlock = m_vBlocks.emplace_back(pSrcBlock); unsigned int nSize = pNewBlock.GetBytesSize(); - ra::ByteAddress nAddress = m_pImpl->ConvertToRealAddress(pNewBlock.GetFirstAddress()); + ra::data::ByteAddress nAddress = m_pImpl->ConvertToRealAddress(pNewBlock.GetFirstAddress()); unsigned char* pWrite = pNewBlock.GetBytes(); for (const auto& pMemBlock : srMemory.m_vBlocks) @@ -305,7 +305,7 @@ void SearchResults::MergeSearchResults(const SearchResults& srMemory, const Sear } _Use_decl_annotations_ -bool SearchResults::Initialize(const SearchResults& srFirst, std::function pReadMemory, +bool SearchResults::Initialize(const SearchResults& srFirst, std::function pReadMemory, ComparisonType nCompareType, SearchFilterType nFilterType, const std::wstring& sFilterValue) { m_nType = srFirst.m_nType; @@ -329,7 +329,7 @@ bool SearchResults::Initialize(const SearchResults& srSource, ComparisonType nCo SearchFilterType nFilterType, const std::wstring& sFilterValue) { const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); - auto pReadMemory = [&pEmulatorContext](ra::ByteAddress nAddress, uint8_t* pBuffer, size_t nBufferSize) { + auto pReadMemory = [&pEmulatorContext](ra::data::ByteAddress nAddress, uint8_t* pBuffer, size_t nBufferSize) { pEmulatorContext.ReadMemory(nAddress, pBuffer, nBufferSize); }; @@ -390,7 +390,7 @@ bool SearchResults::GetMatchingAddress(const SearchResult& pSrcResult, _Out_ Sea return m_pImpl->GetValueAtVirtualAddress(*this, result); } -bool SearchResults::GetBytes(ra::ByteAddress nAddress, unsigned char* pBuffer, size_t nCount) const noexcept +bool SearchResults::GetBytes(ra::data::ByteAddress nAddress, unsigned char* pBuffer, size_t nCount) const noexcept { if (m_pImpl != nullptr) { @@ -421,7 +421,7 @@ bool SearchResults::GetBytes(ra::ByteAddress nAddress, unsigned char* pBuffer, s return false; } -std::wstring SearchResults::GetFormattedValue(ra::ByteAddress nAddress, MemSize nSize) const +std::wstring SearchResults::GetFormattedValue(ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize) const { return m_pImpl ? m_pImpl->GetFormattedValue(*this, nAddress, nSize) : L""; } @@ -446,9 +446,9 @@ bool SearchResults::MatchesFilter(const SearchResults& pPreviousResults, SearchR return true; } -MemSize SearchResults::GetSize() const noexcept +ra::data::Memory::Size SearchResults::GetSize() const noexcept { - return m_pImpl ? m_pImpl->GetMemSize() : MemSize::EightBit; + return m_pImpl ? m_pImpl->GetMemSize() : ra::data::Memory::Size::EightBit; } SearchType GetAlignedSearchType(SearchType searchType) noexcept diff --git a/src/services/SearchResults.h b/src/services/SearchResults.h index d9f6d25fe..314aa8b1c 100644 --- a/src/services/SearchResults.h +++ b/src/services/SearchResults.h @@ -55,9 +55,9 @@ namespace search { class SearchImpl; } struct SearchResult { - ra::ByteAddress nAddress{}; + ra::data::ByteAddress nAddress{}; unsigned int nValue{}; - MemSize nSize{}; + ra::data::Memory::Size nSize{}; }; class SearchResults @@ -69,7 +69,7 @@ class SearchResults /// The address to start reading from. /// The number of bytes to read. /// Type of search to initialize. - void Initialize(ra::ByteAddress nAddress, size_t nBytes, SearchType nType); + void Initialize(ra::data::ByteAddress nAddress, size_t nBytes, SearchType nType); /// /// Initializes a result set by comparing current memory against another result set. @@ -103,7 +103,7 @@ class SearchResults /// Type of filter to apply. /// Parameter for filter being applied. /// true if initialization was successful, false if the filter value was not supported - bool Initialize(_In_ const SearchResults& srFirst, _In_ std::function pReadMemory, + bool Initialize(_In_ const SearchResults& srFirst, _In_ std::function pReadMemory, _In_ ComparisonType nCompareType, _In_ SearchFilterType nFilterType, _In_ const std::wstring& sFilterValue); /// @@ -136,7 +136,7 @@ class SearchResults /// /// Gets the raw bytes at the specified address. /// - bool GetBytes(ra::ByteAddress nAddress, unsigned char* pBuffer, size_t nCount) const noexcept; + bool GetBytes(ra::data::ByteAddress nAddress, unsigned char* pBuffer, size_t nCount) const noexcept; /// /// Gets a formatted value for the specified address. @@ -144,7 +144,7 @@ class SearchResults /// Address of the start of the value. /// Size of the value. /// Formatted value. - std::wstring GetFormattedValue(ra::ByteAddress nAddress, MemSize nSize) const; + std::wstring GetFormattedValue(ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize) const; /// /// Updates the current value of the provided result. @@ -172,7 +172,7 @@ class SearchResults /// /// Gets the size of the matching items. /// - MemSize GetSize() const noexcept; + ra::data::Memory::Size GetSize() const noexcept; /// /// Gets the type of filter that was applied to generate this search result. @@ -200,7 +200,7 @@ class SearchResults /// The n address. /// true if the specified address is in the matching address list; otherwise /// false. - bool ContainsAddress(ra::ByteAddress nAddress) const; + bool ContainsAddress(ra::data::ByteAddress nAddress) const; /// /// Removes an entry from the matching address list. diff --git a/src/ui/viewmodels/AssetListViewModel.cpp b/src/ui/viewmodels/AssetListViewModel.cpp index 1593d227d..7c3dce86c 100644 --- a/src/ui/viewmodels/AssetListViewModel.cpp +++ b/src/ui/viewmodels/AssetListViewModel.cpp @@ -141,7 +141,7 @@ void AssetListViewModel::OnActiveGameChanged() ApplyFilter(); } -void AssetListViewModel::OnCodeNoteChanged(ra::ByteAddress, const std::wstring&) +void AssetListViewModel::OnCodeNoteChanged(ra::data::ByteAddress, const std::wstring&) { RevalidateNoteAssetValidationWarnings(); } diff --git a/src/ui/viewmodels/AssetListViewModel.hh b/src/ui/viewmodels/AssetListViewModel.hh index 2ca7878d6..b60651bbf 100644 --- a/src/ui/viewmodels/AssetListViewModel.hh +++ b/src/ui/viewmodels/AssetListViewModel.hh @@ -306,7 +306,7 @@ private: // GameContext::NotifyTarget void OnActiveGameChanged() override; - void OnCodeNoteChanged(ra::ByteAddress, const std::wstring&) override; + void OnCodeNoteChanged(ra::data::ByteAddress, const std::wstring&) override; void OnValueChanged(const IntModelProperty::ChangeArgs& args) override; void OnValueChanged(const BoolModelProperty::ChangeArgs& args) override; diff --git a/src/ui/viewmodels/AssetUploadViewModel.cpp b/src/ui/viewmodels/AssetUploadViewModel.cpp index 81a3c7687..3b2b4bad1 100644 --- a/src/ui/viewmodels/AssetUploadViewModel.cpp +++ b/src/ui/viewmodels/AssetUploadViewModel.cpp @@ -111,7 +111,7 @@ void AssetUploadViewModel::QueueRichPresence(ra::data::models::RichPresenceModel void AssetUploadViewModel::QueueCodeNotes(ra::data::models::CodeNotesModel& pNotes) { - pNotes.EnumerateModifiedCodeNotes([this, pNotes = &pNotes](ra::ByteAddress nAddress) + pNotes.EnumerateModifiedCodeNotes([this, pNotes = &pNotes](ra::data::ByteAddress nAddress) { QueueCodeNote(*pNotes, nAddress); return true; @@ -123,7 +123,7 @@ static std::wstring ShortenNote(const std::wstring& sNote) return sNote.length() > 256 ? (sNote.substr(0, 253) + L"...") : sNote; } -void AssetUploadViewModel::QueueCodeNote(ra::data::models::CodeNotesModel& pNotes, ra::ByteAddress nAddress) +void AssetUploadViewModel::QueueCodeNote(ra::data::models::CodeNotesModel& pNotes, ra::data::ByteAddress nAddress) { const auto* pOriginalAuthor = pNotes.GetServerCodeNoteAuthor(nAddress); if (pOriginalAuthor != nullptr && !pOriginalAuthor->empty()) @@ -448,7 +448,7 @@ void AssetUploadViewModel::UploadRichPresence(ra::data::models::RichPresenceMode } } -void AssetUploadViewModel::UploadCodeNote(ra::data::models::CodeNotesModel& pNotes, ra::ByteAddress nAddress) +void AssetUploadViewModel::UploadCodeNote(ra::data::models::CodeNotesModel& pNotes, ra::data::ByteAddress nAddress) { std::string sErrorMessage; UploadState nState = UploadState::Failed; diff --git a/src/ui/viewmodels/AssetUploadViewModel.hh b/src/ui/viewmodels/AssetUploadViewModel.hh index 149ded1c9..947cec859 100644 --- a/src/ui/viewmodels/AssetUploadViewModel.hh +++ b/src/ui/viewmodels/AssetUploadViewModel.hh @@ -23,7 +23,7 @@ public: void QueueLeaderboard(ra::data::models::LeaderboardModel& pLeaderboard); void QueueRichPresence(ra::data::models::RichPresenceModel& pRichPresence); void QueueCodeNotes(ra::data::models::CodeNotesModel& pLeaderboard); - void QueueCodeNote(ra::data::models::CodeNotesModel& pCodeNotes, ra::ByteAddress nAddress); + void QueueCodeNote(ra::data::models::CodeNotesModel& pCodeNotes, ra::data::ByteAddress nAddress); bool HasFailures() const noexcept; @@ -61,7 +61,7 @@ private: void UploadAchievement(ra::data::models::AchievementModel& pAchievement); void UploadLeaderboard(ra::data::models::LeaderboardModel& pLeaderboard); void UploadRichPresence(ra::data::models::RichPresenceModel& pRichPresence); - void UploadCodeNote(ra::data::models::CodeNotesModel& pNotes, ra::ByteAddress nAddress); + void UploadCodeNote(ra::data::models::CodeNotesModel& pNotes, ra::data::ByteAddress nAddress); std::vector m_vUploadQueue; std::mutex m_pMutex; diff --git a/src/ui/viewmodels/CodeNotesViewModel.cpp b/src/ui/viewmodels/CodeNotesViewModel.cpp index 79012dd83..2eaa89a32 100644 --- a/src/ui/viewmodels/CodeNotesViewModel.cpp +++ b/src/ui/viewmodels/CodeNotesViewModel.cpp @@ -93,7 +93,7 @@ void CodeNotesViewModel::ResetFilter() auto* pCodeNotes = pGameContext.Assets().FindCodeNotes(); if (pCodeNotes != nullptr) { - pCodeNotes->EnumerateCodeNotes([this, &nIndex, pCodeNotes](ra::ByteAddress nAddress, unsigned int nBytes, const std::wstring& sNote) + pCodeNotes->EnumerateCodeNotes([this, &nIndex, pCodeNotes](ra::data::ByteAddress nAddress, unsigned int nBytes, const std::wstring& sNote) { const auto bNoteModified = pCodeNotes->IsNoteModified(nAddress); @@ -164,7 +164,7 @@ void CodeNotesViewModel::ApplyFilter() SetValue(ResultCountProperty, ra::StringPrintf(L"%u/%u", m_vNotes.Count(), m_nUnfilteredNotesCount)); } -void CodeNotesViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) +void CodeNotesViewModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { const auto& pGameContext = ra::services::ServiceLocator::Get(); if (pGameContext.IsGameLoading()) @@ -305,7 +305,7 @@ void CodeNotesViewModel::BookmarkSelected() const { if (pNote.IsSelected()) { - MemSize nSize = MemSize::Unknown; + auto nSize = ra::data::Memory::Size::Unknown; const auto* pCodeNote = pCodeNotes ? pCodeNotes->FindCodeNoteModel(pNote.nAddress, false) : nullptr; if (pCodeNote != nullptr) @@ -314,25 +314,25 @@ void CodeNotesViewModel::BookmarkSelected() const if (vmBookmarks.Bookmarks().Sizes().FindItemIndex(LookupItemViewModel::IdProperty, ra::etoi(nSize)) == -1) { // size not supported by viewer - nSize = MemSize::Unknown; + nSize = ra::data::Memory::Size::Unknown; } } - if (nSize == MemSize::Unknown) + if (nSize == ra::data::Memory::Size::Unknown) { switch (pNote.nBytes) { default: case 1: - nSize = MemSize::EightBit; + nSize = ra::data::Memory::Size::EightBit; break; case 2: - nSize = MemSize::SixteenBit; + nSize = ra::data::Memory::Size::SixteenBit; break; case 4: - nSize = MemSize::ThirtyTwoBit; + nSize = ra::data::Memory::Size::ThirtyTwoBit; break; } } @@ -350,7 +350,7 @@ void CodeNotesViewModel::BookmarkSelected() const ra::ui::viewmodels::MessageBoxViewModel::ShowInfoMessage(L"Can only create 100 new bookmarks at a time."); } -void CodeNotesViewModel::GetSelectedModifiedNoteAddresses(std::vector& vAddresses) +void CodeNotesViewModel::GetSelectedModifiedNoteAddresses(std::vector& vAddresses) { for (const auto& pNote : m_vNotes) { @@ -364,7 +364,7 @@ void CodeNotesViewModel::PublishSelected() if (!CanPublishCurrentAddressNote()) return; - std::vector vNotesToPublish; + std::vector vNotesToPublish; GetSelectedModifiedNoteAddresses(vNotesToPublish); if (vNotesToPublish.size() == 0) @@ -403,7 +403,7 @@ void CodeNotesViewModel::PublishSelected() void CodeNotesViewModel::RevertSelected() { - std::vector vNotesToRevert; + std::vector vNotesToRevert; GetSelectedModifiedNoteAddresses(vNotesToRevert); if (vNotesToRevert.size() == 0) diff --git a/src/ui/viewmodels/CodeNotesViewModel.hh b/src/ui/viewmodels/CodeNotesViewModel.hh index a506e1652..97750e2c0 100644 --- a/src/ui/viewmodels/CodeNotesViewModel.hh +++ b/src/ui/viewmodels/CodeNotesViewModel.hh @@ -104,7 +104,7 @@ public: void SetModified(bool bModified); bool IsModified() const noexcept { return m_bModified; } - ra::ByteAddress nAddress = 0; + ra::data::ByteAddress nAddress = 0; unsigned int nBytes = 1; private: @@ -203,7 +203,7 @@ protected: // ra::data::context::GameContext::NotifyTarget void OnActiveGameChanged() override; void OnEndGameLoad() override; - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) override; + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) override; // ra::ui::ViewModelCollectionBase::NotifyTarget void OnViewModelBoolValueChanged(gsl::index nIndex, const BoolModelProperty::ChangeArgs& args) override; @@ -211,7 +211,7 @@ protected: private: void OnSelectedItemsChanged(); - void GetSelectedModifiedNoteAddresses(std::vector& vAddresses); + void GetSelectedModifiedNoteAddresses(std::vector& vAddresses); ViewModelCollection m_vNotes; size_t m_nUnfilteredNotesCount = 0U; diff --git a/src/ui/viewmodels/MemoryBookmarksViewModel.cpp b/src/ui/viewmodels/MemoryBookmarksViewModel.cpp index b6e3a0a46..f769e696b 100644 --- a/src/ui/viewmodels/MemoryBookmarksViewModel.cpp +++ b/src/ui/viewmodels/MemoryBookmarksViewModel.cpp @@ -112,7 +112,7 @@ void MemoryBookmarksViewModel::MemoryBookmarkViewModel::HandlePauseOnChange() SetRowColor(ra::ui::Color(0xFFFFC0C0)); auto sMessage = - ra::StringPrintf(L"%s %s", ra::data::MemSizeString(GetSize()), ra::ByteAddressToString(GetAddress())); + ra::StringPrintf(L"%s %s", ra::data::Memory::SizeString(GetSize()), ra::ByteAddressToString(GetAddress())); const auto& pDescription = GetRealNote(); if (!pDescription.empty()) @@ -224,22 +224,22 @@ void MemoryBookmarksViewModel::LoadBookmarks(ra::services::TextReader& sBookmark { switch (bookmark["Size"].GetInt()) { - case 15: vmBookmark->SetSize(MemSize::Text); break; + case 15: vmBookmark->SetSize(ra::data::Memory::Size::Text); break; } } } else { - MemSize nSize = MemSize::EightBit; + auto nSize = ra::data::Memory::Size::EightBit; if (bookmark.HasMember("Type")) { // original bookmark format used Type for the three supported sizes. switch (bookmark["Type"].GetInt()) { - case 1: nSize = MemSize::EightBit; break; - case 2: nSize = MemSize::SixteenBit; break; - case 3: nSize = MemSize::ThirtyTwoBit; break; + case 1: nSize = ra::data::Memory::Size::EightBit; break; + case 2: nSize = ra::data::Memory::Size::SixteenBit; break; + case 3: nSize = ra::data::Memory::Size::ThirtyTwoBit; break; } } else @@ -248,22 +248,22 @@ void MemoryBookmarksViewModel::LoadBookmarks(ra::services::TextReader& sBookmark // this enumerates the mapping for backwards compatibility. switch (bookmark["Size"].GetInt()) { - case 0: nSize = MemSize::Bit_0; break; - case 1: nSize = MemSize::Bit_1; break; - case 2: nSize = MemSize::Bit_2; break; - case 3: nSize = MemSize::Bit_3; break; - case 4: nSize = MemSize::Bit_4; break; - case 5: nSize = MemSize::Bit_5; break; - case 6: nSize = MemSize::Bit_6; break; - case 7: nSize = MemSize::Bit_7; break; - case 8: nSize = MemSize::Nibble_Lower; break; - case 9: nSize = MemSize::Nibble_Upper; break; - case 10: nSize = MemSize::EightBit; break; - case 11: nSize = MemSize::SixteenBit; break; - case 12: nSize = MemSize::TwentyFourBit; break; - case 13: nSize = MemSize::ThirtyTwoBit; break; - case 14: nSize = MemSize::BitCount; break; - case 15: nSize = MemSize::Text; break; + case 0: nSize = ra::data::Memory::Size::Bit_0; break; + case 1: nSize = ra::data::Memory::Size::Bit_1; break; + case 2: nSize = ra::data::Memory::Size::Bit_2; break; + case 3: nSize = ra::data::Memory::Size::Bit_3; break; + case 4: nSize = ra::data::Memory::Size::Bit_4; break; + case 5: nSize = ra::data::Memory::Size::Bit_5; break; + case 6: nSize = ra::data::Memory::Size::Bit_6; break; + case 7: nSize = ra::data::Memory::Size::Bit_7; break; + case 8: nSize = ra::data::Memory::Size::Nibble_Lower; break; + case 9: nSize = ra::data::Memory::Size::Nibble_Upper; break; + case 10: nSize = ra::data::Memory::Size::EightBit; break; + case 11: nSize = ra::data::Memory::Size::SixteenBit; break; + case 12: nSize = ra::data::Memory::Size::TwentyFourBit; break; + case 13: nSize = ra::data::Memory::Size::ThirtyTwoBit; break; + case 14: nSize = ra::data::Memory::Size::BitCount; break; + case 15: nSize = ra::data::Memory::Size::Text; break; } } @@ -272,9 +272,9 @@ void MemoryBookmarksViewModel::LoadBookmarks(ra::services::TextReader& sBookmark } if (bookmark.HasMember("Decimal") && bookmark["Decimal"].GetBool()) - vmBookmark->SetFormat(ra::MemFormat::Dec); + vmBookmark->SetFormat(ra::data::Memory::Format::Dec); else - vmBookmark->SetFormat(ra::MemFormat::Hex); + vmBookmark->SetFormat(ra::data::Memory::Format::Hex); if (!vmBookmark->IsIndirectAddress()) // Indirect note already called UpdateRealNote vmBookmark->UpdateRealNote(); @@ -316,7 +316,7 @@ void MemoryBookmarksViewModel::SaveBookmarks(ra::services::TextWriter& sBookmark const auto nSize = vmBookmark.GetSize(); switch (nSize) { - case MemSize::Text: + case ra::data::Memory::Size::Text: item.AddMember("Size", 15, allocator); if (vmBookmark.IsIndirectAddress()) item.AddMember("MemAddr", vmBookmark.GetIndirectAddress(), allocator); @@ -339,7 +339,7 @@ void MemoryBookmarksViewModel::SaveBookmarks(ra::services::TextWriter& sBookmark break; } - if (vmBookmark.GetFormat() != MemFormat::Hex) + if (vmBookmark.GetFormat() != ra::data::Memory::Format::Hex) item.AddMember("Decimal", true, allocator); if (vmBookmark.IsCustomDescription()) @@ -358,7 +358,7 @@ void MemoryBookmarksViewModel::DoFrame() m_vmMemoryWatchList.DoFrame(); } -bool MemoryBookmarksViewModel::HasBookmark(ra::ByteAddress nAddress) const noexcept +bool MemoryBookmarksViewModel::HasBookmark(ra::data::ByteAddress nAddress) const noexcept { for (const auto& pBookmark : m_vmMemoryWatchList.Items()) { @@ -372,7 +372,7 @@ bool MemoryBookmarksViewModel::HasBookmark(ra::ByteAddress nAddress) const noexc return false; } -bool MemoryBookmarksViewModel::HasFrozenBookmark(ra::ByteAddress nAddress) const +bool MemoryBookmarksViewModel::HasFrozenBookmark(ra::data::ByteAddress nAddress) const { for (const auto& vmBookmark : m_vmMemoryWatchList.Items()) { @@ -384,7 +384,7 @@ bool MemoryBookmarksViewModel::HasFrozenBookmark(ra::ByteAddress nAddress) const return false; } -void MemoryBookmarksViewModel::AddBookmark(ra::ByteAddress nAddress, MemSize nSize) +void MemoryBookmarksViewModel::AddBookmark(ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize) { auto vmBookmark = std::make_unique(); vmBookmark->BeginInitialization(); @@ -413,7 +413,7 @@ void MemoryBookmarksViewModel::AddBookmark(const std::string& sSerialized) void MemoryBookmarksViewModel::InitializeBookmark(MemoryWatchViewModel& vmBookmark) { - vmBookmark.SetFormat(MemFormat::Unknown); + vmBookmark.SetFormat(ra::data::Memory::Format::Unknown); vmBookmark.UpdateRealNote(); } @@ -432,7 +432,7 @@ void MemoryBookmarksViewModel::InitializeBookmark(MemoryWatchViewModel& vmBookma if (rc_parse_memref(&memaddr, &size, &address) == RC_OK) { vmBookmark.SetAddress(address); - vmBookmark.SetSize(ra::data::models::TriggerValidation::MapRcheevosMemSize(size)); + vmBookmark.SetSize(ra::data::Memory::SizeFromRcheevosSize(size)); } return; diff --git a/src/ui/viewmodels/MemoryBookmarksViewModel.hh b/src/ui/viewmodels/MemoryBookmarksViewModel.hh index 565cd3d72..29ee01a68 100644 --- a/src/ui/viewmodels/MemoryBookmarksViewModel.hh +++ b/src/ui/viewmodels/MemoryBookmarksViewModel.hh @@ -88,12 +88,12 @@ public: /// /// Determines if a bookmark exists for the specified address. /// - bool HasBookmark(ra::ByteAddress nAddress) const noexcept; + bool HasBookmark(ra::data::ByteAddress nAddress) const noexcept; /// /// Determines if a bookmark that is frozen exists for the specified address. /// - bool HasFrozenBookmark(ra::ByteAddress nAddress) const; + bool HasFrozenBookmark(ra::data::ByteAddress nAddress) const; /// /// Gets the list of selectable behaviors for each bookmark. @@ -106,7 +106,7 @@ public: /// /// Adds a bookmark to the list. /// - void AddBookmark(ra::ByteAddress nAddress, MemSize nSize); + void AddBookmark(ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize); /// /// Adds a bookmark to the list. diff --git a/src/ui/viewmodels/MemoryInspectorViewModel.cpp b/src/ui/viewmodels/MemoryInspectorViewModel.cpp index a13a4f9d6..7f30a3094 100644 --- a/src/ui/viewmodels/MemoryInspectorViewModel.cpp +++ b/src/ui/viewmodels/MemoryInspectorViewModel.cpp @@ -79,7 +79,7 @@ void MemoryInspectorViewModel::OnValueChanged(const IntModelProperty::ChangeArgs else if (args.Property == CurrentAddressProperty && !m_bSyncingAddress) { m_bSyncingAddress = true; - const auto nAddress = static_cast(args.tNewValue); + const auto nAddress = static_cast(args.tNewValue); SetValue(CurrentAddressTextProperty, ra::Widen(ra::ByteAddressToString(nAddress))); m_bSyncingAddress = false; @@ -94,7 +94,7 @@ void MemoryInspectorViewModel::OnViewModelIntValueChanged(const IntModelProperty if (args.Property == MemoryViewerViewModel::AddressProperty) SetValue(CurrentAddressProperty, args.tNewValue); else if (args.Property == MemoryViewerViewModel::SizeProperty) - SetValue(CurrentBitsVisibleProperty, ra::itoe(args.tNewValue) == MemSize::EightBit); + SetValue(CurrentBitsVisibleProperty, ra::itoe(args.tNewValue) == ra::data::Memory::Size::EightBit); } void MemoryInspectorViewModel::OnValueChanged(const StringModelProperty::ChangeArgs& args) @@ -199,7 +199,7 @@ void MemoryInspectorViewModel::UpdateNoteButtons() } } -void MemoryInspectorViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) +void MemoryInspectorViewModel::OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { const auto nCurrentAddress = GetCurrentAddress(); if (nNewAddress == nCurrentAddress) @@ -208,7 +208,7 @@ void MemoryInspectorViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra:: OnCodeNoteChanged(nCurrentAddress, L""); } -void MemoryInspectorViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) +void MemoryInspectorViewModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { if (nAddress == GetCurrentAddress()) { @@ -254,7 +254,7 @@ void MemoryInspectorViewModel::SetCurrentAddressNoteInternal(const std::wstring& m_bSyncingCodeNote = false; } -void MemoryInspectorViewModel::OnCurrentAddressChanged(ra::ByteAddress nNewAddress) +void MemoryInspectorViewModel::OnCurrentAddressChanged(ra::data::ByteAddress nNewAddress) { const auto& pGameContext = ra::services::ServiceLocator::Get(); const auto* pCodeNotes = pGameContext.Assets().FindCodeNotes(); @@ -309,8 +309,8 @@ std::string MemoryInspectorViewModel::GetCurrentAddressMemRefChain() const const auto& pGameContext = ra::services::ServiceLocator::Get(); const auto* pCodeNotes = pGameContext.Assets().FindCodeNotes(); const auto* pNote = pCodeNotes ? pCodeNotes->FindCodeNoteModel(nAddress) : nullptr; - auto nSize = pNote ? pNote->GetMemSize() : MemSize::Unknown; - if (nSize >= MemSize::Unknown) + auto nSize = pNote ? pNote->GetMemSize() : ra::data::Memory::Size::Unknown; + if (nSize >= ra::data::Memory::Size::Unknown) nSize = Viewer().GetSize(); if (m_bNoteIsIndirect && pNote) // pNote being not null implies pCodeNotes is not null @@ -417,7 +417,7 @@ void MemoryInspectorViewModel::OpenNotesList() bool MemoryInspectorViewModel::NextNote() { const auto nCurrentAddress = GetCurrentAddress(); - ra::ByteAddress nNewAddress = nCurrentAddress; + ra::data::ByteAddress nNewAddress = nCurrentAddress; auto& pGameContext = ra::services::ServiceLocator::GetMutable(); const auto* pCodeNotes = pGameContext.Assets().FindCodeNotes(); if (pCodeNotes != nullptr) @@ -439,7 +439,7 @@ bool MemoryInspectorViewModel::NextNote() bool MemoryInspectorViewModel::PreviousNote() { const auto nCurrentAddress = GetCurrentAddress(); - ra::ByteAddress nNewAddress = nCurrentAddress; + ra::data::ByteAddress nNewAddress = nCurrentAddress; auto& pGameContext = ra::services::ServiceLocator::GetMutable(); const auto* pCodeNotes = pGameContext.Assets().FindCodeNotes(); if (pCodeNotes != nullptr) diff --git a/src/ui/viewmodels/MemoryInspectorViewModel.hh b/src/ui/viewmodels/MemoryInspectorViewModel.hh index d0a337b8e..49077918f 100644 --- a/src/ui/viewmodels/MemoryInspectorViewModel.hh +++ b/src/ui/viewmodels/MemoryInspectorViewModel.hh @@ -46,12 +46,12 @@ public: /// /// Gets the current address. /// - ra::ByteAddress GetCurrentAddress() const { return GetValue(CurrentAddressProperty); } + ra::data::ByteAddress GetCurrentAddress() const { return GetValue(CurrentAddressProperty); } /// /// Sets the current address. /// - void SetCurrentAddress(const ra::ByteAddress nValue) { SetValue(CurrentAddressProperty, nValue); } + void SetCurrentAddress(const ra::data::ByteAddress nValue) { SetValue(CurrentAddressProperty, nValue); } /// /// The for the current address as a string. @@ -178,12 +178,12 @@ protected: void OnBeforeActiveGameChanged() override; void OnActiveGameChanged() override; void OnEndGameLoad() override; - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) override; - void OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) override; + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) override; + void OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) override; private: static const IntModelProperty CurrentAddressValueProperty; - void OnCurrentAddressChanged(ra::ByteAddress nNewAddress); + void OnCurrentAddressChanged(ra::data::ByteAddress nNewAddress); void SetCurrentAddressNoteInternal(const std::wstring& sValue); void UpdateNoteButtons(); @@ -195,7 +195,7 @@ private: bool m_bSyncingAddress = false; bool m_bSyncingCodeNote = false; bool m_bNoteIsIndirect = false; - ra::ByteAddress m_nUncommittedNoteAddress = 0xFFFFFFFF; + ra::data::ByteAddress m_nUncommittedNoteAddress = 0xFFFFFFFF; std::wstring m_sOriginalNoteValue; }; diff --git a/src/ui/viewmodels/MemoryRegionsViewModel.cpp b/src/ui/viewmodels/MemoryRegionsViewModel.cpp index 2e71e7c51..8ed521620 100644 --- a/src/ui/viewmodels/MemoryRegionsViewModel.cpp +++ b/src/ui/viewmodels/MemoryRegionsViewModel.cpp @@ -37,7 +37,7 @@ void MemoryRegionsViewModel::OnViewModelStringValueChanged(gsl::index nIndex, co auto* pItem = m_vRegions.GetItemAt(nIndex); if (pItem) { - ra::ByteAddress nStartAddress = 0, nEndAddress = 0; + ra::data::ByteAddress nStartAddress = 0, nEndAddress = 0; if (!ra::data::models::MemoryRegionsModel::ParseFilterRange(args.tNewValue, nStartAddress, nEndAddress)) { pItem->SetInvalid(true); @@ -221,7 +221,7 @@ void MemoryRegionsViewModel::SaveCustomRegions() if (!pRegion.IsCustom()) continue; - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; if (ra::data::models::MemoryRegionsModel::ParseFilterRange(pRegion.GetRange(), nStartAddress, nEndAddress)) pMemoryRegions->AddCustomRegion(nStartAddress, nEndAddress, pRegion.GetLabel()); } diff --git a/src/ui/viewmodels/MemorySearchViewModel.cpp b/src/ui/viewmodels/MemorySearchViewModel.cpp index f6646b76f..61694c151 100644 --- a/src/ui/viewmodels/MemorySearchViewModel.cpp +++ b/src/ui/viewmodels/MemorySearchViewModel.cpp @@ -41,7 +41,7 @@ const StringModelProperty MemorySearchViewModel::FilterValueProperty("MemorySear const StringModelProperty MemorySearchViewModel::FilterSummaryProperty("MemorySearchViewModel", "FilterSummary", L""); const IntModelProperty MemorySearchViewModel::ResultCountProperty("MemorySearchViewModel", "ResultCount", 0); const StringModelProperty MemorySearchViewModel::ResultCountTextProperty("MemorySearchViewModel", "ResultCountText", L"0"); -const IntModelProperty MemorySearchViewModel::ResultMemSizeProperty("MemorySearchViewModel", "ResultMemSize", ra::etoi(MemSize::EightBit)); +const IntModelProperty MemorySearchViewModel::ResultMemSizeProperty("MemorySearchViewModel", "ResultMemSize", ra::etoi(ra::data::Memory::Size::EightBit)); const IntModelProperty MemorySearchViewModel::TotalMemorySizeProperty("MemorySearchViewModel", "TotalMemorySize", 0); const IntModelProperty MemorySearchViewModel::ScrollOffsetProperty("MemorySearchViewModel", "ScrollOffset", 0); const IntModelProperty MemorySearchViewModel::ScrollMaximumProperty("MemorySearchViewModel", "ScrollMaximum", 0); @@ -160,9 +160,9 @@ MemorySearchViewModel::MemorySearchViewModel() SetValue(CanBeginNewSearchProperty, false); SetValue(CanGoToPreviousPageProperty, false); - // explicitly set the MemSize to some non-selectable value so the first search will + // explicitly set the Memory::Size to some non-selectable value so the first search will // trigger a PropertyChanged event. - SetValue(ResultMemSizeProperty, ra::etoi(MemSize::Bit_0)); + SetValue(ResultMemSizeProperty, ra::etoi(ra::data::Memory::Size::Bit_0)); } void MemorySearchViewModel::InitializeNotifyTargets() @@ -194,18 +194,18 @@ void MemorySearchViewModel::OnTotalMemorySizeChanged() { RebuildPredefinedFilterRanges(); - const auto nTotalBankSize = gsl::narrow_cast(ra::services::ServiceLocator::Get().TotalMemorySize()); + const auto nTotalBankSize = gsl::narrow_cast(ra::services::ServiceLocator::Get().TotalMemorySize()); SetValue(CanBeginNewSearchProperty, (nTotalBankSize > 0U)); SetValue(TotalMemorySizeProperty, nTotalBankSize); } void MemorySearchViewModel::RebuildPredefinedFilterRanges() { - ra::ByteAddress nExtraRamStart = 0U; - ra::ByteAddress nExtraRamEnd = 0U; - ra::ByteAddress nSystemRamStart = 0U; - ra::ByteAddress nSystemRamEnd = 0U; - ra::ByteAddress nAllRamEnd = 0U; + ra::data::ByteAddress nExtraRamStart = 0U; + ra::data::ByteAddress nExtraRamEnd = 0U; + ra::data::ByteAddress nSystemRamStart = 0U; + ra::data::ByteAddress nSystemRamEnd = 0U; + ra::data::ByteAddress nAllRamEnd = 0U; std::vector vmRanges; auto nPreviousAddressType = ra::data::context::ConsoleContext::AddressType::Unused; @@ -316,7 +316,7 @@ void MemorySearchViewModel::RebuildPredefinedFilterRanges() m_vPredefinedFilterRanges.EndUpdate(); } -void MemorySearchViewModel::DefinePredefinedFilterRange(gsl::index nIndex, int nId, const std::wstring& sLabel, ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, bool bIncludeRangeInLabel) +void MemorySearchViewModel::DefinePredefinedFilterRange(gsl::index nIndex, int nId, const std::wstring& sLabel, ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, bool bIncludeRangeInLabel) { auto* pItem = m_vPredefinedFilterRanges.GetItemAt(nIndex); if (pItem == nullptr) @@ -391,7 +391,7 @@ void MemorySearchViewModel::OnPredefinedFilterRangeChanged(const IntModelPropert void MemorySearchViewModel::OnFilterRangeChanged() { - ra::ByteAddress nStart, nEnd; + ra::data::ByteAddress nStart, nEnd; if (!ra::data::models::MemoryRegionsModel::ParseFilterRange(GetFilterRange(), nStart, nEnd)) return; @@ -488,7 +488,7 @@ void MemorySearchViewModel::ClearResults() void MemorySearchViewModel::BeginNewSearch() { - ra::ByteAddress nStart, nEnd; + ra::data::ByteAddress nStart, nEnd; if (!ra::data::models::MemoryRegionsModel::ParseFilterRange(GetFilterRange(), nStart, nEnd)) { ra::ui::viewmodels::MessageBoxViewModel::ShowErrorMessage(L"Invalid address range"); @@ -501,7 +501,7 @@ void MemorySearchViewModel::BeginNewSearch() DispatchMemoryRead([this, nStart, nEnd]() { BeginNewSearch(nStart, nEnd); }); } -void MemorySearchViewModel::BeginNewSearch(ra::ByteAddress nStart, ra::ByteAddress nEnd) +void MemorySearchViewModel::BeginNewSearch(ra::data::ByteAddress nStart, ra::data::ByteAddress nEnd) { auto nSearchType = GetSearchType(); bool bIsAligned = false; @@ -878,12 +878,12 @@ void MemorySearchViewModel::UpdateResults() auto sAddress = ra::ByteAddressToString(pResult.nAddress); switch (pResult.nSize) { - case MemSize::Nibble_Lower: + case ra::data::Memory::Size::Nibble_Lower: sAddress.push_back('L'); pRow->nAddress <<= 1; break; - case MemSize::Nibble_Upper: + case ra::data::Memory::Size::Nibble_Upper: sAddress.push_back('U'); pRow->nAddress = (pRow->nAddress << 1) | 1; break; @@ -952,13 +952,13 @@ std::wstring MemorySearchViewModel::GetTooltip(const SearchResultViewModel& vmRe vmResult.GetAddress(), vmResult.GetCurrentValue()); const auto& pCompareResults = m_vSearchResults.at(m_nSelectedSearchResult)->pResults; - ra::ByteAddress nAddress = vmResult.nAddress; - MemSize nSize = pCompareResults.GetSize(); + ra::data::ByteAddress nAddress = vmResult.nAddress; + auto nSize = pCompareResults.GetSize(); - if (nSize == MemSize::Nibble_Lower) + if (nSize == ra::data::Memory::Size::Nibble_Lower) { if (nAddress & 1) - nSize = MemSize::Nibble_Upper; + nSize = ra::data::Memory::Size::Nibble_Upper; nAddress >>= 1; } @@ -972,7 +972,7 @@ std::wstring MemorySearchViewModel::GetTooltip(const SearchResultViewModel& vmRe return sTooltip; } -void MemorySearchViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNote) +void MemorySearchViewModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNote) { for (auto& pRow : m_vResults) { @@ -984,7 +984,7 @@ void MemorySearchViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const st } } -void MemorySearchViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) +void MemorySearchViewModel::OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { for (auto& pRow : m_vResults) { @@ -1125,14 +1125,14 @@ void MemorySearchViewModel::SelectRange(gsl::index nFrom, gsl::index nTo, bool b // ignore IsSelectedProperty events - we'll update the lists directly m_vResults.RemoveNotifyTarget(*this); - if (pCurrentResults.GetSize() == MemSize::Nibble_Lower) + if (pCurrentResults.GetSize() == ra::data::Memory::Size::Nibble_Lower) { for (auto nIndex = nFrom; nIndex <= nTo; ++nIndex) { if (pCurrentResults.GetMatchingAddress(nIndex, pResult)) { auto nAddress = pResult.nAddress << 1; - if (pResult.nSize == MemSize::Nibble_Upper) + if (pResult.nSize == ra::data::Memory::Size::Nibble_Upper) nAddress |= 1; if (bValue) @@ -1175,12 +1175,12 @@ void MemorySearchViewModel::ExcludeSelected() ra::services::SearchResult pItem {}; const auto nSize = pCurrentResults.pResults.GetSize(); - if (nSize == MemSize::Nibble_Lower) + if (nSize == ra::data::Memory::Size::Nibble_Lower) { for (const auto nAddress : m_vSelectedAddresses) { pItem.nAddress = nAddress >> 1; - pItem.nSize = (nAddress & 1) ? MemSize::Nibble_Upper : MemSize::Nibble_Lower; + pItem.nSize = (nAddress & 1) ? ra::data::Memory::Size::Nibble_Upper : ra::data::Memory::Size::Nibble_Lower; pResult->pResults.ExcludeResult(pItem); } } @@ -1226,7 +1226,7 @@ void MemorySearchViewModel::BookmarkSelected() if (m_vSelectedAddresses.empty()) return; - const MemSize nSize = m_vSearchResults.back()->pResults.GetSize(); + const auto nSize = m_vSearchResults.back()->pResults.GetSize(); auto& vmBookmarks = ra::services::ServiceLocator::GetMutable().MemoryBookmarks; if (!vmBookmarks.IsVisible()) vmBookmarks.Show(); @@ -1238,9 +1238,9 @@ void MemorySearchViewModel::BookmarkSelected() { switch (nSize) { - case MemSize::Nibble_Lower: - case MemSize::Nibble_Upper: - vmBookmarks.AddBookmark(nAddress >> 1, (nAddress & 1) ? MemSize::Nibble_Upper : MemSize::Nibble_Lower); + case ra::data::Memory::Size::Nibble_Lower: + case ra::data::Memory::Size::Nibble_Upper: + vmBookmarks.AddBookmark(nAddress >> 1, (nAddress & 1) ? ra::data::Memory::Size::Nibble_Upper : ra::data::Memory::Size::Nibble_Lower); break; default: @@ -1322,14 +1322,14 @@ void MemorySearchViewModel::SaveResults(ra::services::TextWriter& sFile, std::fu sFile.WriteLine("Address,Value,PreviousValue,InitialValue"); - if (pCompareResults.GetSize() == MemSize::Nibble_Lower) + if (pCompareResults.GetSize() == ra::data::Memory::Size::Nibble_Lower) { for (gsl::index nIndex = 0; ra::to_unsigned(nIndex) < pResults.MatchingAddressCount(); ++nIndex) { if (!pResults.GetMatchingAddress(nIndex, pResult)) continue; - const auto nSize = (pResult.nAddress & 1) ? MemSize::Nibble_Upper : MemSize::Nibble_Lower; + const auto nSize = (pResult.nAddress & 1) ? ra::data::Memory::Size::Nibble_Upper : ra::data::Memory::Size::Nibble_Lower; const auto nAddress = pResult.nAddress >> 1; sFile.WriteLine(ra::StringPrintf(L"%s%s,%s,%s,%s", @@ -1435,7 +1435,7 @@ void MemorySearchViewModel::ImportResults() pResult2->sSummary = pResult->sSummary; pResult2->pResults.Initialize(pResult->pResults, - [pResults = &pResult->pResults](ra::ByteAddress nAddress, uint8_t* pBuffer, size_t nCount) noexcept { + [pResults = &pResult->pResults](ra::data::ByteAddress nAddress, uint8_t* pBuffer, size_t nCount) noexcept { pResults->GetBytes(nAddress, pBuffer, nCount); }, ComparisonType::Equals, GetValueType(), GetFilterValue()); @@ -1471,7 +1471,7 @@ void MemorySearchViewModel::LoadResults(ra::services::TextReader& pTextReader, pTemp.Initialize(0, 0, GetSearchType()); pResult.nSize = pTemp.GetSize(); - const bool bIsFloat = ra::data::MemSizeIsFloat(pResult.nSize); + const bool bIsFloat = ra::data::Memory::SizeIsFloat(pResult.nSize); std::string sLine; while (pTextReader.GetLine(sLine)) @@ -1492,7 +1492,7 @@ void MemorySearchViewModel::LoadResults(ra::services::TextReader& pTextReader, const auto fValue = std::strtof(sValue.c_str(), &pEnd); if (pEnd && *pEnd != '\0') continue; - pResult.nValue = ra::data::FloatToU32(fValue, pResult.nSize); + pResult.nValue = ra::data::Memory::FloatToU32(fValue, pResult.nSize); } else { diff --git a/src/ui/viewmodels/MemorySearchViewModel.hh b/src/ui/viewmodels/MemorySearchViewModel.hh index ce083b327..8e516f7ac 100644 --- a/src/ui/viewmodels/MemorySearchViewModel.hh +++ b/src/ui/viewmodels/MemorySearchViewModel.hh @@ -64,12 +64,12 @@ public: /// /// Gets the start address of the predefined filter range. /// - const ra::ByteAddress GetStartAddress() const { return gsl::narrow_cast(GetValue(StartAddressProperty)); } + const ra::data::ByteAddress GetStartAddress() const { return gsl::narrow_cast(GetValue(StartAddressProperty)); } /// /// Sets the start address of the predefined filter range. /// - void SetStartAddress(ra::ByteAddress nValue) { SetValue(StartAddressProperty, gsl::narrow_cast(nValue)); } + void SetStartAddress(ra::data::ByteAddress nValue) { SetValue(StartAddressProperty, gsl::narrow_cast(nValue)); } /// /// The for the end address of the predefined filter range. @@ -79,12 +79,12 @@ public: /// /// Gets the end address of the predefined filter range. /// - const ra::ByteAddress GetEndAddress() const { return gsl::narrow_cast(GetValue(EndAddressProperty)); } + const ra::data::ByteAddress GetEndAddress() const { return gsl::narrow_cast(GetValue(EndAddressProperty)); } /// /// Sets the end address of the predefined filter range. /// - void SetEndAddress(ra::ByteAddress nValue) { SetValue(EndAddressProperty, gsl::narrow_cast(nValue)); } + void SetEndAddress(ra::data::ByteAddress nValue) { SetValue(EndAddressProperty, gsl::narrow_cast(nValue)); } }; /// @@ -342,7 +342,7 @@ public: /// void SetDescriptionColor(Color value) { SetValue(DescriptionColorProperty, ra::to_signed(value.ARGB)); } - ra::ByteAddress nAddress = 0; + ra::data::ByteAddress nAddress = 0; unsigned nCurrentValue = 0; bool bMatchesFilter = false; bool bHasBookmark = false; @@ -374,7 +374,7 @@ public: /// /// Gets the memory size of the items in . /// - MemSize ResultMemSize() const { return ra::itoe(GetValue(ResultMemSizeProperty)); } + ra::data::Memory::Size ResultMemSize() const { return ra::itoe(GetValue(ResultMemSizeProperty)); } /// /// The for the number of results found. @@ -505,16 +505,16 @@ protected: // GameContext::NotifyTarget void OnBeforeActiveGameChanged() override; void OnActiveGameChanged() override; - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNote) override; - void OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) override; + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNote) override; + void OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) override; void SaveResults(ra::services::TextWriter& sFile, std::function pProgressCallback) const; private: void RebuildPredefinedFilterRanges(); - void DefinePredefinedFilterRange(gsl::index nIndex, int nId, const std::wstring& sLabel, ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, bool bIncludeRangeInLabel); + void DefinePredefinedFilterRange(gsl::index nIndex, int nId, const std::wstring& sLabel, ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, bool bIncludeRangeInLabel); - void BeginNewSearch(ra::ByteAddress nStart, ra::ByteAddress nEnd); + void BeginNewSearch(ra::data::ByteAddress nStart, ra::data::ByteAddress nEnd); void ApplyContinuousFilter(); void UpdateResults(); void DoApplyFilter(); diff --git a/src/ui/viewmodels/MemoryViewerViewModel.cpp b/src/ui/viewmodels/MemoryViewerViewModel.cpp index 390699097..2d1b4bffe 100644 --- a/src/ui/viewmodels/MemoryViewerViewModel.cpp +++ b/src/ui/viewmodels/MemoryViewerViewModel.cpp @@ -16,7 +16,7 @@ namespace viewmodels { const IntModelProperty MemoryViewerViewModel::AddressProperty("MemoryViewerViewModel", "Address", 0); const IntModelProperty MemoryViewerViewModel::FirstAddressProperty("MemoryViewerViewModel", "FirstAddress", 0); const IntModelProperty MemoryViewerViewModel::NumVisibleLinesProperty("MemoryViewerViewModel", "NumVisibleLines", 8); -const IntModelProperty MemoryViewerViewModel::SizeProperty("MemoryViewerViewModel", "Size", ra::etoi(MemSize::EightBit)); +const IntModelProperty MemoryViewerViewModel::SizeProperty("MemoryViewerViewModel", "Size", ra::etoi(ra::data::Memory::Size::EightBit)); const IntModelProperty MemoryViewerViewModel::PendingAddressProperty("MemoryViewerViewModel", "PendingAddress", 0); constexpr uint8_t STALE_COLOR = 0x80; @@ -126,7 +126,7 @@ void MemoryViewerViewModel::InitializeNotifyTargets() auto& pEmulatorContext = ra::services::ServiceLocator::GetMutable(); pEmulatorContext.AddNotifyTarget(*this); - m_nTotalMemorySize = gsl::narrow(pEmulatorContext.TotalMemorySize()); + m_nTotalMemorySize = gsl::narrow(pEmulatorContext.TotalMemorySize()); auto& pGameContext = ra::services::ServiceLocator::GetMutable(); pGameContext.AddNotifyTarget(*this); @@ -134,10 +134,10 @@ void MemoryViewerViewModel::InitializeNotifyTargets() m_pBookmarkMonitor.reset(new MemoryBookmarkMonitor(*this)); } -void MemoryViewerViewModel::InitializeFixedViewer(ra::ByteAddress nAddress) +void MemoryViewerViewModel::InitializeFixedViewer(ra::data::ByteAddress nAddress) { auto& pEmulatorContext = ra::services::ServiceLocator::GetMutable(); - m_nTotalMemorySize = gsl::narrow(pEmulatorContext.TotalMemorySize()); + m_nTotalMemorySize = gsl::narrow(pEmulatorContext.TotalMemorySize()); m_bReadOnly = true; m_bAddressFixed = true; @@ -159,9 +159,9 @@ MemoryViewerViewModel::~MemoryViewerViewModel() // empty function definition required to generate destroy for forward-declared MemoryBookmarkMonitor } -static constexpr int NibblesForSize(MemSize nSize) +static constexpr int NibblesForSize(ra::data::Memory::Size nSize) { - return ra::data::MemSizeBytes(nSize) * 2; + return ra::data::Memory::SizeBytes(nSize) * 2; } int MemoryViewerViewModel::NibblesPerWord() const @@ -174,8 +174,8 @@ int MemoryViewerViewModel::GetSelectedNibbleOffset() const const auto nSize = GetSize(); switch (nSize) { - case MemSize::SixteenBit: - case MemSize::ThirtyTwoBit: + case ra::data::Memory::Size::SixteenBit: + case ra::data::Memory::Size::ThirtyTwoBit: return (NibblesForSize(nSize) - m_nSelectedNibble - 1); default: @@ -183,7 +183,7 @@ int MemoryViewerViewModel::GetSelectedNibbleOffset() const } } -static MemoryViewerViewModel::TextColor GetColor(ra::ByteAddress nAddress, +static MemoryViewerViewModel::TextColor GetColor(ra::data::ByteAddress nAddress, const ra::ui::viewmodels::MemoryBookmarksViewModel& pBookmarksViewModel, const ra::data::context::GameContext& pGameContext, bool bCheckNotes = true) { @@ -236,7 +236,7 @@ void MemoryViewerViewModel::UpdateColors() if (pCodeNotes != nullptr) { const auto nStopAddress = nFirstAddress + nVisibleLines * 16; - pCodeNotes->EnumerateCodeNotes([nFirstAddress, nStopAddress, this](ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pNote) { + pCodeNotes->EnumerateCodeNotes([nFirstAddress, nStopAddress, this](ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pNote) { auto nBytes = pNote.GetBytes(); if (nAddress + nBytes <= nFirstAddress) // not to viewing window yet return true; @@ -308,7 +308,7 @@ void MemoryViewerViewModel::UpdateInvalidRegions() memset(&m_pInvalid[nVisibleBytes], 1, MaxLines * 16 - nVisibleBytes); } -void MemoryViewerViewModel::UpdateHighlight(ra::ByteAddress nAddress, int nNewLength, int nOldLength) +void MemoryViewerViewModel::UpdateHighlight(ra::data::ByteAddress nAddress, int nNewLength, int nOldLength) { if (nNewLength == nOldLength) return; @@ -365,7 +365,7 @@ void MemoryViewerViewModel::UpdateSelectedNibble(int nNewNibble) } } -void MemoryViewerViewModel::SetAddress(ra::ByteAddress nValue) +void MemoryViewerViewModel::SetAddress(ra::data::ByteAddress nValue) { if (m_bAddressFixed) return; @@ -373,7 +373,7 @@ void MemoryViewerViewModel::SetAddress(ra::ByteAddress nValue) if (m_nTotalMemorySize > 0) { if (nValue >= m_nTotalMemorySize) - nValue = (nValue >= UNSIGNED_NEGATIVE_THRESHOLD) ? 0 : gsl::narrow_cast(m_nTotalMemorySize) - 1; + nValue = (nValue >= UNSIGNED_NEGATIVE_THRESHOLD) ? 0 : gsl::narrow_cast(m_nTotalMemorySize) - 1; SetValue(AddressProperty, gsl::narrow_cast(nValue)); } @@ -383,7 +383,7 @@ void MemoryViewerViewModel::SetAddress(ra::ByteAddress nValue) } } -void MemoryViewerViewModel::SetFirstAddress(ra::ByteAddress nValue) +void MemoryViewerViewModel::SetFirstAddress(ra::data::ByteAddress nValue) { if (nValue >= UNSIGNED_NEGATIVE_THRESHOLD) { @@ -438,8 +438,8 @@ void MemoryViewerViewModel::OnValueChanged(const IntModelProperty::ChangeArgs& a } else if (args.Property == SizeProperty) { - const int nOldBytes = NibblesForSize(ra::itoe(args.tOldValue)) / 2; - const int nNewBytes = NibblesForSize(ra::itoe(args.tNewValue)) / 2; + const int nOldBytes = NibblesForSize(ra::itoe(args.tOldValue)) / 2; + const int nNewBytes = NibblesForSize(ra::itoe(args.tNewValue)) / 2; UpdateHighlight(GetAddress(), nNewBytes, nOldBytes); ResetSurface(); @@ -458,7 +458,7 @@ void MemoryViewerViewModel::OnValueChanged(const IntModelProperty::ChangeArgs& a ViewModelBase::OnValueChanged(args); } -void MemoryViewerViewModel::ReadMemory(ra::ByteAddress nFirstAddress, int nNumVisibleLines) +void MemoryViewerViewModel::ReadMemory(ra::data::ByteAddress nFirstAddress, int nNumVisibleLines) { m_nQueuedReadAddress = nFirstAddress; DispatchMemoryRead([this, nFirstAddress, nNumVisibleLines]() { @@ -683,7 +683,7 @@ void MemoryViewerViewModel::RetreatCursorPage() } } -uint8_t MemoryViewerViewModel::GetValueAtAddress(ra::ByteAddress nAddress) const +uint8_t MemoryViewerViewModel::GetValueAtAddress(ra::data::ByteAddress nAddress) const { const auto nFirstAddress = GetFirstAddress(); if (nAddress < nFirstAddress) @@ -707,7 +707,7 @@ void MemoryViewerViewModel::IncreaseCurrentValue(uint32_t nModifier) const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); auto nMem = pEmulatorContext.ReadMemory(nAddress, nSize); - auto const nMaxValue = ra::data::MemSizeMax(nSize); + auto const nMaxValue = ra::data::Memory::SizeMax(nSize); if (nMem >= nMaxValue) return; @@ -750,7 +750,7 @@ void MemoryViewerViewModel::OnActiveGameChanged() UpdateColors(); } -void MemoryViewerViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) +void MemoryViewerViewModel::OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { const auto nFirstAddress = GetFirstAddress(); const auto nVisibleLines = GetNumVisibleLines(); @@ -769,7 +769,7 @@ void MemoryViewerViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::Byt OnCodeNoteChanged(nNewAddress, sNote); } -void MemoryViewerViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNote) +void MemoryViewerViewModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNote) { const auto nFirstAddress = GetFirstAddress(); if (nAddress < nFirstAddress) @@ -834,7 +834,7 @@ void MemoryViewerViewModel::OnTotalMemorySizeChanged() { const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); const bool bTotalMemorySizeWasZero = (m_nTotalMemorySize == 0); - m_nTotalMemorySize = gsl::narrow_cast(pEmulatorContext.TotalMemorySize()); + m_nTotalMemorySize = gsl::narrow_cast(pEmulatorContext.TotalMemorySize()); if (m_nTotalMemorySize == 0) { @@ -847,7 +847,7 @@ void MemoryViewerViewModel::OnTotalMemorySizeChanged() if (bTotalMemorySizeWasZero) { // size changing from 0, see if a memory address was requested - const auto nPendingAddress = gsl::narrow_cast(GetValue(PendingAddressProperty)); + const auto nPendingAddress = gsl::narrow_cast(GetValue(PendingAddressProperty)); if (nPendingAddress > 0) { SetValue(PendingAddressProperty, PendingAddressProperty.GetDefaultValue()); @@ -898,7 +898,7 @@ void MemoryViewerViewModel::OnTotalMemorySizeChanged() ResetSurface(); } -void MemoryViewerViewModel::OnByteWritten(ra::ByteAddress nAddress, uint8_t nValue) +void MemoryViewerViewModel::OnByteWritten(ra::data::ByteAddress nAddress, uint8_t nValue) { auto nFirstAddress = GetFirstAddress(); if (nAddress < nFirstAddress) @@ -917,7 +917,7 @@ void MemoryViewerViewModel::OnByteWritten(ra::ByteAddress nAddress, uint8_t nVal #pragma warning(push) #pragma warning(disable : 5045) -void MemoryViewerViewModel::UpdateColor(ra::ByteAddress nAddress) +void MemoryViewerViewModel::UpdateColor(ra::data::ByteAddress nAddress) { auto nFirstAddress = GetFirstAddress(); if (nAddress < nFirstAddress) @@ -961,7 +961,7 @@ void MemoryViewerViewModel::OnClick(int nX, int nY) const auto nWordSpacing = nNibblesPerWord + 1; const auto nBytesPerWord = nNibblesPerWord / 2; const auto nFirstAddress = GetFirstAddress(); - ra::ByteAddress nNewAddress = nFirstAddress + (nRow - 1) * 16; + ra::data::ByteAddress nNewAddress = nFirstAddress + (nRow - 1) * 16; int nNewNibble = 0; int nColumn = nX / s_szChar.Width; @@ -1031,7 +1031,7 @@ void MemoryViewerViewModel::OnResized(int nWidth, int nHeight) void MemoryViewerViewModel::DetermineIfASCIIShouldBeVisible() { - const bool bShowASCII = m_bWideEnoughForASCII && GetSize() == MemSize::EightBit; + const bool bShowASCII = m_bWideEnoughForASCII && GetSize() == ra::data::Memory::Size::EightBit; if (bShowASCII != m_bShowASCII) { m_bShowASCII = bShowASCII; @@ -1307,7 +1307,7 @@ void MemoryViewerViewModel::RenderMemory() if (nFirstAddress + nVisibleLines * 16 > m_nTotalMemorySize) nVisibleLines = (m_nTotalMemorySize - nFirstAddress + 15) / 16; - const bool bBigEndian = (GetSize() == MemSize::ThirtyTwoBitBigEndian); + const bool bBigEndian = (GetSize() == ra::data::Memory::Size::ThirtyTwoBitBigEndian); const int nWordSpacing = NibblesPerWord() + 1; const int nBytesPerWord = nWordSpacing / 2; const int nWordsPerLine = 16 / nBytesPerWord; diff --git a/src/ui/viewmodels/MemoryViewerViewModel.hh b/src/ui/viewmodels/MemoryViewerViewModel.hh index 6e3e75fd4..d4a5cc5e4 100644 --- a/src/ui/viewmodels/MemoryViewerViewModel.hh +++ b/src/ui/viewmodels/MemoryViewerViewModel.hh @@ -33,7 +33,7 @@ public: void InitializeNotifyTargets(); void DetachNotifyTargets() noexcept; - void InitializeFixedViewer(const ra::ByteAddress nAddress); + void InitializeFixedViewer(const ra::data::ByteAddress nAddress); void DoFrame(); @@ -92,12 +92,12 @@ public: /// /// Gets the address of the selected byte. /// - ByteAddress GetAddress() const { return GetValue(AddressProperty); } + ra::data::ByteAddress GetAddress() const { return GetValue(AddressProperty); } /// /// Sets the address of the selected byte. /// - void SetAddress(ByteAddress value); + void SetAddress(ra::data::ByteAddress value); /// /// Gets whether or not the address is fixed. @@ -117,12 +117,12 @@ public: /// /// Gets the address of the first visible byte. /// - ByteAddress GetFirstAddress() const { return GetValue(FirstAddressProperty); } + ra::data::ByteAddress GetFirstAddress() const { return GetValue(FirstAddressProperty); } /// /// Sets the address of the first visible byte. /// - void SetFirstAddress(ByteAddress nValue); + void SetFirstAddress(ra::data::ByteAddress nValue); /// /// The for the number of visible lines. @@ -155,12 +155,12 @@ public: /// /// Gets the memory word size. /// - MemSize GetSize() const { return ra::itoe(GetValue(SizeProperty)); } + ra::data::Memory::Size GetSize() const { return ra::itoe(GetValue(SizeProperty)); } /// /// Sets the memory word size. /// - void SetSize(MemSize value) { SetValue(SizeProperty, ra::etoi(value)); } + void SetSize(ra::data::Memory::Size value) { SetValue(SizeProperty, ra::etoi(value)); } void OnClick(int nX, int nY); void OnResized(int nWidth, int nHeight); @@ -177,7 +177,7 @@ public: void AdvanceCursorPage(); void RetreatCursorPage(); - uint8_t GetValueAtAddress(ra::ByteAddress nAddress) const; + uint8_t GetValueAtAddress(ra::data::ByteAddress nAddress) const; void IncreaseCurrentValue(uint32_t nModifier); void DecreaseCurrentValue(uint32_t nModifier); @@ -186,12 +186,12 @@ protected: // GameContext::NotifyTarget void OnActiveGameChanged() override; - void OnCodeNoteChanged(ra::ByteAddress, const std::wstring&) override; - void OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) override; + void OnCodeNoteChanged(ra::data::ByteAddress, const std::wstring&) override; + void OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) override; // EmulatorContext::NotifyTarget void OnTotalMemorySizeChanged() override; - void OnByteWritten(ra::ByteAddress nAddress, uint8_t nValue) override; + void OnByteWritten(ra::data::ByteAddress nAddress, uint8_t nValue) override; uint8_t* m_pMemory; uint8_t* m_pColor; @@ -200,7 +200,7 @@ protected: static ra::ui::Size s_szChar; int m_nSelectedNibble = 0; - ra::ByteAddress m_nTotalMemorySize = 0; + ra::data::ByteAddress m_nTotalMemorySize = 0; bool m_bReadOnly = false; bool m_bAddressFixed = false; bool m_bHasFocus = false; @@ -225,12 +225,12 @@ private: void RenderMemory(); void WriteChar(int nX, int nY, TextColor nColor, int hexChar); - void UpdateColor(ra::ByteAddress nAddress); + void UpdateColor(ra::data::ByteAddress nAddress); void UpdateColors(); void UpdateInvalidRegions(); - void UpdateHighlight(ra::ByteAddress nAddress, int nNewLength, int nOldLength); + void UpdateHighlight(ra::data::ByteAddress nAddress, int nNewLength, int nOldLength); - void ReadMemory(ra::ByteAddress nFirstAddress, int nNumVisibleLines); + void ReadMemory(ra::data::ByteAddress nFirstAddress, int nNumVisibleLines); int NibblesPerWord() const; int GetSelectedNibbleOffset() const; void UpdateSelectedNibble(int nNewNibble); @@ -238,7 +238,7 @@ private: void DetermineIfASCIIShouldBeVisible(); std::unique_ptr m_pBuffer; - ra::ByteAddress m_nQueuedReadAddress = 0xFFFFFFFF; + ra::data::ByteAddress m_nQueuedReadAddress = 0xFFFFFFFF; std::unique_ptr m_pSurface; static std::unique_ptr s_pFontSurface; diff --git a/src/ui/viewmodels/MemoryWatchListViewModel.cpp b/src/ui/viewmodels/MemoryWatchListViewModel.cpp index 7310270e5..833e65dbb 100644 --- a/src/ui/viewmodels/MemoryWatchListViewModel.cpp +++ b/src/ui/viewmodels/MemoryWatchListViewModel.cpp @@ -31,26 +31,26 @@ const IntModelProperty MemoryWatchListViewModel::SingleSelectionIndexProperty("M MemoryWatchListViewModel::MemoryWatchListViewModel() noexcept { - m_vSizes.Add(ra::etoi(MemSize::EightBit), L" 8-bit"); // leading space for sort order - m_vSizes.Add(ra::etoi(MemSize::SixteenBit), ra::data::MemSizeString(MemSize::SixteenBit)); - m_vSizes.Add(ra::etoi(MemSize::TwentyFourBit), ra::data::MemSizeString(MemSize::TwentyFourBit)); - m_vSizes.Add(ra::etoi(MemSize::ThirtyTwoBit), ra::data::MemSizeString(MemSize::ThirtyTwoBit)); - m_vSizes.Add(ra::etoi(MemSize::SixteenBitBigEndian), ra::data::MemSizeString(MemSize::SixteenBitBigEndian)); - m_vSizes.Add(ra::etoi(MemSize::TwentyFourBitBigEndian), ra::data::MemSizeString(MemSize::TwentyFourBitBigEndian)); - m_vSizes.Add(ra::etoi(MemSize::ThirtyTwoBitBigEndian), ra::data::MemSizeString(MemSize::ThirtyTwoBitBigEndian)); - m_vSizes.Add(ra::etoi(MemSize::BitCount), ra::data::MemSizeString(MemSize::BitCount)); - m_vSizes.Add(ra::etoi(MemSize::Nibble_Lower), ra::data::MemSizeString(MemSize::Nibble_Lower)); - m_vSizes.Add(ra::etoi(MemSize::Nibble_Upper), ra::data::MemSizeString(MemSize::Nibble_Upper)); - m_vSizes.Add(ra::etoi(MemSize::Float), ra::data::MemSizeString(MemSize::Float)); - m_vSizes.Add(ra::etoi(MemSize::FloatBigEndian), ra::data::MemSizeString(MemSize::FloatBigEndian)); - m_vSizes.Add(ra::etoi(MemSize::Double32), ra::data::MemSizeString(MemSize::Double32)); - m_vSizes.Add(ra::etoi(MemSize::Double32BigEndian), ra::data::MemSizeString(MemSize::Double32BigEndian)); - m_vSizes.Add(ra::etoi(MemSize::MBF32), ra::data::MemSizeString(MemSize::MBF32)); - m_vSizes.Add(ra::etoi(MemSize::MBF32LE), ra::data::MemSizeString(MemSize::MBF32LE)); - m_vSizes.Add(ra::etoi(MemSize::Text), ra::data::MemSizeString(MemSize::Text)); - - m_vFormats.Add(ra::etoi(MemFormat::Hex), L"Hex"); - m_vFormats.Add(ra::etoi(MemFormat::Dec), L"Dec"); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::EightBit), L" 8-bit"); // leading space for sort order + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::SixteenBit), ra::data::Memory::SizeString(ra::data::Memory::Size::SixteenBit)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::TwentyFourBit), ra::data::Memory::SizeString(ra::data::Memory::Size::TwentyFourBit)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::ThirtyTwoBit), ra::data::Memory::SizeString(ra::data::Memory::Size::ThirtyTwoBit)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::SixteenBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::SixteenBitBigEndian)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::TwentyFourBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::TwentyFourBitBigEndian)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::ThirtyTwoBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::ThirtyTwoBitBigEndian)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::BitCount), ra::data::Memory::SizeString(ra::data::Memory::Size::BitCount)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Lower), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Lower)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Upper), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Upper)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Float), ra::data::Memory::SizeString(ra::data::Memory::Size::Float)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::FloatBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::FloatBigEndian)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Double32), ra::data::Memory::SizeString(ra::data::Memory::Size::Double32)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Double32BigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::Double32BigEndian)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::MBF32), ra::data::Memory::SizeString(ra::data::Memory::Size::MBF32)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::MBF32LE), ra::data::Memory::SizeString(ra::data::Memory::Size::MBF32LE)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Text), ra::data::Memory::SizeString(ra::data::Memory::Size::Text)); + + m_vFormats.Add(ra::etoi(ra::data::Memory::Format::Hex), L"Hex"); + m_vFormats.Add(ra::etoi(ra::data::Memory::Format::Dec), L"Dec"); m_vItems.AddNotifyTarget(*this); } @@ -67,7 +67,7 @@ void MemoryWatchListViewModel::InitializeNotifyTargets(bool syncNotes) pEmulatorContext.AddNotifyTarget(*this); } -void MemoryWatchListViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) +void MemoryWatchListViewModel::OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { for (auto& pItem : m_vItems) { @@ -82,7 +82,7 @@ void MemoryWatchListViewModel::OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra:: } } -void MemoryWatchListViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) +void MemoryWatchListViewModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { for (auto& pItem : m_vItems) { @@ -91,7 +91,7 @@ void MemoryWatchListViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const } } -void MemoryWatchListViewModel::OnByteWritten(ra::ByteAddress nAddress, uint8_t) +void MemoryWatchListViewModel::OnByteWritten(ra::data::ByteAddress nAddress, uint8_t) { ra::data::context::EmulatorContext::DispatchesReadMemory::DispatchMemoryRead([this, nAddress]() { for (auto& pItem : m_vItems) diff --git a/src/ui/viewmodels/MemoryWatchListViewModel.hh b/src/ui/viewmodels/MemoryWatchListViewModel.hh index 26b5c6db9..dcfbf2c31 100644 --- a/src/ui/viewmodels/MemoryWatchListViewModel.hh +++ b/src/ui/viewmodels/MemoryWatchListViewModel.hh @@ -84,11 +84,11 @@ public: protected: // ra::data::context::GameContext::NotifyTarget - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) override; - void OnCodeNoteMoved(ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) override; + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) override; + void OnCodeNoteMoved(ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) override; // ra::data::context::EmulatorContext::NotifyTarget - void OnByteWritten(ra::ByteAddress, uint8_t) override; + void OnByteWritten(ra::data::ByteAddress, uint8_t) override; // ra::ui::ViewModelCollectionBase::NotifyTarget void OnViewModelBoolValueChanged(gsl::index nIndex, const BoolModelProperty::ChangeArgs& args) override; diff --git a/src/ui/viewmodels/MemoryWatchViewModel.cpp b/src/ui/viewmodels/MemoryWatchViewModel.cpp index 06da7c6a8..439e6cbdf 100644 --- a/src/ui/viewmodels/MemoryWatchViewModel.cpp +++ b/src/ui/viewmodels/MemoryWatchViewModel.cpp @@ -34,8 +34,8 @@ const StringModelProperty MemoryWatchViewModel::DescriptionProperty("MemoryWatch const BoolModelProperty MemoryWatchViewModel::IsCustomDescriptionProperty("MemoryWatchViewModel", "IsCustomDescription", false); const StringModelProperty MemoryWatchViewModel::RealNoteProperty("MemoryWatchViewModel", "Description", L""); const IntModelProperty MemoryWatchViewModel::AddressProperty("MemoryWatchViewModel", "Address", 0); -const IntModelProperty MemoryWatchViewModel::SizeProperty("MemoryWatchViewModel", "Size", ra::etoi(MemSize::EightBit)); -const IntModelProperty MemoryWatchViewModel::FormatProperty("MemoryWatchViewModel", "Format", ra::etoi(MemFormat::Hex)); +const IntModelProperty MemoryWatchViewModel::SizeProperty("MemoryWatchViewModel", "Size", ra::etoi(ra::data::Memory::Size::EightBit)); +const IntModelProperty MemoryWatchViewModel::FormatProperty("MemoryWatchViewModel", "Format", ra::etoi(ra::data::Memory::Format::Hex)); const StringModelProperty MemoryWatchViewModel::CurrentValueProperty("MemoryWatchViewModel", "CurrentValue", L"0"); const StringModelProperty MemoryWatchViewModel::PreviousValueProperty("MemoryWatchViewModel", "PreviousValue", L"0"); const IntModelProperty MemoryWatchViewModel::ChangesProperty("MemoryWatchViewModel", "Changes", 0); @@ -43,7 +43,7 @@ const IntModelProperty MemoryWatchViewModel::RowColorProperty("MemoryWatchViewMo const BoolModelProperty MemoryWatchViewModel::ReadOnlyProperty("MemoryWatchViewModel", "IsReadOnly", false); const BoolModelProperty MemoryWatchViewModel::IsWritingMemoryProperty("MemoryWatchViewModel", "IsWritingMemory", false); -void MemoryWatchViewModel::SetAddressWithoutUpdatingValue(ra::ByteAddress nNewAddress) +void MemoryWatchViewModel::SetAddressWithoutUpdatingValue(ra::data::ByteAddress nNewAddress) { // set m_bInitialized to false while updating the address to prevent synchronizing the value const bool bInitialized = m_bInitialized; @@ -151,11 +151,11 @@ static rc_condition_t* FindMeasuredCondition(rc_value_t* pValue) noexcept void MemoryWatchViewModel::OnSizeChanged(const IntModelProperty::ChangeArgs& args) { - m_nSize = ra::itoe(args.tNewValue); + m_nSize = ra::itoe(args.tNewValue); switch (m_nSize) { - case MemSize::BitCount: - case MemSize::Text: + case ra::data::Memory::Size::BitCount: + case ra::data::Memory::Size::Text: SetReadOnly(true); break; @@ -174,7 +174,7 @@ void MemoryWatchViewModel::OnSizeChanged(const IntModelProperty::ChangeArgs& arg std::string sOldSerialized; ra::services::AchievementLogicSerializer::AppendConditionType(sOldSerialized, TriggerConditionType::Measured); ra::services::AchievementLogicSerializer::AppendOperand( - sOldSerialized, ra::services::TriggerOperandType::Address, ra::itoe(args.tOldValue), 0U); + sOldSerialized, ra::services::TriggerOperandType::Address, ra::itoe(args.tOldValue), 0U); auto nZeroIndex = sOldSerialized.find("00"); if (nZeroIndex != std::string::npos) { @@ -234,21 +234,21 @@ uint32_t MemoryWatchViewModel::ReadValue() if (IsIndirectAddress()) UpdateCurrentAddressFromIndirectAddress(); - if (m_nSize != MemSize::Text) + if (m_nSize != ra::data::Memory::Size::Text) { // if value is a float, convert it back to the raw bytes appropriate for the size - if (ra::data::MemSizeIsFloat(m_nSize)) - return ra::data::FloatToU32(value.value.f32, m_nSize); + if (ra::data::Memory::SizeIsFloat(m_nSize)) + return ra::data::Memory::FloatToU32(value.value.f32, m_nSize); return value.value.u32; } - // MemSize::Text requires special processing. now that m_nAddress has been + // Memory::Size::Text requires special processing. now that m_nAddress has been // updated, proceeed to logic below to do the special processing. } const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); - if (m_nSize == MemSize::Text) + if (m_nSize == ra::data::Memory::Size::Text) { // only have 32 bits to store the value in. generate a hash for the string std::array pBuffer; @@ -287,19 +287,19 @@ bool MemoryWatchViewModel::SetCurrentValue(const std::wstring& sValue, _Out_ std const auto nAddress = m_nAddress; unsigned nValue = 0; - if (ra::data::MemSizeIsFloat(m_nSize)) + if (ra::data::Memory::SizeIsFloat(m_nSize)) { float fValue; if (!ra::ParseFloat(sValue, fValue, sError)) return false; - nValue = ra::data::FloatToU32(fValue, m_nSize); + nValue = ra::data::Memory::FloatToU32(fValue, m_nSize); } else { - const auto nMaximumValue = ra::data::MemSizeMax(m_nSize); + const auto nMaximumValue = ra::data::Memory::SizeMax(m_nSize); - if (GetFormat() == MemFormat::Dec) + if (GetFormat() == ra::data::Memory::Format::Dec) { if (!ra::ParseUnsignedInt(sValue, nMaximumValue, nValue, sError)) return false; @@ -379,14 +379,14 @@ void MemoryWatchViewModel::OnValueChanged() std::wstring MemoryWatchViewModel::BuildCurrentValue() const { - if (m_nSize == MemSize::Text) + if (m_nSize == ra::data::Memory::Size::Text) { ra::services::SearchResults pResults; pResults.Initialize(m_nAddress, MaxTextBookmarkLength, ra::services::SearchType::AsciiText); - return pResults.GetFormattedValue(m_nAddress, MemSize::Text); + return pResults.GetFormattedValue(m_nAddress, ra::data::Memory::Size::Text); } - return ra::data::MemSizeFormat(m_nValue, m_nSize, GetFormat()); + return ra::data::Memory::FormatValue(m_nValue, m_nSize, GetFormat()); } bool MemoryWatchViewModel::UpdateCurrentAddressFromIndirectAddress() @@ -430,7 +430,7 @@ bool MemoryWatchViewModel::UpdateCurrentAddressFromIndirectAddress() rc_evaluate_operand(&offset, &pModifiedMemref->modifier, nullptr); rc_typed_value_add(&address, &offset); rc_typed_value_convert(&address, RC_VALUE_TYPE_UNSIGNED); - const auto nNewAddress = gsl::narrow_cast(address.value.u32); + const auto nNewAddress = gsl::narrow_cast(address.value.u32); if (m_nAddress != nNewAddress) { @@ -486,9 +486,9 @@ void MemoryWatchViewModel::SetIndirectAddress(const std::string& sSerialized) const auto* pCondition = FindMeasuredCondition(m_pValue); if (pCondition != nullptr) - SetSize(ra::data::models::TriggerValidation::MapRcheevosMemSize(rc_condition_get_real_operand1(pCondition)->size)); + SetSize(ra::data::Memory::SizeFromRcheevosSize(rc_condition_get_real_operand1(pCondition)->size)); - SetFormat(ra::MemFormat::Unknown); + SetFormat(ra::data::Memory::Format::Unknown); DispatchMemoryRead([this]() { // value must be updated first to populate memrefs @@ -546,11 +546,11 @@ void MemoryWatchViewModel::UpdateRealNote() SetRealNote(pNote->GetNote()); // if bookmarking an 8-byte double, automatically adjust the bookmark for the significant bytes - if (GetSize() == MemSize::Double32 && pNote->GetBytes() == 8) + if (GetSize() == ra::data::Memory::Size::Double32 && pNote->GetBytes() == 8) SetAddress(pNote->GetAddress() + 4); } - if (GetFormat() == MemFormat::Unknown) + if (GetFormat() == ra::data::Memory::Format::Unknown) { if (pNote) { @@ -560,7 +560,7 @@ void MemoryWatchViewModel::UpdateRealNote() { const auto& pConfiguration = ra::services::ServiceLocator::Get(); const auto bPreferDecimal = pConfiguration.IsFeatureEnabled(ra::services::Feature::PreferDecimal); - SetFormat(bPreferDecimal ? MemFormat::Dec : MemFormat::Hex); + SetFormat(bPreferDecimal ? ra::data::Memory::Format::Dec : ra::data::Memory::Format::Hex); } } } diff --git a/src/ui/viewmodels/MemoryWatchViewModel.hh b/src/ui/viewmodels/MemoryWatchViewModel.hh index 9bfe1195b..671dfbe11 100644 --- a/src/ui/viewmodels/MemoryWatchViewModel.hh +++ b/src/ui/viewmodels/MemoryWatchViewModel.hh @@ -74,12 +74,12 @@ public: /// /// Gets the watched address. /// - ByteAddress GetAddress() const noexcept { return m_nAddress; } + ra::data::ByteAddress GetAddress() const noexcept { return m_nAddress; } /// /// Sets the watched address. /// - void SetAddress(ByteAddress value) { SetValue(AddressProperty, value); } + void SetAddress(ra::data::ByteAddress value) { SetValue(AddressProperty, value); } /// /// Sets a serialized definition for an indirect watched address. @@ -117,19 +117,19 @@ public: /// /// Gets the watched memory size. /// - MemSize GetSize() const noexcept { return m_nSize; } + ra::data::Memory::Size GetSize() const noexcept { return m_nSize; } /// /// Sets the watched memory size. /// - void SetSize(MemSize value) { SetValue(SizeProperty, ra::etoi(value)); } + void SetSize(ra::data::Memory::Size value) { SetValue(SizeProperty, ra::etoi(value)); } /// /// Gets the number of bytes being watched. /// uint32_t GetSizeBytes() const noexcept { - return (m_nSize == MemSize::Text) ? MaxTextBookmarkLength : ra::data::MemSizeBytes(m_nSize); + return (m_nSize == ra::data::Memory::Size::Text) ? MaxTextBookmarkLength : ra::data::Memory::SizeBytes(m_nSize); } /// @@ -140,12 +140,12 @@ public: /// /// Gets the watched memory format. /// - MemFormat GetFormat() const { return ra::itoe(GetValue(FormatProperty)); } + ra::data::Memory::Format GetFormat() const { return ra::itoe(GetValue(FormatProperty)); } /// /// Sets the watched memory format. /// - void SetFormat(MemFormat value) { SetValue(FormatProperty, ra::etoi(value)); } + void SetFormat(ra::data::Memory::Format value) { SetValue(FormatProperty, ra::etoi(value)); } /// /// The for the current value of the watched memory. @@ -284,7 +284,7 @@ protected: uint32_t ReadValue(); - void SetAddressWithoutUpdatingValue(ra::ByteAddress nNewAddress); + void SetAddressWithoutUpdatingValue(ra::data::ByteAddress nNewAddress); virtual bool IgnoreValueChange(uint32_t) noexcept(false) { return false; } virtual bool ChangeValue(uint32_t nNewValue); @@ -294,9 +294,9 @@ private: static std::wstring ExtractDescriptionHeader(const std::wstring& sFullNote); // keep address/size/value fields directly accessible for speed - also keep in ValueProperty for binding - ra::ByteAddress m_nAddress = 0; + ra::data::ByteAddress m_nAddress = 0; uint32_t m_nValue = 0; - MemSize m_nSize = MemSize::EightBit; + ra::data::Memory::Size m_nSize = ra::data::Memory::Size::EightBit; bool m_bModified = false; bool m_bInitialized = false; bool m_bSyncingDescriptionHeader = false; diff --git a/src/ui/viewmodels/PointerFinderViewModel.cpp b/src/ui/viewmodels/PointerFinderViewModel.cpp index 959347365..ce9a129e9 100644 --- a/src/ui/viewmodels/PointerFinderViewModel.cpp +++ b/src/ui/viewmodels/PointerFinderViewModel.cpp @@ -90,7 +90,7 @@ void PointerFinderViewModel::StateViewModel::Capture() DispatchMemoryRead([this]() { const auto& pEmulatorContext = ra::services::ServiceLocator::GetMutable(); - const auto nMemorySize = gsl::narrow(pEmulatorContext.TotalMemorySize()); + const auto nMemorySize = gsl::narrow(pEmulatorContext.TotalMemorySize()); m_pCapture.reset(new ra::services::SearchResults()); m_pCapture->Initialize(0, nMemorySize, m_pOwner->GetSearchType()); @@ -150,7 +150,7 @@ void PointerFinderViewModel::OnValueChanged(const IntModelProperty::ChangeArgs& } } -static std::wstring FormatValue(const ra::services::SearchResults& srResults, ra::ByteAddress nAddress) +static std::wstring FormatValue(const ra::services::SearchResults& srResults, ra::data::ByteAddress nAddress) { auto sValue = srResults.GetFormattedValue(nAddress, srResults.GetSize()); if (sValue.at(1) == 'x' && sValue.at(0) == '0') @@ -191,7 +191,7 @@ void PointerFinderViewModel::Find() // compare the two memory states ra::services::SearchResults pResults; - auto pReadMemory = [srSecond = pStateJ.CapturedMemory()](ra::ByteAddress nAddress, uint8_t* pBuffer, size_t nBufferSize) noexcept { + auto pReadMemory = [srSecond = pStateJ.CapturedMemory()](ra::data::ByteAddress nAddress, uint8_t* pBuffer, size_t nBufferSize) noexcept { srSecond->GetBytes(nAddress, pBuffer, nBufferSize); }; if (nAddressI > nAddressJ) @@ -288,13 +288,13 @@ void PointerFinderViewModel::BookmarkSelected() { if (pItem.IsSelected()) { - MemSize nSize = MemSize::ThirtyTwoBit; + auto nSize = ra::data::Memory::Size::ThirtyTwoBit; switch (GetSearchType()) { case ra::services::SearchType::SixteenBit: case ra::services::SearchType::SixteenBitAligned: case ra::services::SearchType::SixteenBitBigEndian: - nSize = MemSize::SixteenBit; + nSize = ra::data::Memory::Size::SixteenBit; break; } diff --git a/src/ui/viewmodels/PointerFinderViewModel.hh b/src/ui/viewmodels/PointerFinderViewModel.hh index 77eb52c9f..0a2158e63 100644 --- a/src/ui/viewmodels/PointerFinderViewModel.hh +++ b/src/ui/viewmodels/PointerFinderViewModel.hh @@ -247,7 +247,7 @@ public: } } - ra::ByteAddress GetRawAddress() const noexcept { return m_nAddress; } + ra::data::ByteAddress GetRawAddress() const noexcept { return m_nAddress; } /// /// The for the whether the result is selected. @@ -266,7 +266,7 @@ public: private: friend class PointerFinderViewModel; - ra::ByteAddress m_nAddress = 0; + ra::data::ByteAddress m_nAddress = 0; bool m_bMatched = false; }; diff --git a/src/ui/viewmodels/PointerInspectorViewModel.cpp b/src/ui/viewmodels/PointerInspectorViewModel.cpp index b27ead13e..2807cffb1 100644 --- a/src/ui/viewmodels/PointerInspectorViewModel.cpp +++ b/src/ui/viewmodels/PointerInspectorViewModel.cpp @@ -56,7 +56,7 @@ void PointerInspectorViewModel::OnValueChanged(const IntModelProperty::ChangeArg { if (args.Property == CurrentAddressProperty && !m_bSyncingAddress) { - const auto nAddress = static_cast(args.tNewValue); + const auto nAddress = static_cast(args.tNewValue); m_bSyncingAddress = true; SetCurrentAddressText(ra::Widen(ra::ByteAddressToString(nAddress))); @@ -118,12 +118,12 @@ void PointerInspectorViewModel::OnViewModelIntValueChanged(gsl::index nIndex, co void PointerInspectorViewModel::OnActiveGameChanged() { const auto& pGameContext = ra::services::ServiceLocator::Get(); - ra::ByteAddress nAddress = 0; + ra::data::ByteAddress nAddress = 0; if (pGameContext.GameId() != 0) { if (m_vPointers.Count() > 0) - nAddress = gsl::narrow_cast(m_vPointers.GetItemAt(0)->GetId()); + nAddress = gsl::narrow_cast(m_vPointers.GetItemAt(0)->GetId()); } if (nAddress == 0) @@ -168,7 +168,7 @@ void PointerInspectorViewModel::OnEndGameLoad() if (pCodeNotes != nullptr) { pCodeNotes->EnumerateCodeNotes( - [this, &pEmulatorContext](ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pNote) { + [this, &pEmulatorContext](ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pNote) { if (pNote.IsPointer()) { m_vPointers.Add(nAddress, @@ -187,7 +187,7 @@ void PointerInspectorViewModel::OnEndGameLoad() m_vPointers.EndUpdate(); } -void PointerInspectorViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring&) +void PointerInspectorViewModel::OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring&) { if (nAddress == GetCurrentAddress() && !m_bSyncingNote) { @@ -205,7 +205,7 @@ void PointerInspectorViewModel::OnCodeNoteChanged(ra::ByteAddress nAddress, cons } } -void PointerInspectorViewModel::UpdatePointerVisibility(ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel* pNote) +void PointerInspectorViewModel::UpdatePointerVisibility(ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel* pNote) { const bool bIsPointerNote = pNote && pNote->IsPointer(); @@ -213,7 +213,7 @@ void PointerInspectorViewModel::UpdatePointerVisibility(ra::ByteAddress nAddress gsl::index nIndex = 0; while (nIndex < nCount) { - const auto nPointerAddress = gsl::narrow_cast(m_vPointers.GetItemValue(nIndex, LookupItemViewModel::IdProperty)); + const auto nPointerAddress = gsl::narrow_cast(m_vPointers.GetItemValue(nIndex, LookupItemViewModel::IdProperty)); if (nPointerAddress == nAddress) { if (!bIsPointerNote) @@ -248,7 +248,7 @@ void PointerInspectorViewModel::UpdatePointerVisibility(ra::ByteAddress nAddress } } -void PointerInspectorViewModel::OnCurrentAddressChanged(ra::ByteAddress nNewAddress) +void PointerInspectorViewModel::OnCurrentAddressChanged(ra::data::ByteAddress nNewAddress) { const auto& pGameContext = ra::services::ServiceLocator::Get(); const auto* pCodeNotes = pGameContext.Assets().FindCodeNotes(); @@ -418,7 +418,7 @@ const ra::data::models::CodeNoteModel* PointerInspectorViewModel::UpdatePointerC else { pItem->SetRealNote(L""); - pItem->SetSize(MemSize::EightBit); + pItem->SetSize(ra::data::Memory::Size::EightBit); } // EndInitialization does memory reads, so it must be dispatched. we'll do it in a bit @@ -455,13 +455,13 @@ void PointerInspectorViewModel::SyncField(PointerInspectorViewModel::StructField auto nSize = pOffsetNote.GetMemSize(); switch (nSize) { - case MemSize::Unknown: - nSize = MemSize::EightBit; + case ra::data::Memory::Size::Unknown: + nSize = ra::data::Memory::Size::EightBit; break; - case MemSize::Array: - nSize = MemSize::ThirtyTwoBitBigEndian; - pFieldViewModel.SetFormat(ra::MemFormat::Hex); + case ra::data::Memory::Size::Array: + nSize = ra::data::Memory::Size::ThirtyTwoBitBigEndian; + pFieldViewModel.SetFormat(ra::data::Memory::Format::Hex); break; default: @@ -508,7 +508,7 @@ void PointerInspectorViewModel::LoadNote(const ra::data::models::CodeNoteModel* gsl::index nInsertIndex = 0; m_vmFields.Items().BeginUpdate(); pNote->EnumeratePointerNotes([this, &nCount, &nInsertIndex, nBaseAddress] - (ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pOffsetNote) + (ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pOffsetNote) { const auto nOffset = nAddress - nBaseAddress; const std::wstring sOffset = ra::StringPrintf(L"+%04x", nOffset); @@ -556,10 +556,10 @@ void PointerInspectorViewModel::LoadNote(const ra::data::models::CodeNoteModel* } static void LoadSubNotes(LookupItemViewModelCollection& vNodes, - const ra::data::models::CodeNoteModel& pNote, ra::ByteAddress nBaseAddress, int nDepth, int nParentIndex) + const ra::data::models::CodeNoteModel& pNote, ra::data::ByteAddress nBaseAddress, int nDepth, int nParentIndex) { pNote.EnumeratePointerNotes([&vNodes, nBaseAddress, nDepth, nParentIndex] - (ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pOffsetNote) { + (ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pOffsetNote) { const auto nOffset = nAddress - nBaseAddress; if (!pOffsetNote.IsPointer()) return true; @@ -640,17 +640,17 @@ void PointerInspectorViewModel::BuildNoteForCurrentNode(ra::StringBuilder& build builder.Append(std::wstring(nDepth, '+')); builder.Append(ra::StringPrintf(L"0x%02X: ", pField->m_nOffset)); - if (pField->GetSize() != MemSize::Unknown) + if (pField->GetSize() != ra::data::Memory::Size::Unknown) { builder.Append('['); - if (pField->GetSize() == MemSize::Text) + if (pField->GetSize() == ra::data::Memory::Size::Text) { builder.Append(newNote.GetBytes()); builder.Append(L"-byte ASCII] "); } else { - builder.Append(ra::data::MemSizeString(pField->GetSize())); + builder.Append(ra::data::Memory::SizeString(pField->GetSize())); if (bIsPointer) builder.Append(L" pointer] "); @@ -698,24 +698,24 @@ void PointerInspectorViewModel::BuildNote(ra::StringBuilder& builder, const auto nBaseAddress = pNote.GetPointerAddress(); pNote.EnumeratePointerNotes([this, &builder, &sChain, nDepth, nBaseAddress] - (ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pOffsetNote) { + (ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel& pOffsetNote) { const auto nOffset = nAddress - nBaseAddress; builder.Append(L"\r\n"); builder.Append(std::wstring(nDepth, '+')); builder.Append(ra::StringPrintf(L"0x%02X: ", nOffset)); - if (pOffsetNote.GetMemSize() != MemSize::Unknown) + if (pOffsetNote.GetMemSize() != ra::data::Memory::Size::Unknown) { builder.Append('['); - if (pOffsetNote.GetMemSize() == MemSize::Text) + if (pOffsetNote.GetMemSize() == ra::data::Memory::Size::Text) { builder.Append(pOffsetNote.GetBytes()); builder.Append(L"-byte ASCII] "); } else { - builder.Append(ra::data::MemSizeString(pOffsetNote.GetMemSize())); + builder.Append(ra::data::Memory::SizeString(pOffsetNote.GetMemSize())); if (pOffsetNote.IsPointer()) builder.Append(L" pointer] "); @@ -781,7 +781,7 @@ void PointerInspectorViewModel::UpdateSourceCodeNote() gsl::index nNoteIndex = 0; if (m_pCurrentNote) { m_pCurrentNote->EnumeratePointerNotes([this, &nNoteIndex] - (ra::ByteAddress, const ra::data::models::CodeNoteModel& pOffsetNote) + (ra::data::ByteAddress, const ra::data::models::CodeNoteModel& pOffsetNote) { m_vmFields.Items().GetItemAt(nNoteIndex++)->m_pNote = &pOffsetNote; return true; @@ -803,7 +803,7 @@ void PointerInspectorViewModel::UpdatePointerChainValues() if (m_vPointerChain.Count() == 0) return; - ra::ByteAddress nAddress = 0; + ra::data::ByteAddress nAddress = 0; const auto& pConsoleContext = ra::services::ServiceLocator::Get(); @@ -842,13 +842,13 @@ void PointerInspectorViewModel::UpdatePointerChainRowColor(PointerInspectorViewM const auto& pConsoleContext = ra::services::ServiceLocator::Get(); bool bValid = false; - MemSize nMemSize = MemSize::Unknown; + auto nMemSize = ra::data::Memory::Size::Unknown; uint32_t nMask = 0xFFFFFFFF; uint32_t nOffset = 0; if (pConsoleContext.GetRealAddressConversion(&nMemSize, &nMask, &nOffset)) { - if (nMemSize == MemSize::TwentyFourBit) - nMemSize = MemSize::ThirtyTwoBit; + if (nMemSize == ra::data::Memory::Size::TwentyFourBit) + nMemSize = ra::data::Memory::Size::ThirtyTwoBit; const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); const auto nRawPointer = pEmulatorContext.ReadMemory(pPointer.GetAddress(), nMemSize); @@ -1070,7 +1070,7 @@ void PointerInspectorViewModel::OnFieldSizeChanged(gsl::index nIndex) { const auto sUnsizedFieldNote = ra::data::models::CodeNoteModel::TrimSize(GetCurrentFieldNote(), false); const auto sNewFieldNote = ra::StringPrintf(L"[%s%s] %s", - ra::data::MemSizeString(pNote->GetSize()), + ra::data::Memory::SizeString(pNote->GetSize()), pNote->m_pNote->IsPointer() ? L" pointer" : L"", sUnsizedFieldNote); @@ -1087,7 +1087,7 @@ void PointerInspectorViewModel::NewField() { auto pField = std::make_unique(); pField->BeginInitialization(); - pField->SetFormat(ra::MemFormat::Dec); + pField->SetFormat(ra::data::Memory::Format::Dec); if (m_vmFields.Items().Count() > 0) { @@ -1099,25 +1099,25 @@ void PointerInspectorViewModel::NewField() else { // TODO: ConsoleContext should return an architecture size - MemSize nReadSize = MemSize::ThirtyTwoBit; + auto nReadSize = ra::data::Memory::Size::ThirtyTwoBit; uint32_t nMask = 0, nOffset = 0; auto& pConsoleContext = ra::services::ServiceLocator::Get(); pConsoleContext.GetRealAddressConversion(&nReadSize, &nMask, &nOffset); switch (nReadSize) { - case MemSize::TwentyFourBit: - nReadSize = MemSize::ThirtyTwoBit; + case ra::data::Memory::Size::TwentyFourBit: + nReadSize = ra::data::Memory::Size::ThirtyTwoBit; break; - case MemSize::TwentyFourBitBigEndian: - nReadSize = MemSize::ThirtyTwoBitBigEndian; + case ra::data::Memory::Size::TwentyFourBitBigEndian: + nReadSize = ra::data::Memory::Size::ThirtyTwoBitBigEndian; break; } pField->SetSize(nReadSize); } - pField->SetRealNote(ra::StringPrintf(L"[%s]", ra::data::MemSizeString(pField->GetSize()))); + pField->SetRealNote(ra::StringPrintf(L"[%s]", ra::data::Memory::SizeString(pField->GetSize()))); const auto nBaseAddress = (m_pCurrentNote != nullptr) ? m_pCurrentNote->GetPointerAddress() : 0U; pField->SetAddress(nBaseAddress + pField->m_nOffset); diff --git a/src/ui/viewmodels/PointerInspectorViewModel.hh b/src/ui/viewmodels/PointerInspectorViewModel.hh index 999acbd63..0005f2ef6 100644 --- a/src/ui/viewmodels/PointerInspectorViewModel.hh +++ b/src/ui/viewmodels/PointerInspectorViewModel.hh @@ -48,12 +48,12 @@ public: /// /// Gets the current address. /// - ra::ByteAddress GetCurrentAddress() const { return GetValue(CurrentAddressProperty); } + ra::data::ByteAddress GetCurrentAddress() const { return GetValue(CurrentAddressProperty); } /// /// Sets the current address. /// - void SetCurrentAddress(const ra::ByteAddress nValue) { SetValue(CurrentAddressProperty, nValue); } + void SetCurrentAddress(const ra::data::ByteAddress nValue) { SetValue(CurrentAddressProperty, nValue); } /// /// The for the current address as a string. @@ -249,13 +249,13 @@ protected: // GameContext::NotifyTarget void OnActiveGameChanged() override; void OnEndGameLoad() override; - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) override; + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) override; // ViewModelBase::NotifyTarget void OnViewModelIntValueChanged(const IntModelProperty::ChangeArgs& args) override; private: - void OnCurrentAddressChanged(ra::ByteAddress nNewAddress); + void OnCurrentAddressChanged(ra::data::ByteAddress nNewAddress); void OnSelectedNodeChanged(int nNode); void OnSelectedFieldChanged(int nNode); void OnFieldSizeChanged(gsl::index nIndex); @@ -265,7 +265,7 @@ private: const ra::data::models::CodeNoteModel* FindNestedCodeNoteModel(const ra::data::models::CodeNoteModel& pRootNote, int nNewNode); void GetPointerChain(gsl::index nIndex, std::stack& sChain) const; void SyncField(StructFieldViewModel& pFieldViewModel, const ra::data::models::CodeNoteModel& pOffsetNote); - void UpdatePointerVisibility(ra::ByteAddress nAddress, const ra::data::models::CodeNoteModel* pNote); + void UpdatePointerVisibility(ra::data::ByteAddress nAddress, const ra::data::models::CodeNoteModel* pNote); const ra::data::models::CodeNoteModel* UpdatePointerChain(int nNewNode); void UpdatePointerChainRowColor(StructFieldViewModel& pPointer); void UpdatePointerChainValues(); diff --git a/src/ui/viewmodels/TriggerConditionViewModel.cpp b/src/ui/viewmodels/TriggerConditionViewModel.cpp index 3045840b7..a332a444f 100644 --- a/src/ui/viewmodels/TriggerConditionViewModel.cpp +++ b/src/ui/viewmodels/TriggerConditionViewModel.cpp @@ -23,11 +23,11 @@ namespace viewmodels { const IntModelProperty TriggerConditionViewModel::IndexProperty("TriggerConditionViewModel", "Index", 1); const IntModelProperty TriggerConditionViewModel::TypeProperty("TriggerConditionViewModel", "Type", ra::etoi(TriggerConditionType::Standard)); const IntModelProperty TriggerConditionViewModel::SourceTypeProperty("TriggerConditionViewModel", "SourceType", ra::etoi(TriggerOperandType::Address)); -const IntModelProperty TriggerConditionViewModel::SourceSizeProperty("TriggerConditionViewModel", "SourceSize", ra::etoi(MemSize::EightBit)); +const IntModelProperty TriggerConditionViewModel::SourceSizeProperty("TriggerConditionViewModel", "SourceSize", ra::etoi(ra::data::Memory::Size::EightBit)); const StringModelProperty TriggerConditionViewModel::SourceValueProperty("TriggerConditionViewModel", "SourceValue", L"0"); const IntModelProperty TriggerConditionViewModel::OperatorProperty("TriggerConditionViewModel", "Operator", ra::etoi(TriggerOperatorType::Equals)); const IntModelProperty TriggerConditionViewModel::TargetTypeProperty("TriggerConditionViewModel", "TargetType", ra::etoi(TriggerOperandType::Value)); -const IntModelProperty TriggerConditionViewModel::TargetSizeProperty("TriggerConditionViewModel", "TargetSize", ra::etoi(MemSize::ThirtyTwoBit)); +const IntModelProperty TriggerConditionViewModel::TargetSizeProperty("TriggerConditionViewModel", "TargetSize", ra::etoi(ra::data::Memory::Size::ThirtyTwoBit)); const StringModelProperty TriggerConditionViewModel::TargetValueProperty("TriggerConditionViewModel", "TargetValue", L"0"); const IntModelProperty TriggerConditionViewModel::CurrentHitsProperty("TriggerConditionViewModel", "CurrentHits", 0); const IntModelProperty TriggerConditionViewModel::RequiredHitsProperty("TriggerConditionViewModel", "RequiredHits", 0); @@ -43,7 +43,7 @@ const BoolModelProperty TriggerConditionViewModel::HasHitsProperty("TriggerCondi const BoolModelProperty TriggerConditionViewModel::CanEditHitsProperty("TriggerConditionViewModel", "CanEditHits", true); const IntModelProperty TriggerConditionViewModel::RowColorProperty("TriggerConditionViewModel", "RowColor", 0); -constexpr ra::ByteAddress UNKNOWN_ADDRESS = 0xFFFFFFFF; +constexpr ra::data::ByteAddress UNKNOWN_ADDRESS = 0xFFFFFFFF; std::string TriggerConditionViewModel::Serialize() const { @@ -84,7 +84,7 @@ void TriggerConditionViewModel::SerializeAppend(std::string& sBuffer) const ra::services::AchievementLogicSerializer::AppendHitTarget(sBuffer, GetRequiredHits()); } -void TriggerConditionViewModel::SerializeAppendOperand(std::string& sBuffer, TriggerOperandType nType, MemSize nSize, const std::wstring& sValue) const +void TriggerConditionViewModel::SerializeAppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size nSize, const std::wstring& sValue) const { unsigned int nValue = 0; float fValue = 0.0; @@ -199,13 +199,13 @@ void TriggerConditionViewModel::SetOperand(const IntModelProperty& pTypeProperty switch (nType) { case TriggerOperandType::Value: - SetValue(pSizeProperty, ra::etoi(MemSize::ThirtyTwoBit)); + SetValue(pSizeProperty, ra::etoi(ra::data::Memory::Size::ThirtyTwoBit)); pValue.type = RC_VALUE_TYPE_UNSIGNED; pValue.value.u32 = operand.value.num; break; case TriggerOperandType::Float: - SetValue(pSizeProperty, ra::etoi(MemSize::Float)); + SetValue(pSizeProperty, ra::etoi(ra::data::Memory::Size::Float)); pValue.type = RC_VALUE_TYPE_FLOAT; pValue.value.f32 = gsl::narrow_cast(operand.value.dbl); break; @@ -216,7 +216,7 @@ void TriggerConditionViewModel::SetOperand(const IntModelProperty& pTypeProperty case TriggerOperandType::BCD: case TriggerOperandType::Inverted: { - const auto nSize = ra::data::models::TriggerValidation::MapRcheevosMemSize(operand.size); + const auto nSize = ra::data::Memory::SizeFromRcheevosSize(operand.size); SetValue(pSizeProperty, ra::etoi(nSize)); pValue.type = RC_VALUE_TYPE_UNSIGNED; pValue.value.u32 = operand.value.memref->address; @@ -224,7 +224,7 @@ void TriggerConditionViewModel::SetOperand(const IntModelProperty& pTypeProperty } case TriggerOperandType::Recall: - SetValue(pSizeProperty, ra::etoi(MemSize::ThirtyTwoBit)); + SetValue(pSizeProperty, ra::etoi(ra::data::Memory::Size::ThirtyTwoBit)); pValue.type = RC_VALUE_TYPE_UNSIGNED; pValue.value.u32 = 1; break; @@ -286,7 +286,7 @@ void TriggerConditionViewModel::OnValueChanged(const IntModelProperty::ChangeArg if (!IsAddressType(nNewType)) { SetValue(HasSourceSizeProperty, false); - SetSourceSize(nNewType == TriggerOperandType::Value || IsParameterlessType(nNewType) ? MemSize::ThirtyTwoBit : MemSize::Float); + SetSourceSize(nNewType == TriggerOperandType::Value || IsParameterlessType(nNewType) ? ra::data::Memory::Size::ThirtyTwoBit : ra::data::Memory::Size::Float); } else if (!IsAddressType(nOldType)) { @@ -305,7 +305,7 @@ void TriggerConditionViewModel::OnValueChanged(const IntModelProperty::ChangeArg if (!IsAddressType(nNewType)) { SetValue(HasTargetSizeProperty, false); - SetTargetSize(nNewType == TriggerOperandType::Value || IsParameterlessType(nNewType) ? MemSize::ThirtyTwoBit : MemSize::Float); + SetTargetSize(nNewType == TriggerOperandType::Value || IsParameterlessType(nNewType) ? ra::data::Memory::Size::ThirtyTwoBit : ra::data::Memory::Size::Float); } else if (!IsAddressType(ra::itoe(args.tOldValue))) { @@ -399,7 +399,7 @@ void TriggerConditionViewModel::SetSourceValue(unsigned int nValue) SetValue(SourceValueProperty, FormatValue(nValue, GetSourceType())); } -ra::ByteAddress TriggerConditionViewModel::GetSourceAddress() const +ra::data::ByteAddress TriggerConditionViewModel::GetSourceAddress() const { unsigned int nValue = 0; std::wstring sError; @@ -417,7 +417,7 @@ void TriggerConditionViewModel::SetTargetValue(float fValue) SetValue(TargetValueProperty, FormatValue(fValue, GetTargetType())); } -ra::ByteAddress TriggerConditionViewModel::GetTargetAddress() const +ra::data::ByteAddress TriggerConditionViewModel::GetTargetAddress() const { unsigned int nValue = 0; std::wstring sError; @@ -432,7 +432,7 @@ std::wstring TriggerConditionViewModel::GetTooltip(const StringModelProperty& nP const auto nType = GetSourceType(); if (nType == TriggerOperandType::Value) { - if (IsAddressType(GetTargetType()) && ra::data::MemSizeBits(GetTargetSize()) >= 8) + if (IsAddressType(GetTargetType()) && ra::data::Memory::SizeBits(GetTargetSize()) >= 8) return GetPotentialEnumValueTooltip(GetSourceAddress(), GetTargetAddress()); return GetValueTooltip(GetSourceAddress()); @@ -461,7 +461,7 @@ std::wstring TriggerConditionViewModel::GetTooltip(const StringModelProperty& nP const auto nType = GetTargetType(); if (nType == TriggerOperandType::Value) { - if (IsAddressType(GetSourceType()) && ra::data::MemSizeBits(GetSourceSize()) >= 8) + if (IsAddressType(GetSourceType()) && ra::data::Memory::SizeBits(GetSourceSize()) >= 8) return GetPotentialEnumValueTooltip(GetTargetAddress(), GetSourceAddress()); return GetValueTooltip(GetTargetAddress()); @@ -507,7 +507,7 @@ std::wstring TriggerConditionViewModel::GetTooltip(const IntModelProperty& nProp return L""; } -std::wstring TriggerConditionViewModel::GetPotentialEnumValueTooltip(unsigned int nValue, ra::ByteAddress nCompareAddress) const +std::wstring TriggerConditionViewModel::GetPotentialEnumValueTooltip(unsigned int nValue, ra::data::ByteAddress nCompareAddress) const { const ra::data::models::CodeNoteModel* pNote = nullptr; @@ -591,7 +591,7 @@ static void BuildOperatorTooltip(std::wstring& sTooltip, uint8_t nOperatorType) } } -static ra::ByteAddress GetIndirectAddressFromOperand(const rc_operand_t* pOperand, std::wstring& sPointerChain, +static ra::data::ByteAddress GetIndirectAddressFromOperand(const rc_operand_t* pOperand, std::wstring& sPointerChain, const ra::data::models::CodeNoteModel** pParentNote) { Expects(pParentNote != nullptr); @@ -799,7 +799,7 @@ const rc_condition_t* TriggerConditionViewModel::GetCondition() const return nullptr; } -ra::ByteAddress TriggerConditionViewModel::GetIndirectAddress(ra::ByteAddress nAddress, std::wstring& sPointerChain, +ra::data::ByteAddress TriggerConditionViewModel::GetIndirectAddress(ra::data::ByteAddress nAddress, std::wstring& sPointerChain, const ra::data::models::CodeNoteModel** pLeafNote) const { Expects(pLeafNote != nullptr); @@ -820,7 +820,7 @@ ra::ByteAddress TriggerConditionViewModel::GetIndirectAddress(ra::ByteAddress nA return nAddress; } -std::wstring TriggerConditionViewModel::GetAddressTooltip(ra::ByteAddress nAddress, +std::wstring TriggerConditionViewModel::GetAddressTooltip(ra::data::ByteAddress nAddress, const std::wstring& sPointerChain, const ra::data::models::CodeNoteModel* pNote) const { std::wstring sAddress; diff --git a/src/ui/viewmodels/TriggerConditionViewModel.hh b/src/ui/viewmodels/TriggerConditionViewModel.hh index 41a7dde60..946c4fc67 100644 --- a/src/ui/viewmodels/TriggerConditionViewModel.hh +++ b/src/ui/viewmodels/TriggerConditionViewModel.hh @@ -38,8 +38,8 @@ public: static const BoolModelProperty HasSourceSizeProperty; static const IntModelProperty SourceSizeProperty; - MemSize GetSourceSize() const { return ra::itoe(GetValue(SourceSizeProperty)); } - void SetSourceSize(MemSize nValue) { SetValue(SourceSizeProperty, ra::etoi(nValue)); } + ra::data::Memory::Size GetSourceSize() const { return ra::itoe(GetValue(SourceSizeProperty)); } + void SetSourceSize(ra::data::Memory::Size nValue) { SetValue(SourceSizeProperty, ra::etoi(nValue)); } static const BoolModelProperty HasSourceValueProperty; static const StringModelProperty SourceValueProperty; @@ -58,8 +58,8 @@ public: static const BoolModelProperty HasTargetSizeProperty; static const IntModelProperty TargetSizeProperty; - MemSize GetTargetSize() const { return ra::itoe(GetValue(TargetSizeProperty)); } - void SetTargetSize(MemSize nValue) { SetValue(TargetSizeProperty, ra::etoi(nValue)); } + ra::data::Memory::Size GetTargetSize() const { return ra::itoe(GetValue(TargetSizeProperty)); } + void SetTargetSize(ra::data::Memory::Size nValue) { SetValue(TargetSizeProperty, ra::etoi(nValue)); } static const BoolModelProperty HasTargetValueProperty; static const StringModelProperty TargetValueProperty; @@ -85,7 +85,7 @@ public: static const BoolModelProperty IsIndirectProperty; bool IsIndirect() const { return GetValue(IsIndirectProperty); } void SetIndirect(bool bValue) { SetValue(IsIndirectProperty, bValue); } - ra::ByteAddress GetIndirectAddress(ra::ByteAddress nAddress, std::wstring& sPointerChain, const ra::data::models::CodeNoteModel** pLeafNote) const; + ra::data::ByteAddress GetIndirectAddress(ra::data::ByteAddress nAddress, std::wstring& sPointerChain, const ra::data::models::CodeNoteModel** pLeafNote) const; static const BoolModelProperty IsSelectedProperty; bool IsSelected() const { return GetValue(IsSelectedProperty); } @@ -117,14 +117,14 @@ private: void OnValueChanged(const IntModelProperty::ChangeArgs& args) override; void OnValueChanged(const BoolModelProperty::ChangeArgs& args) override; - void SerializeAppendOperand(std::string& sBuffer, TriggerOperandType nType, MemSize nSize, const std::wstring& nValue) const; + void SerializeAppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size nSize, const std::wstring& nValue) const; - std::wstring GetPotentialEnumValueTooltip(unsigned int nValue, ra::ByteAddress nCompareAddress) const; + std::wstring GetPotentialEnumValueTooltip(unsigned int nValue, ra::data::ByteAddress nCompareAddress) const; static std::wstring GetValueTooltip(unsigned int nValue); - std::wstring GetAddressTooltip(ra::ByteAddress nAddress, const std::wstring& sPointerChain, const ra::data::models::CodeNoteModel* pNote) const; + std::wstring GetAddressTooltip(ra::data::ByteAddress nAddress, const std::wstring& sPointerChain, const ra::data::models::CodeNoteModel* pNote) const; std::wstring GetRecallTooltip(bool bOperand2) const; - ra::ByteAddress GetSourceAddress() const; - ra::ByteAddress GetTargetAddress() const; + ra::data::ByteAddress GetSourceAddress() const; + ra::data::ByteAddress GetTargetAddress() const; const rc_condition_t* GetFirstCondition() const; const rc_condition_t* GetCondition() const; void SetOperand(const IntModelProperty& pTypeProperty, const IntModelProperty& pSizeProperty, diff --git a/src/ui/viewmodels/TriggerViewModel.cpp b/src/ui/viewmodels/TriggerViewModel.cpp index 6ecd570bc..d2ab73b36 100644 --- a/src/ui/viewmodels/TriggerViewModel.cpp +++ b/src/ui/viewmodels/TriggerViewModel.cpp @@ -60,30 +60,30 @@ TriggerViewModel::TriggerViewModel() noexcept m_vOperandTypes.Add(ra::etoi(TriggerOperandType::Inverted), L"Invert"); m_vOperandTypes.Add(ra::etoi(TriggerOperandType::Recall), L"Recall"); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_0), ra::data::MemSizeString(MemSize::Bit_0)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_1), ra::data::MemSizeString(MemSize::Bit_1)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_2), ra::data::MemSizeString(MemSize::Bit_2)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_3), ra::data::MemSizeString(MemSize::Bit_3)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_4), ra::data::MemSizeString(MemSize::Bit_4)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_5), ra::data::MemSizeString(MemSize::Bit_5)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_6), ra::data::MemSizeString(MemSize::Bit_6)); - m_vOperandSizes.Add(ra::etoi(MemSize::Bit_7), ra::data::MemSizeString(MemSize::Bit_7)); - m_vOperandSizes.Add(ra::etoi(MemSize::Nibble_Lower), ra::data::MemSizeString(MemSize::Nibble_Lower)); - m_vOperandSizes.Add(ra::etoi(MemSize::Nibble_Upper), ra::data::MemSizeString(MemSize::Nibble_Upper)); - m_vOperandSizes.Add(ra::etoi(MemSize::EightBit), ra::data::MemSizeString(MemSize::EightBit)); - m_vOperandSizes.Add(ra::etoi(MemSize::SixteenBit), ra::data::MemSizeString(MemSize::SixteenBit)); - m_vOperandSizes.Add(ra::etoi(MemSize::TwentyFourBit), ra::data::MemSizeString(MemSize::TwentyFourBit)); - m_vOperandSizes.Add(ra::etoi(MemSize::ThirtyTwoBit), ra::data::MemSizeString(MemSize::ThirtyTwoBit)); - m_vOperandSizes.Add(ra::etoi(MemSize::SixteenBitBigEndian), ra::data::MemSizeString(MemSize::SixteenBitBigEndian)); - m_vOperandSizes.Add(ra::etoi(MemSize::TwentyFourBitBigEndian), ra::data::MemSizeString(MemSize::TwentyFourBitBigEndian)); - m_vOperandSizes.Add(ra::etoi(MemSize::ThirtyTwoBitBigEndian), ra::data::MemSizeString(MemSize::ThirtyTwoBitBigEndian)); - m_vOperandSizes.Add(ra::etoi(MemSize::BitCount), ra::data::MemSizeString(MemSize::BitCount)); - m_vOperandSizes.Add(ra::etoi(MemSize::Float), ra::data::MemSizeString(MemSize::Float)); - m_vOperandSizes.Add(ra::etoi(MemSize::FloatBigEndian), ra::data::MemSizeString(MemSize::FloatBigEndian)); - m_vOperandSizes.Add(ra::etoi(MemSize::Double32), ra::data::MemSizeString(MemSize::Double32)); - m_vOperandSizes.Add(ra::etoi(MemSize::Double32BigEndian), ra::data::MemSizeString(MemSize::Double32BigEndian)); - m_vOperandSizes.Add(ra::etoi(MemSize::MBF32), ra::data::MemSizeString(MemSize::MBF32)); - m_vOperandSizes.Add(ra::etoi(MemSize::MBF32LE), ra::data::MemSizeString(MemSize::MBF32LE)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_0), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_0)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_1), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_1)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_2), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_2)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_3), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_3)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_4), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_4)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_5), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_5)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_6), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_6)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_7), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_7)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Lower), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Lower)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Upper), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Upper)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::EightBit), ra::data::Memory::SizeString(ra::data::Memory::Size::EightBit)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::SixteenBit), ra::data::Memory::SizeString(ra::data::Memory::Size::SixteenBit)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::TwentyFourBit), ra::data::Memory::SizeString(ra::data::Memory::Size::TwentyFourBit)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::ThirtyTwoBit), ra::data::Memory::SizeString(ra::data::Memory::Size::ThirtyTwoBit)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::SixteenBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::SixteenBitBigEndian)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::TwentyFourBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::TwentyFourBitBigEndian)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::ThirtyTwoBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::ThirtyTwoBitBigEndian)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::BitCount), ra::data::Memory::SizeString(ra::data::Memory::Size::BitCount)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Float), ra::data::Memory::SizeString(ra::data::Memory::Size::Float)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::FloatBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::FloatBigEndian)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Double32), ra::data::Memory::SizeString(ra::data::Memory::Size::Double32)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Double32BigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::Double32BigEndian)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::MBF32), ra::data::Memory::SizeString(ra::data::Memory::Size::MBF32)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::MBF32LE), ra::data::Memory::SizeString(ra::data::Memory::Size::MBF32LE)); m_vOperatorTypes.Add(ra::etoi(TriggerOperatorType::Equals), L"="); m_vOperatorTypes.Add(ra::etoi(TriggerOperatorType::LessThan), L"<"); @@ -632,7 +632,7 @@ void TriggerViewModel::NewCondition() } else { - MemSize nSize = MemSize::EightBit; + auto nSize = ra::data::Memory::Size::EightBit; const auto nIndex = sMemRef.find_last_of('_'); auto nIndex2 = (nIndex == std::string::npos) ? 0 : nIndex + 1; uint8_t nMemRefSize = RC_MEMSIZE_8_BITS; @@ -661,7 +661,7 @@ void TriggerViewModel::NewCondition() // extract the size const char* sMemRefPtr = &sMemRef.at(nIndex2); if (rc_parse_memref(&sMemRefPtr, &nMemRefSize, &nAddress) == RC_OK) - nSize = ra::data::models::TriggerValidation::MapRcheevosMemSize(nMemRefSize); + nSize = ra::data::Memory::SizeFromRcheevosSize(nMemRefSize); // assume the user wants to compare to the current value of the watched memory address ra::services::AchievementLogicSerializer::AppendOperator(sMemRef, ra::services::TriggerOperatorType::Equals); @@ -671,10 +671,10 @@ void TriggerViewModel::NewCondition() rc_typed_value_t nTypedValue; nTypedValue.type = RC_VALUE_TYPE_UNSIGNED; nTypedValue.value.u32 = pMemoryInspector.Viewer().GetValueAtAddress(nAddress); - if (ra::data::MemSizeBytes(nSize) > 1) + if (ra::data::Memory::SizeBytes(nSize) > 1) { nTypedValue.value.u32 |= pMemoryInspector.Viewer().GetValueAtAddress(nAddress + 1) << 8; - if (ra::data::MemSizeBytes(nSize) > 2) + if (ra::data::Memory::SizeBytes(nSize) > 2) { nTypedValue.value.u32 |= pMemoryInspector.Viewer().GetValueAtAddress(nAddress + 2) << 16; nTypedValue.value.u32 |= pMemoryInspector.Viewer().GetValueAtAddress(nAddress + 3) << 24; diff --git a/src/ui/win32/MemoryInspectorDialog.cpp b/src/ui/win32/MemoryInspectorDialog.cpp index ebf6b4a41..376482e04 100644 --- a/src/ui/win32/MemoryInspectorDialog.cpp +++ b/src/ui/win32/MemoryInspectorDialog.cpp @@ -92,8 +92,8 @@ void MemoryInspectorDialog::SearchResultsGridBinding::UpdateColumnWidths() constexpr int nPadding = 6; // value column - auto nMaxChars = (ra::data::MemSizeBits(nSize) + 3) / 4; // 4 bits per nibble - if (nSize == MemSize::BitCount) + auto nMaxChars = (ra::data::Memory::SizeBits(nSize) + 3) / 4; // 4 bits per nibble + if (nSize == ra::data::Memory::Size::BitCount) nMaxChars = 9; else if (nMaxChars == 0) nMaxChars = 16; @@ -102,7 +102,7 @@ void MemoryInspectorDialog::SearchResultsGridBinding::UpdateColumnWidths() // address column nWidth = ra::ui::win32::bindings::GridAddressColumnBinding::CalculateWidth(); - if (nSize == MemSize::Nibble_Lower) + if (nSize == ra::data::Memory::Size::Nibble_Lower) nWidth += nCharWidth; // 0x1234L m_vColumns.at(0)->SetWidth(GridColumnBinding::WidthType::Pixels, nWidth); } @@ -249,10 +249,10 @@ MemoryInspectorDialog::MemoryInspectorDialog(MemoryInspectorViewModel& vmMemoryI m_bindWindow.BindEnabled(IDC_RA_REVERT_NOTE, MemoryInspectorViewModel::CanRevertCurrentAddressNoteProperty); // Memory Viewer - m_bindViewer8Bit.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(MemSize::EightBit)); - m_bindViewer16Bit.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(MemSize::SixteenBit)); - m_bindViewer32Bit.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(MemSize::ThirtyTwoBit)); - m_bindViewer32BitBE.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(MemSize::ThirtyTwoBitBigEndian)); + m_bindViewer8Bit.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(ra::data::Memory::Size::EightBit)); + m_bindViewer16Bit.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(ra::data::Memory::Size::SixteenBit)); + m_bindViewer32Bit.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(ra::data::Memory::Size::ThirtyTwoBit)); + m_bindViewer32BitBE.BindCheck(MemoryViewerViewModel::SizeProperty, ra::etoi(ra::data::Memory::Size::ThirtyTwoBitBigEndian)); m_bindWindow.BindLabel(IDC_RA_MEMBITS, MemoryInspectorViewModel::CurrentAddressBitsProperty); m_bindWindow.BindVisible(IDC_RA_MEMBITS_TITLE, MemoryInspectorViewModel::CurrentBitsVisibleProperty); m_bindWindow.BindVisible(IDC_RA_MEMBITS, MemoryInspectorViewModel::CurrentBitsVisibleProperty); @@ -488,7 +488,7 @@ INT_PTR CALLBACK MemoryInspectorDialog::DialogProc(HWND hDlg, UINT uMsg, WPARAM // ignore if not 8-bit mode auto* vmMemoryInspector = dynamic_cast(&m_vmWindow); - if (vmMemoryInspector->Viewer().GetSize() != MemSize::EightBit) + if (vmMemoryInspector->Viewer().GetSize() != ra::data::Memory::Size::EightBit) break; POINT ptCursor{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; diff --git a/src/ui/win32/bindings/GridMemoryWatchFormatColumnBinding.hh b/src/ui/win32/bindings/GridMemoryWatchFormatColumnBinding.hh index b59e8c77a..4434779dc 100644 --- a/src/ui/win32/bindings/GridMemoryWatchFormatColumnBinding.hh +++ b/src/ui/win32/bindings/GridMemoryWatchFormatColumnBinding.hh @@ -50,16 +50,16 @@ public: private: static bool IsHidden(const ra::ui::ViewModelCollectionBase& vmItems, gsl::index nIndex) { - const auto nSize = ra::itoe(vmItems.GetItemValue(nIndex, ra::ui::viewmodels::MemoryWatchViewModel::SizeProperty)); + const auto nSize = ra::itoe(vmItems.GetItemValue(nIndex, ra::ui::viewmodels::MemoryWatchViewModel::SizeProperty)); switch (nSize) { - case MemSize::Float: - case MemSize::FloatBigEndian: - case MemSize::Double32: - case MemSize::Double32BigEndian: - case MemSize::MBF32: - case MemSize::MBF32LE: - case MemSize::Text: + case ra::data::Memory::Size::Float: + case ra::data::Memory::Size::FloatBigEndian: + case ra::data::Memory::Size::Double32: + case ra::data::Memory::Size::Double32BigEndian: + case ra::data::Memory::Size::MBF32: + case ra::data::Memory::Size::MBF32LE: + case ra::data::Memory::Size::Text: return true; default: diff --git a/src/ui/win32/bindings/MemoryViewerControlBinding.cpp b/src/ui/win32/bindings/MemoryViewerControlBinding.cpp index 0c0b03615..b95d23d94 100644 --- a/src/ui/win32/bindings/MemoryViewerControlBinding.cpp +++ b/src/ui/win32/bindings/MemoryViewerControlBinding.cpp @@ -206,7 +206,7 @@ bool MemoryViewerControlBinding::HandleNavigation(UINT nChar) if (bControlHeld) { const auto& pEmulatorContext = ra::services::ServiceLocator::Get(); - const auto nTotalBytes = gsl::narrow(pEmulatorContext.TotalMemorySize()); + const auto nTotalBytes = gsl::narrow(pEmulatorContext.TotalMemorySize()); m_pViewModel.SetFirstAddress(nTotalBytes & ~0x0F); m_pViewModel.SetAddress(nTotalBytes - 1); @@ -215,11 +215,11 @@ bool MemoryViewerControlBinding::HandleNavigation(UINT nChar) { switch (m_pViewModel.GetSize()) { - case MemSize::ThirtyTwoBit: + case ra::data::Memory::Size::ThirtyTwoBit: m_pViewModel.SetAddress((m_pViewModel.GetAddress() & ~0x0F) | 0x0C); break; - case MemSize::SixteenBit: + case ra::data::Memory::Size::SixteenBit: m_pViewModel.SetAddress((m_pViewModel.GetAddress() & ~0x0F) | 0x0E); break; diff --git a/tests/RA_UnitTestHelpers.h b/tests/RA_UnitTestHelpers.h index cb10439d9..33b38eb89 100644 --- a/tests/RA_UnitTestHelpers.h +++ b/tests/RA_UnitTestHelpers.h @@ -23,81 +23,6 @@ std::wstring ToString(const std::chrono::milliseconds return std::to_wstring(t.count()) + L"ms"; } -#ifdef RA_V141_XP -// this has to be defined when compiling against v141_xp, but not when compiling against v142. -// since it's impractical to detect the selected platform toolset, use a compilation flag - -template<> -std::wstring ToString<__int64>(const __int64& t) -{ - RETURN_WIDE_STRING(t); -} -#endif - -template<> -std::wstring ToString(const MemSize& t) -{ - switch (t) - { - case MemSize::Bit_0: - return L"Bit_0"; - case MemSize::Bit_1: - return L"Bit_1"; - case MemSize::Bit_2: - return L"Bit_2"; - case MemSize::Bit_3: - return L"Bit_3"; - case MemSize::Bit_4: - return L"Bit_4"; - case MemSize::Bit_5: - return L"Bit_5"; - case MemSize::Bit_6: - return L"Bit_6"; - case MemSize::Bit_7: - return L"Bit_7"; - case MemSize::Nibble_Lower: - return L"Nibble_Lower"; - case MemSize::Nibble_Upper: - return L"Nibble_Upper"; - case MemSize::EightBit: - return L"EightBit"; - case MemSize::SixteenBit: - return L"SixteenBit"; - case MemSize::TwentyFourBit: - return L"TwentyFourBit"; - case MemSize::ThirtyTwoBit: - return L"ThirtyTwoBit"; - case MemSize::BitCount: - return L"BitCount"; - case MemSize::SixteenBitBigEndian: - return L"SixteenBitBigEndian"; - case MemSize::TwentyFourBitBigEndian: - return L"TwentyFourBitBigEndian"; - case MemSize::ThirtyTwoBitBigEndian: - return L"ThirtyTwoBitBigEndian"; - case MemSize::Float: - return L"Float"; - case MemSize::FloatBigEndian: - return L"FloatBigEndian"; - case MemSize::Double32: - return L"Double32"; - case MemSize::Double32BigEndian: - return L"Double32BigEndian"; - case MemSize::MBF32: - return L"MBF32"; - case MemSize::MBF32LE: - return L"MBF32LE"; - case MemSize::Text: - return L"Text"; - case MemSize::Unknown: - return L"Unknown"; - case MemSize::Array: - return L"Array"; - default: - return std::to_wstring(ra::etoi(t)); - } -} - template<> std::wstring ToString(const ComparisonType& t) { @@ -120,20 +45,6 @@ std::wstring ToString(const ComparisonType& t) } } -template<> -std::wstring ToString(const ra::MemFormat& t) -{ - switch (t) - { - case ra::MemFormat::Hex: - return L"Hex"; - case ra::MemFormat::Dec: - return L"Dec"; - default: - return std::to_wstring(ra::etoi(t)); - } -} - #pragma warning(pop) } // namespace CppUnitTestFramework diff --git a/tests/data/context/ConsoleContext_Tests.cpp b/tests/data/context/ConsoleContext_Tests.cpp index 4120d6df8..84f4aaffe 100644 --- a/tests/data/context/ConsoleContext_Tests.cpp +++ b/tests/data/context/ConsoleContext_Tests.cpp @@ -14,7 +14,7 @@ namespace tests { TEST_CLASS(ConsoleContext_Tests) { private: - static void AssertRegion(const ConsoleContext& context, ra::ByteAddress nAddress, + static void AssertRegion(const ConsoleContext& context, ra::data::ByteAddress nAddress, const ConsoleContext::MemoryRegion* pExpectedRegion) { const auto* pFoundRegion = context.GetMemoryRegion(nAddress); diff --git a/tests/data/context/EmulatorContext_Tests.cpp b/tests/data/context/EmulatorContext_Tests.cpp index 28041bcd7..b779da7fc 100644 --- a/tests/data/context/EmulatorContext_Tests.cpp +++ b/tests/data/context/EmulatorContext_Tests.cpp @@ -92,13 +92,13 @@ TEST_CLASS(EmulatorContext_Tests) class EmulatorContextNotifyHarness : public EmulatorContext::NotifyTarget { public: - void OnByteWritten(ra::ByteAddress nAddress, uint8_t nValue) noexcept override + void OnByteWritten(ra::data::ByteAddress nAddress, uint8_t nValue) noexcept override { nLastByteWrittenAddress = nAddress; nLastByteWritten = nValue; } - ra::ByteAddress nLastByteWrittenAddress = 0xFFFFFFFFU; + ra::data::ByteAddress nLastByteWrittenAddress = 0xFFFFFFFFU; uint8_t nLastByteWritten = 0xFF; }; @@ -1329,39 +1329,39 @@ TEST_CLASS(EmulatorContext_Tests) emulator.AddMemoryBlock(0, 20, &ReadMemory0, &WriteMemory0); // ReadMemory calls ReadMemoryByte for small sizes - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_0))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_1))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_2))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_3))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_4))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_5))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_6))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_7))); - Assert::AreEqual(3, static_cast(emulator.ReadMemory(4U, MemSize::BitCount))); - Assert::AreEqual(8, static_cast(emulator.ReadMemory(4U, MemSize::Nibble_Lower))); - Assert::AreEqual(10, static_cast(emulator.ReadMemory(4U, MemSize::Nibble_Upper))); - Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, MemSize::EightBit))); - Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, MemSize::SixteenBit))); - Assert::AreEqual(0x2E37, static_cast(emulator.ReadMemory(6U, MemSize::SixteenBit))); - Assert::AreEqual(0x2E3700, static_cast(emulator.ReadMemory(5U, MemSize::TwentyFourBit))); - Assert::AreEqual(0x2E3700A8, static_cast(emulator.ReadMemory(4U, MemSize::ThirtyTwoBit))); - Assert::AreEqual(0x372E, static_cast(emulator.ReadMemory(6U, MemSize::SixteenBitBigEndian))); - Assert::AreEqual(0x00372E, static_cast(emulator.ReadMemory(5U, MemSize::TwentyFourBitBigEndian))); - Assert::AreEqual(0xA800372EU, emulator.ReadMemory(4U, MemSize::ThirtyTwoBitBigEndian)); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_0))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_1))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_2))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_3))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_4))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_5))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_6))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_7))); + Assert::AreEqual(3, static_cast(emulator.ReadMemory(4U, Memory::Size::BitCount))); + Assert::AreEqual(8, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Lower))); + Assert::AreEqual(10, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Upper))); + Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, Memory::Size::EightBit))); + Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, Memory::Size::SixteenBit))); + Assert::AreEqual(0x2E37, static_cast(emulator.ReadMemory(6U, Memory::Size::SixteenBit))); + Assert::AreEqual(0x2E3700, static_cast(emulator.ReadMemory(5U, Memory::Size::TwentyFourBit))); + Assert::AreEqual(0x2E3700A8, static_cast(emulator.ReadMemory(4U, Memory::Size::ThirtyTwoBit))); + Assert::AreEqual(0x372E, static_cast(emulator.ReadMemory(6U, Memory::Size::SixteenBitBigEndian))); + Assert::AreEqual(0x00372E, static_cast(emulator.ReadMemory(5U, Memory::Size::TwentyFourBitBigEndian))); + Assert::AreEqual(0xA800372EU, emulator.ReadMemory(4U, Memory::Size::ThirtyTwoBitBigEndian)); memory.at(4) ^= 0xFF; // toggle all bits and verify again - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_0))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_1))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_2))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_3))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_4))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_5))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_6))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_7))); - Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, MemSize::BitCount))); - Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, MemSize::Nibble_Lower))); - Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, MemSize::Nibble_Upper))); - Assert::AreEqual(0x57, static_cast(emulator.ReadMemory(4U, MemSize::EightBit))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_0))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_1))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_2))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_3))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_4))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_5))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_6))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_7))); + Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::BitCount))); + Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Lower))); + Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Upper))); + Assert::AreEqual(0x57, static_cast(emulator.ReadMemory(4U, Memory::Size::EightBit))); } TEST_METHOD(TestReadMemoryBlock) @@ -1381,27 +1381,27 @@ TEST_CLASS(EmulatorContext_Tests) emulator.AddMemoryBlockReader(0, &ReadMemoryBlock0); // ReadMemory calls ReadMemoryByte for small sizes - should call ReadMemory1 ($4 => $14) - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_0))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_1))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_2))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_3))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_4))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_5))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, MemSize::Bit_6))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, MemSize::Bit_7))); - Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, MemSize::BitCount))); - Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, MemSize::Nibble_Lower))); - Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, MemSize::Nibble_Upper))); - Assert::AreEqual(0x57, static_cast(emulator.ReadMemory(4U, MemSize::EightBit))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_0))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_1))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_2))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_3))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_4))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_5))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_6))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_7))); + Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::BitCount))); + Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Lower))); + Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Upper))); + Assert::AreEqual(0x57, static_cast(emulator.ReadMemory(4U, Memory::Size::EightBit))); // sizes larger than 8 bits should use the block reader ($4 => $4) - Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, MemSize::SixteenBit))); - Assert::AreEqual(0x2E37, static_cast(emulator.ReadMemory(6U, MemSize::SixteenBit))); - Assert::AreEqual(0x2E3700, static_cast(emulator.ReadMemory(5U, MemSize::TwentyFourBit))); - Assert::AreEqual(0x2E3700A8, static_cast(emulator.ReadMemory(4U, MemSize::ThirtyTwoBit))); - Assert::AreEqual(0x372E, static_cast(emulator.ReadMemory(6U, MemSize::SixteenBitBigEndian))); - Assert::AreEqual(0x00372E, static_cast(emulator.ReadMemory(5U, MemSize::TwentyFourBitBigEndian))); - Assert::AreEqual(0xA800372EU, emulator.ReadMemory(4U, MemSize::ThirtyTwoBitBigEndian)); + Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, Memory::Size::SixteenBit))); + Assert::AreEqual(0x2E37, static_cast(emulator.ReadMemory(6U, Memory::Size::SixteenBit))); + Assert::AreEqual(0x2E3700, static_cast(emulator.ReadMemory(5U, Memory::Size::TwentyFourBit))); + Assert::AreEqual(0x2E3700A8, static_cast(emulator.ReadMemory(4U, Memory::Size::ThirtyTwoBit))); + Assert::AreEqual(0x372E, static_cast(emulator.ReadMemory(6U, Memory::Size::SixteenBitBigEndian))); + Assert::AreEqual(0x00372E, static_cast(emulator.ReadMemory(5U, Memory::Size::TwentyFourBitBigEndian))); + Assert::AreEqual(0xA800372EU, emulator.ReadMemory(4U, Memory::Size::ThirtyTwoBitBigEndian)); // test the block reader directly uint8_t buffer[16]; @@ -1514,7 +1514,7 @@ TEST_CLASS(EmulatorContext_Tests) Assert::AreEqual({ 30U }, emulator.TotalMemorySize()); // attempt to write all 64 bytes - for (ra::ByteAddress i = 0; i < memory.size(); ++i) + for (ra::data::ByteAddress i = 0; i < memory.size(); ++i) emulator.WriteMemoryByte(i, gsl::narrow_cast(i + 4)); // only the 30 mapped bytes should be updated @@ -1557,7 +1557,7 @@ TEST_CLASS(EmulatorContext_Tests) // write partial value nByte = 0xC4; - emulator.WriteMemory(6U, MemSize::Nibble_Lower, 0x04); + emulator.WriteMemory(6U, Memory::Size::Nibble_Lower, 0x04); Assert::AreEqual(6U, notify.nLastByteWrittenAddress); Assert::AreEqual(nByte, notify.nLastByteWritten); } @@ -1573,49 +1573,49 @@ TEST_CLASS(EmulatorContext_Tests) EmulatorContextHarness emulator; emulator.AddMemoryBlock(0, 20, &ReadMemory0, &WriteMemory0); - emulator.WriteMemory(4U, MemSize::EightBit, 0xFC); + emulator.WriteMemory(4U, Memory::Size::EightBit, 0xFC); Assert::AreEqual((uint8_t)0xFC, memory.at(4)); Assert::AreEqual((uint8_t)0x60, memory.at(5)); - emulator.WriteMemory(4U, MemSize::EightBit, 0x12345678); + emulator.WriteMemory(4U, Memory::Size::EightBit, 0x12345678); Assert::AreEqual((uint8_t)0x78, memory.at(4)); Assert::AreEqual((uint8_t)0x60, memory.at(5)); - emulator.WriteMemory(4U, MemSize::SixteenBit, 0xABCD); + emulator.WriteMemory(4U, Memory::Size::SixteenBit, 0xABCD); Assert::AreEqual((uint8_t)0xCD, memory.at(4)); Assert::AreEqual((uint8_t)0xAB, memory.at(5)); Assert::AreEqual((uint8_t)0x37, memory.at(6)); - emulator.WriteMemory(4U, MemSize::SixteenBit, 0x12345678); + emulator.WriteMemory(4U, Memory::Size::SixteenBit, 0x12345678); Assert::AreEqual((uint8_t)0x78, memory.at(4)); Assert::AreEqual((uint8_t)0x56, memory.at(5)); Assert::AreEqual((uint8_t)0x37, memory.at(6)); - emulator.WriteMemory(4U, MemSize::TwentyFourBit, 0x12345678); + emulator.WriteMemory(4U, Memory::Size::TwentyFourBit, 0x12345678); Assert::AreEqual((uint8_t)0x78, memory.at(4)); Assert::AreEqual((uint8_t)0x56, memory.at(5)); Assert::AreEqual((uint8_t)0x34, memory.at(6)); Assert::AreEqual((uint8_t)0x2E, memory.at(7)); - emulator.WriteMemory(4U, MemSize::ThirtyTwoBit, 0x76543210); + emulator.WriteMemory(4U, Memory::Size::ThirtyTwoBit, 0x76543210); Assert::AreEqual((uint8_t)0x10, memory.at(4)); Assert::AreEqual((uint8_t)0x32, memory.at(5)); Assert::AreEqual((uint8_t)0x54, memory.at(6)); Assert::AreEqual((uint8_t)0x76, memory.at(7)); Assert::AreEqual((uint8_t)0x04, memory.at(8)); - emulator.WriteMemory(4U, MemSize::SixteenBitBigEndian, 0x12345678); + emulator.WriteMemory(4U, Memory::Size::SixteenBitBigEndian, 0x12345678); Assert::AreEqual((uint8_t)0x56, memory.at(4)); Assert::AreEqual((uint8_t)0x78, memory.at(5)); Assert::AreEqual((uint8_t)0x54, memory.at(6)); - emulator.WriteMemory(4U, MemSize::TwentyFourBitBigEndian, 0x12345678); + emulator.WriteMemory(4U, Memory::Size::TwentyFourBitBigEndian, 0x12345678); Assert::AreEqual((uint8_t)0x34, memory.at(4)); Assert::AreEqual((uint8_t)0x56, memory.at(5)); Assert::AreEqual((uint8_t)0x78, memory.at(6)); Assert::AreEqual((uint8_t)0x76, memory.at(7)); - emulator.WriteMemory(4U, MemSize::ThirtyTwoBitBigEndian, 0x76543210); + emulator.WriteMemory(4U, Memory::Size::ThirtyTwoBitBigEndian, 0x76543210); Assert::AreEqual((uint8_t)0x76, memory.at(4)); Assert::AreEqual((uint8_t)0x54, memory.at(5)); Assert::AreEqual((uint8_t)0x32, memory.at(6)); @@ -1623,59 +1623,59 @@ TEST_CLASS(EmulatorContext_Tests) Assert::AreEqual((uint8_t)0x04, memory.at(8)); memory.at(4) = 0xFF; - emulator.WriteMemory(4U, MemSize::Bit_0, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_0, 0x00); Assert::AreEqual((uint8_t)0xFE, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_0, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_0, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_1, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_1, 0x00); Assert::AreEqual((uint8_t)0xFD, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_1, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_1, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_2, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_2, 0x00); Assert::AreEqual((uint8_t)0xFB, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_2, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_2, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_3, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_3, 0x00); Assert::AreEqual((uint8_t)0xF7, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_3, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_3, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_4, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_4, 0x00); Assert::AreEqual((uint8_t)0xEF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_4, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_4, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_5, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_5, 0x00); Assert::AreEqual((uint8_t)0xDF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_5, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_5, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_6, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_6, 0x00); Assert::AreEqual((uint8_t)0xBF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_6, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_6, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_7, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit_7, 0x00); Assert::AreEqual((uint8_t)0x7F, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Bit_7, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit_7, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Nibble_Lower, 0x00); + emulator.WriteMemory(4U, Memory::Size::Nibble_Lower, 0x00); Assert::AreEqual((uint8_t)0xF0, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Nibble_Lower, 0x0F); + emulator.WriteMemory(4U, Memory::Size::Nibble_Lower, 0x0F); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Nibble_Upper, 0x00); + emulator.WriteMemory(4U, Memory::Size::Nibble_Upper, 0x00); Assert::AreEqual((uint8_t)0x0F, memory.at(4)); - emulator.WriteMemory(4U, MemSize::Nibble_Upper, 0x0F); + emulator.WriteMemory(4U, Memory::Size::Nibble_Upper, 0x0F); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::BitCount, 0x00); + emulator.WriteMemory(4U, Memory::Size::BitCount, 0x00); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, MemSize::BitCount, 0x02); + emulator.WriteMemory(4U, Memory::Size::BitCount, 0x02); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); } @@ -1737,7 +1737,7 @@ TEST_CLASS(EmulatorContext_Tests) constexpr int nBookmarks = 10; auto& pBookmarks = emulator.mockWindowManager.MemoryBookmarks; for (int i = 0; i < nBookmarks; ++i) - pBookmarks.AddBookmark(i, MemSize::EightBit); + pBookmarks.AddBookmark(i, Memory::Size::EightBit); pBookmarks.Bookmarks().Items() .GetItemAt(3) diff --git a/tests/data/context/GameContext_Tests.cpp b/tests/data/context/GameContext_Tests.cpp index e506bf13e..312f49069 100644 --- a/tests/data/context/GameContext_Tests.cpp +++ b/tests/data/context/GameContext_Tests.cpp @@ -217,7 +217,7 @@ TEST_CLASS(GameContext_Tests) public: bool GetActiveGameChanged() const noexcept { return m_bActiveGameChanged; } - const std::wstring* GetNewCodeNote(ra::ByteAddress nAddress) + const std::wstring* GetNewCodeNote(ra::data::ByteAddress nAddress) { const auto pIter = m_vCodeNotesChanged.find(nAddress); if (pIter != m_vCodeNotesChanged.end()) @@ -233,14 +233,14 @@ TEST_CLASS(GameContext_Tests) m_vCodeNotesChanged.clear(); } - void OnCodeNoteChanged(ra::ByteAddress nAddress, const std::wstring& sNewNote) override + void OnCodeNoteChanged(ra::data::ByteAddress nAddress, const std::wstring& sNewNote) override { m_vCodeNotesChanged.insert_or_assign(nAddress, sNewNote); } private: bool m_bActiveGameChanged = false; - std::map m_vCodeNotesChanged; + std::map m_vCodeNotesChanged; }; TEST_METHOD(TestLoadGameTitle) diff --git a/tests/data/models/CodeNoteModel_Tests.cpp b/tests/data/models/CodeNoteModel_Tests.cpp index fa3a92d91..3667082ac 100644 --- a/tests/data/models/CodeNoteModel_Tests.cpp +++ b/tests/data/models/CodeNoteModel_Tests.cpp @@ -8,6 +8,7 @@ #include "tests\data\DataAsserts.hh" #include "tests\devkit\services\mocks\MockThreadPool.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockConsoleContext.hh" #include "tests\mocks\MockDesktop.hh" #include "tests\mocks\MockEmulatorContext.hh" @@ -31,7 +32,7 @@ TEST_CLASS(CodeNoteModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; }; - void TestCodeNoteSize(const std::wstring& sNote, unsigned int nExpectedBytes, MemSize nExpectedSize) + void TestCodeNoteSize(const std::wstring& sNote, unsigned int nExpectedBytes, Memory::Size nExpectedSize) { CodeNoteModel note; note.SetNote(sNote); @@ -40,7 +41,7 @@ TEST_CLASS(CodeNoteModel_Tests) Assert::AreEqual(nExpectedSize, note.GetMemSize(), sNote.c_str()); } - void TestCodeNoteFormat(const std::wstring& sNote, MemFormat nExpectedFormat) + void TestCodeNoteFormat(const std::wstring& sNote, Memory::Format nExpectedFormat) { CodeNoteModel note; note.SetNote(sNote); @@ -49,7 +50,7 @@ TEST_CLASS(CodeNoteModel_Tests) } const CodeNoteModel* AssertIndirectNote(const CodeNoteModel& note, unsigned int nOffset, - const std::wstring& sExpectedNote, MemSize nExpectedSize, unsigned int nExpectedBytes) + const std::wstring& sExpectedNote, Memory::Size nExpectedSize, unsigned int nExpectedBytes) { const auto* offsetNote = note.GetPointerNoteAtOffset(nOffset); Assert::IsNotNull(offsetNote, ra::StringPrintf(L"No note found at offset 0x%04x", nOffset).c_str()); @@ -66,127 +67,127 @@ TEST_CLASS(CodeNoteModel_Tests) public: TEST_METHOD(TestExtractSize) { - TestCodeNoteSize(L"", 1U, MemSize::Unknown); - TestCodeNoteSize(L"Test", 1U, MemSize::Unknown); - TestCodeNoteSize(L"16-bit Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"Test 16-bit", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"Test 16-bi", 1U, MemSize::Unknown); - TestCodeNoteSize(L"[16-bit] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[16 bit] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[16 Bit] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[16-bit BCD] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[24-bit] Test", 3U, MemSize::TwentyFourBit); - TestCodeNoteSize(L"[32-bit] Test", 4U, MemSize::ThirtyTwoBit); - TestCodeNoteSize(L"[32 bit] Test", 4U, MemSize::ThirtyTwoBit); - TestCodeNoteSize(L"[32bit] Test", 4U, MemSize::ThirtyTwoBit); - TestCodeNoteSize(L"Test [16-bit]", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"Test (16-bit)", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"Test (16 bits)", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[64-bit] Test", 8U, MemSize::Array); - TestCodeNoteSize(L"[128-bit] Test", 16U, MemSize::Array); - TestCodeNoteSize(L"[17-bit] Test", 3U, MemSize::TwentyFourBit); - TestCodeNoteSize(L"[100-bit] Test", 13U, MemSize::Array); - TestCodeNoteSize(L"[0-bit] Test", 1U, MemSize::Unknown); - TestCodeNoteSize(L"[1-bit] Test", 1U, MemSize::EightBit); - TestCodeNoteSize(L"[4-bit] Test", 1U, MemSize::EightBit); - TestCodeNoteSize(L"[8-bit] Test", 1U, MemSize::EightBit); - TestCodeNoteSize(L"[9-bit] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"bit", 1U, MemSize::Unknown); - TestCodeNoteSize(L"9bit", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"-bit", 1U, MemSize::Unknown); - - TestCodeNoteSize(L"[16-bit BE] Test", 2U, MemSize::SixteenBitBigEndian); - TestCodeNoteSize(L"[24-bit BE] Test", 3U, MemSize::TwentyFourBitBigEndian); - TestCodeNoteSize(L"[32-bit BE] Test", 4U, MemSize::ThirtyTwoBitBigEndian); - TestCodeNoteSize(L"Test [32-bit BE]", 4U, MemSize::ThirtyTwoBitBigEndian); - TestCodeNoteSize(L"Test (32-bit BE)", 4U, MemSize::ThirtyTwoBitBigEndian); - TestCodeNoteSize(L"Test 32-bit BE", 4U, MemSize::ThirtyTwoBitBigEndian); - TestCodeNoteSize(L"[16-bit BigEndian] Test", 2U, MemSize::SixteenBitBigEndian); - TestCodeNoteSize(L"[16-bit-BE] Test", 2U, MemSize::SixteenBitBigEndian); - TestCodeNoteSize(L"[4-bit BE] Test", 1U, MemSize::EightBit); - TestCodeNoteSize(L"[US] Test [32-bit BE]", 4U, MemSize::ThirtyTwoBitBigEndian); - - TestCodeNoteSize(L"8 BYTE Test", 8U, MemSize::Array); - TestCodeNoteSize(L"Test 8 BYTE", 8U, MemSize::Array); - TestCodeNoteSize(L"Test 8 BYT", 1U, MemSize::Unknown); - TestCodeNoteSize(L"[2 Byte] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[4 Byte] Test", 4U, MemSize::ThirtyTwoBit); - TestCodeNoteSize(L"[4 Byte - Float] Test", 4U, MemSize::Float); - TestCodeNoteSize(L"[Float - 4 Byte] Test", 4U, MemSize::Float); - TestCodeNoteSize(L"[32-bit Float] Test", 4U, MemSize::Float); - TestCodeNoteSize(L"[Float 32-bit] Test", 4U, MemSize::Float); - TestCodeNoteSize(L"[8 Byte] Test", 8U, MemSize::Array); - TestCodeNoteSize(L"[0x80 Bytes] Test", 128U, MemSize::Array); - TestCodeNoteSize(L"[0xa8 bytes] Test", 168U, MemSize::Array); - TestCodeNoteSize(L"Test [0xE Bytes]", 14U, MemSize::Array); - TestCodeNoteSize(L"Test [0xET Bytes]", 1U, MemSize::Unknown); - TestCodeNoteSize(L"Test [0xE.3 Bytes]", 3U, MemSize::TwentyFourBit); - TestCodeNoteSize(L"[2 byte] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[2-byte] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"Test (6 bytes)", 6U, MemSize::Array); - TestCodeNoteSize(L"[2byte] Test", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[100 Bytes] Test", 100U, MemSize::Array); - - TestCodeNoteSize(L"[float] Test", 4U, MemSize::Float); - TestCodeNoteSize(L"[float32] Test", 4U, MemSize::Float); - TestCodeNoteSize(L"Test float", 4U, MemSize::Float); - TestCodeNoteSize(L"Test floa", 1U, MemSize::Unknown); - TestCodeNoteSize(L"is floating", 1U, MemSize::Unknown); - TestCodeNoteSize(L"has floated", 1U, MemSize::Unknown); - TestCodeNoteSize(L"16-afloat", 1U, MemSize::Unknown); - TestCodeNoteSize(L"[float be] Test", 4U, MemSize::FloatBigEndian); - TestCodeNoteSize(L"[float bigendian] Test", 4U, MemSize::FloatBigEndian); - TestCodeNoteSize(L"[be float] Test", 4U, MemSize::FloatBigEndian); - TestCodeNoteSize(L"[bigendian float] Test", 4U, MemSize::FloatBigEndian); - TestCodeNoteSize(L"[32-bit] pointer to float", 4U, MemSize::ThirtyTwoBit); - - TestCodeNoteSize(L"[64-bit double] Test", 8U, MemSize::Double32); - TestCodeNoteSize(L"[64-bit double BE] Test", 8U, MemSize::Double32BigEndian); - TestCodeNoteSize(L"[double] Test", 8U, MemSize::Double32); - TestCodeNoteSize(L"[double BE] Test", 8U, MemSize::Double32BigEndian); - TestCodeNoteSize(L"[double32] Test", 4U, MemSize::Double32); - TestCodeNoteSize(L"[double32 BE] Test", 4U, MemSize::Double32BigEndian); - TestCodeNoteSize(L"[double64] Test", 8U, MemSize::Double32); - - TestCodeNoteSize(L"[MBF32] Test", 4U, MemSize::MBF32); - TestCodeNoteSize(L"[MBF40] Test", 5U, MemSize::MBF32); - TestCodeNoteSize(L"[MBF32 float] Test", 4U, MemSize::MBF32); - TestCodeNoteSize(L"[MBF80] Test", 1U, MemSize::Unknown); - TestCodeNoteSize(L"[MBF320] Test", 1U, MemSize::Unknown); - TestCodeNoteSize(L"[MBF-32] Test", 4U, MemSize::MBF32); - TestCodeNoteSize(L"[32-bit MBF] Test", 4U, MemSize::MBF32); - TestCodeNoteSize(L"[40-bit MBF] Test", 5U, MemSize::MBF32); - TestCodeNoteSize(L"[MBF] Test", 1U, MemSize::Unknown); - TestCodeNoteSize(L"Test MBF32", 4U, MemSize::MBF32); - TestCodeNoteSize(L"[MBF32 LE] Test", 4U, MemSize::MBF32LE); - TestCodeNoteSize(L"[MBF40-LE] Test", 5U, MemSize::MBF32LE); - - TestCodeNoteSize(L"42=bitten", 1U, MemSize::Unknown); - TestCodeNoteSize(L"42-bitten", 1U, MemSize::Unknown); - TestCodeNoteSize(L"bit by bit", 1U, MemSize::Unknown); - TestCodeNoteSize(L"bit1=chest", 1U, MemSize::Unknown); - - TestCodeNoteSize(L"Bite count (16-bit)", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"Number of bits collected (32 bits)", 4U, MemSize::ThirtyTwoBit); - - TestCodeNoteSize(L"100 32-bit pointers [400 bytes]", 400U, MemSize::Array); - TestCodeNoteSize(L"[400 bytes] 100 32-bit pointers", 400U, MemSize::Array); - - TestCodeNoteSize(L"[NTSCU]\r\n[16-bit] Test\r\n", 2U, MemSize::SixteenBit); - TestCodeNoteSize(L"[24-bit]\r\nIt's really 32-bit, but the top byte will never be non-zero\r\n", 3U, MemSize::TwentyFourBit); - - TestCodeNoteSize(L"[13-bytes ASCII] Character Name", 13U, MemSize::Text); + TestCodeNoteSize(L"", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"Test", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"16-bit Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"Test 16-bit", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"Test 16-bi", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"[16-bit] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[16 bit] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[16 Bit] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[16-bit BCD] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[24-bit] Test", 3U, Memory::Size::TwentyFourBit); + TestCodeNoteSize(L"[32-bit] Test", 4U, Memory::Size::ThirtyTwoBit); + TestCodeNoteSize(L"[32 bit] Test", 4U, Memory::Size::ThirtyTwoBit); + TestCodeNoteSize(L"[32bit] Test", 4U, Memory::Size::ThirtyTwoBit); + TestCodeNoteSize(L"Test [16-bit]", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"Test (16-bit)", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"Test (16 bits)", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[64-bit] Test", 8U, Memory::Size::Array); + TestCodeNoteSize(L"[128-bit] Test", 16U, Memory::Size::Array); + TestCodeNoteSize(L"[17-bit] Test", 3U, Memory::Size::TwentyFourBit); + TestCodeNoteSize(L"[100-bit] Test", 13U, Memory::Size::Array); + TestCodeNoteSize(L"[0-bit] Test", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"[1-bit] Test", 1U, Memory::Size::EightBit); + TestCodeNoteSize(L"[4-bit] Test", 1U, Memory::Size::EightBit); + TestCodeNoteSize(L"[8-bit] Test", 1U, Memory::Size::EightBit); + TestCodeNoteSize(L"[9-bit] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"bit", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"9bit", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"-bit", 1U, Memory::Size::Unknown); + + TestCodeNoteSize(L"[16-bit BE] Test", 2U, Memory::Size::SixteenBitBigEndian); + TestCodeNoteSize(L"[24-bit BE] Test", 3U, Memory::Size::TwentyFourBitBigEndian); + TestCodeNoteSize(L"[32-bit BE] Test", 4U, Memory::Size::ThirtyTwoBitBigEndian); + TestCodeNoteSize(L"Test [32-bit BE]", 4U, Memory::Size::ThirtyTwoBitBigEndian); + TestCodeNoteSize(L"Test (32-bit BE)", 4U, Memory::Size::ThirtyTwoBitBigEndian); + TestCodeNoteSize(L"Test 32-bit BE", 4U, Memory::Size::ThirtyTwoBitBigEndian); + TestCodeNoteSize(L"[16-bit BigEndian] Test", 2U, Memory::Size::SixteenBitBigEndian); + TestCodeNoteSize(L"[16-bit-BE] Test", 2U, Memory::Size::SixteenBitBigEndian); + TestCodeNoteSize(L"[4-bit BE] Test", 1U, Memory::Size::EightBit); + TestCodeNoteSize(L"[US] Test [32-bit BE]", 4U, Memory::Size::ThirtyTwoBitBigEndian); + + TestCodeNoteSize(L"8 BYTE Test", 8U, Memory::Size::Array); + TestCodeNoteSize(L"Test 8 BYTE", 8U, Memory::Size::Array); + TestCodeNoteSize(L"Test 8 BYT", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"[2 Byte] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[4 Byte] Test", 4U, Memory::Size::ThirtyTwoBit); + TestCodeNoteSize(L"[4 Byte - Float] Test", 4U, Memory::Size::Float); + TestCodeNoteSize(L"[Float - 4 Byte] Test", 4U, Memory::Size::Float); + TestCodeNoteSize(L"[32-bit Float] Test", 4U, Memory::Size::Float); + TestCodeNoteSize(L"[Float 32-bit] Test", 4U, Memory::Size::Float); + TestCodeNoteSize(L"[8 Byte] Test", 8U, Memory::Size::Array); + TestCodeNoteSize(L"[0x80 Bytes] Test", 128U, Memory::Size::Array); + TestCodeNoteSize(L"[0xa8 bytes] Test", 168U, Memory::Size::Array); + TestCodeNoteSize(L"Test [0xE Bytes]", 14U, Memory::Size::Array); + TestCodeNoteSize(L"Test [0xET Bytes]", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"Test [0xE.3 Bytes]", 3U, Memory::Size::TwentyFourBit); + TestCodeNoteSize(L"[2 byte] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[2-byte] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"Test (6 bytes)", 6U, Memory::Size::Array); + TestCodeNoteSize(L"[2byte] Test", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[100 Bytes] Test", 100U, Memory::Size::Array); + + TestCodeNoteSize(L"[float] Test", 4U, Memory::Size::Float); + TestCodeNoteSize(L"[float32] Test", 4U, Memory::Size::Float); + TestCodeNoteSize(L"Test float", 4U, Memory::Size::Float); + TestCodeNoteSize(L"Test floa", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"is floating", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"has floated", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"16-afloat", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"[float be] Test", 4U, Memory::Size::FloatBigEndian); + TestCodeNoteSize(L"[float bigendian] Test", 4U, Memory::Size::FloatBigEndian); + TestCodeNoteSize(L"[be float] Test", 4U, Memory::Size::FloatBigEndian); + TestCodeNoteSize(L"[bigendian float] Test", 4U, Memory::Size::FloatBigEndian); + TestCodeNoteSize(L"[32-bit] pointer to float", 4U, Memory::Size::ThirtyTwoBit); + + TestCodeNoteSize(L"[64-bit double] Test", 8U, Memory::Size::Double32); + TestCodeNoteSize(L"[64-bit double BE] Test", 8U, Memory::Size::Double32BigEndian); + TestCodeNoteSize(L"[double] Test", 8U, Memory::Size::Double32); + TestCodeNoteSize(L"[double BE] Test", 8U, Memory::Size::Double32BigEndian); + TestCodeNoteSize(L"[double32] Test", 4U, Memory::Size::Double32); + TestCodeNoteSize(L"[double32 BE] Test", 4U, Memory::Size::Double32BigEndian); + TestCodeNoteSize(L"[double64] Test", 8U, Memory::Size::Double32); + + TestCodeNoteSize(L"[MBF32] Test", 4U, Memory::Size::MBF32); + TestCodeNoteSize(L"[MBF40] Test", 5U, Memory::Size::MBF32); + TestCodeNoteSize(L"[MBF32 float] Test", 4U, Memory::Size::MBF32); + TestCodeNoteSize(L"[MBF80] Test", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"[MBF320] Test", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"[MBF-32] Test", 4U, Memory::Size::MBF32); + TestCodeNoteSize(L"[32-bit MBF] Test", 4U, Memory::Size::MBF32); + TestCodeNoteSize(L"[40-bit MBF] Test", 5U, Memory::Size::MBF32); + TestCodeNoteSize(L"[MBF] Test", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"Test MBF32", 4U, Memory::Size::MBF32); + TestCodeNoteSize(L"[MBF32 LE] Test", 4U, Memory::Size::MBF32LE); + TestCodeNoteSize(L"[MBF40-LE] Test", 5U, Memory::Size::MBF32LE); + + TestCodeNoteSize(L"42=bitten", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"42-bitten", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"bit by bit", 1U, Memory::Size::Unknown); + TestCodeNoteSize(L"bit1=chest", 1U, Memory::Size::Unknown); + + TestCodeNoteSize(L"Bite count (16-bit)", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"Number of bits collected (32 bits)", 4U, Memory::Size::ThirtyTwoBit); + + TestCodeNoteSize(L"100 32-bit pointers [400 bytes]", 400U, Memory::Size::Array); + TestCodeNoteSize(L"[400 bytes] 100 32-bit pointers", 400U, Memory::Size::Array); + + TestCodeNoteSize(L"[NTSCU]\r\n[16-bit] Test\r\n", 2U, Memory::Size::SixteenBit); + TestCodeNoteSize(L"[24-bit]\r\nIt's really 32-bit, but the top byte will never be non-zero\r\n", 3U, Memory::Size::TwentyFourBit); + + TestCodeNoteSize(L"[13-bytes ASCII] Character Name", 13U, Memory::Size::Text); } TEST_METHOD(TestExtractFormat) { - TestCodeNoteFormat(L"", MemFormat::Dec); - TestCodeNoteFormat(L"Test", MemFormat::Dec); - TestCodeNoteFormat(L"16-bit Test", MemFormat::Dec); - TestCodeNoteFormat(L"Test 16-bit", MemFormat::Dec); - TestCodeNoteFormat(L"[16-bit] Test", MemFormat::Dec); + TestCodeNoteFormat(L"", Memory::Format::Dec); + TestCodeNoteFormat(L"Test", Memory::Format::Dec); + TestCodeNoteFormat(L"16-bit Test", Memory::Format::Dec); + TestCodeNoteFormat(L"Test 16-bit", Memory::Format::Dec); + TestCodeNoteFormat(L"[16-bit] Test", Memory::Format::Dec); - TestCodeNoteFormat(L"[16-bit BCD] Test", MemFormat::Hex); + TestCodeNoteFormat(L"[16-bit BCD] Test", Memory::Format::Hex); } TEST_METHOD(TestExtractFormatIndirect) @@ -202,16 +203,16 @@ TEST_CLASS(CodeNoteModel_Tests) L"+10 - Bombs Remaining\r\n"; note.SetNote(sNote); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); // pointer - Assert::AreEqual(MemFormat::Dec, note.GetPointerNoteAtOffset(3)->GetDefaultMemFormat()); // bombs defused - Assert::AreEqual(MemFormat::Hex, note.GetPointerNoteAtOffset(4)->GetDefaultMemFormat()); // bomb timer - Assert::AreEqual(MemFormat::Dec, note.GetPointerNoteAtOffset(10)->GetDefaultMemFormat()); // bombs remaining + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // pointer + Assert::AreEqual(Memory::Format::Dec, note.GetPointerNoteAtOffset(3)->GetDefaultMemFormat()); // bombs defused + Assert::AreEqual(Memory::Format::Hex, note.GetPointerNoteAtOffset(4)->GetDefaultMemFormat()); // bomb timer + Assert::AreEqual(Memory::Format::Dec, note.GetPointerNoteAtOffset(10)->GetDefaultMemFormat()); // bombs remaining const auto* nestedNote = note.GetPointerNoteAtOffset(8); Expects(nestedNote != nullptr); - Assert::AreEqual(MemFormat::Hex, nestedNote->GetDefaultMemFormat()); // bomb info pointer - Assert::AreEqual(MemFormat::Dec, nestedNote->GetPointerNoteAtOffset(0)->GetDefaultMemFormat()); // type - Assert::AreEqual(MemFormat::Hex, nestedNote->GetPointerNoteAtOffset(4)->GetDefaultMemFormat()); // color + Assert::AreEqual(Memory::Format::Hex, nestedNote->GetDefaultMemFormat()); // bomb info pointer + Assert::AreEqual(Memory::Format::Dec, nestedNote->GetPointerNoteAtOffset(0)->GetDefaultMemFormat()); // type + Assert::AreEqual(Memory::Format::Hex, nestedNote->GetPointerNoteAtOffset(4)->GetDefaultMemFormat()); // color } TEST_METHOD(TestExtractFormatImplied) @@ -226,7 +227,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"68=Credits\r\n"; note.SetNote(sNote); - Assert::AreEqual(MemFormat::Dec, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Dec, note.GetDefaultMemFormat()); // could be decimal values, but padded to size. assume hex const std::wstring sNote2 = @@ -236,7 +237,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"0068=Credits\r\n"; note.SetNote(sNote2); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // definitely hex const std::wstring sNote3 = @@ -247,7 +248,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"0068=Credits\r\n"; note.SetNote(sNote3); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // alternate separator const std::wstring sNote4 = @@ -258,7 +259,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"0068: Credits\r\n"; note.SetNote(sNote4); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // alternate separator const std::wstring sNote5 = @@ -269,7 +270,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"0068 -> Credits\r\n"; note.SetNote(sNote5); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // 0x prefix const std::wstring sNote6 = @@ -279,7 +280,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"0x68=Credits\r\n"; note.SetNote(sNote6); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // h prefix const std::wstring sNote7 = @@ -289,7 +290,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"68h=Credits\r\n"; note.SetNote(sNote7); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); } TEST_METHOD(TestExtractFormatBits) @@ -304,7 +305,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"b2=third\r\n"; note.SetNote(sNote); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // bit0 explicitly handled for 8-bit size const std::wstring sNote2 = @@ -314,7 +315,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"bit2 = third\r\n"; note.SetNote(sNote2); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); // bit0 allowed for larger sizes const std::wstring sNote3 = @@ -324,7 +325,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"bit2 = third\r\n"; note.SetNote(sNote3); - Assert::AreEqual(MemFormat::Hex, note.GetDefaultMemFormat()); + Assert::AreEqual(Memory::Format::Hex, note.GetDefaultMemFormat()); } TEST_METHOD(TestGetPointerNoteAtOffset) @@ -336,12 +337,12 @@ TEST_CLASS(CodeNoteModel_Tests) L"+04 - Bomb Timer"; note.SetNote(sNote); - Assert::AreEqual(MemSize::TwentyFourBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::TwentyFourBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address // extracted notes for offset fields - AssertIndirectNote(note, 3U, L"Bombs Defused", MemSize::Unknown, 1); - AssertIndirectNote(note, 4U, L"Bomb Timer", MemSize::Unknown, 1); + AssertIndirectNote(note, 3U, L"Bombs Defused", Memory::Size::Unknown, 1); + AssertIndirectNote(note, 4U, L"Bomb Timer", Memory::Size::Unknown, 1); } TEST_METHOD(TestGetPointerNoteAtOffsetMultiline) @@ -354,7 +355,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"---FRAGGER_HEAD = Fragger Helmet"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address // extracted notes for offset fields @@ -362,7 +363,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"Equipment - Head - String[24 Bytes]\r\n" L"---DEFAULT_HEAD = Barry's Head\r\n" L"---FRAGGER_HEAD = Fragger Helmet", - MemSize::Array, 24); + Memory::Size::Array, 24); } TEST_METHOD(TestGetPointerNoteAtOffsetMultilineWithHeader) @@ -376,7 +377,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"---FRAGGER_HEAD = Fragger Helmet"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address // extracted notes for offset fields @@ -384,7 +385,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"Equipment - Head - String[24 Bytes]\r\n" L"---DEFAULT_HEAD = Barry's Head\r\n" L"---FRAGGER_HEAD = Fragger Helmet", - MemSize::Array, 24); + Memory::Size::Array, 24); } TEST_METHOD(TestHeaderedPointer) @@ -400,14 +401,14 @@ TEST_CLASS(CodeNoteModel_Tests) L"+0x1B5CE = Lap"; note.SetNote(sNote); - Assert::AreEqual(MemSize::SixteenBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::SixteenBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address // extracted notes for offset fields (note: pointer base default is $0000) - AssertIndirectNote(note, 0x1B56EU, L"Current Position", MemSize::Unknown, 1); - AssertIndirectNote(note, 0x1B57EU, L"Total Racers\r\n\r\nFree Run:", MemSize::Unknown, 1); - AssertIndirectNote(note, 0x1B5BEU, L"Seconds 0x", MemSize::Unknown, 1); - AssertIndirectNote(note, 0x1B5CEU, L"Lap", MemSize::Unknown, 1); + AssertIndirectNote(note, 0x1B56EU, L"Current Position", Memory::Size::Unknown, 1); + AssertIndirectNote(note, 0x1B57EU, L"Total Racers\r\n\r\nFree Run:", Memory::Size::Unknown, 1); + AssertIndirectNote(note, 0x1B5BEU, L"Seconds 0x", Memory::Size::Unknown, 1); + AssertIndirectNote(note, 0x1B5CEU, L"Lap", Memory::Size::Unknown, 1); } TEST_METHOD(TestPointerOverlap) @@ -421,13 +422,13 @@ TEST_CLASS(CodeNoteModel_Tests) L"+6 = Job Level (8-bit)"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address // extracted notes for offset fields (note: pointer base default is $0000) - AssertIndirectNote(note, 2, L"EXP (32-bit)", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(note, 5, L"Base Level (8-bit)", MemSize::EightBit, 1); - AssertIndirectNote(note, 6, L"Job Level (8-bit)", MemSize::EightBit, 1); + AssertIndirectNote(note, 2, L"EXP (32-bit)", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(note, 5, L"Base Level (8-bit)", Memory::Size::EightBit, 1); + AssertIndirectNote(note, 6, L"Job Level (8-bit)", Memory::Size::EightBit, 1); } TEST_METHOD(TestNestedPointer) @@ -441,16 +442,16 @@ TEST_CLASS(CodeNoteModel_Tests) L"--- +0x24C | Flag"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address const auto* offsetNote = AssertIndirectNote(note, 0x428, - L"Pointer - Award - Tee Hee Two (32bit)\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + L"Pointer - Award - Tee Hee Two (32bit)\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); offsetNote = AssertIndirectNote(note, 0x438, - L"Pointer - Award - Pretty Woman (32bit)\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + L"Pointer - Award - Pretty Woman (32bit)\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); } TEST_METHOD(TestUnannotatedPointerChain) @@ -464,18 +465,18 @@ TEST_CLASS(CodeNoteModel_Tests) L"++0x24C | Flag"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address const auto* offsetNote = AssertIndirectNote( - note, 0x428, L"Award - Tee Hee Two\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); + note, 0x428, L"Award - Tee Hee Two\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); Assert::AreEqual(std::wstring(L"Award - Tee Hee Two"), offsetNote->GetPointerDescription()); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); offsetNote = AssertIndirectNote(note, 0x438, L"Award - Pretty Woman\r\n+0x24C | Flag", - MemSize::ThirtyTwoBit, 4); + Memory::Size::ThirtyTwoBit, 4); Assert::AreEqual(std::wstring(L"Award - Pretty Woman"), offsetNote->GetPointerDescription()); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); } TEST_METHOD(TestNestedPointerAlternateFormat) @@ -489,16 +490,16 @@ TEST_CLASS(CodeNoteModel_Tests) L"++0x24C | Flag"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address const auto* offsetNote = AssertIndirectNote(note, 0x428, - L"(32-bit pointer) Award - Tee Hee Two\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + L"(32-bit pointer) Award - Tee Hee Two\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); offsetNote = AssertIndirectNote(note, 0x438, - L"(32-bit pointer) Award - Pretty Woman\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + L"(32-bit pointer) Award - Pretty Woman\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); } TEST_METHOD(TestNestedPointerBracketNotSeparator) @@ -512,16 +513,16 @@ TEST_CLASS(CodeNoteModel_Tests) L"--- +0x24C [8bit] Flag"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address const auto* offsetNote = AssertIndirectNote(note, 0x428, - L"[32bit] Pointer - Award - Tee Hee Two\r\n+0x24C [8bit] Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"[8bit] Flag", MemSize::EightBit, 1); + L"[32bit] Pointer - Award - Tee Hee Two\r\n+0x24C [8bit] Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"[8bit] Flag", Memory::Size::EightBit, 1); offsetNote = AssertIndirectNote(note, 0x438, - L"[32bit] Pointer - Award - Pretty Woman\r\n+0x24C [8bit] Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"[8bit] Flag", MemSize::EightBit, 1); + L"[32bit] Pointer - Award - Pretty Woman\r\n+0x24C [8bit] Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"[8bit] Flag", Memory::Size::EightBit, 1); } TEST_METHOD(TestNestedPointerMultiLine) @@ -539,18 +540,18 @@ TEST_CLASS(CodeNoteModel_Tests) L"+0x448 | [32-bit BE] Not-nested number"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address const auto* offsetNote = AssertIndirectNote(note, 0x428, L"Obj1 pointer\r\n+0x24C | [16-bit] State\r\n-- Increments", - MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"[16-bit] State\r\n-- Increments", MemSize::SixteenBit, 2); + Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"[16-bit] State\r\n-- Increments", Memory::Size::SixteenBit, 2); offsetNote = AssertIndirectNote(note, 0x438, L"Obj2 pointer\r\n+0x08 | Flag\r\n-- b0=quest1 complete\r\n-- b1=quest2 complete", - MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x08, L"Flag\r\n-- b0=quest1 complete\r\n-- b1=quest2 complete", MemSize::Unknown, 1); + Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x08, L"Flag\r\n-- b0=quest1 complete\r\n-- b1=quest2 complete", Memory::Size::Unknown, 1); - AssertIndirectNote(note, 0x448, L"[32-bit BE] Not-nested number", MemSize::ThirtyTwoBitBigEndian, 4); + AssertIndirectNote(note, 0x448, L"[32-bit BE] Not-nested number", Memory::Size::ThirtyTwoBitBigEndian, 4); } TEST_METHOD(TestNestedPointerRepeatedNodes) @@ -566,7 +567,7 @@ TEST_CLASS(CodeNoteModel_Tests) L"+++0x24C | Flag"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address // expect individual nodes to be merged together @@ -574,15 +575,15 @@ TEST_CLASS(CodeNoteModel_Tests) L"+0x428 | (32-bit pointer) Award - Tee Hee Two\r\n" L"++0x24C | Flag\r\n" L"+0x438 | (32-bit pointer) Award - Pretty Woman\r\n" - L"++0x24C | Flag", MemSize::ThirtyTwoBit, 4); + L"++0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); const auto* offsetNote = AssertIndirectNote(*sharedNote, 0x428, - L"(32-bit pointer) Award - Tee Hee Two\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + L"(32-bit pointer) Award - Tee Hee Two\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); offsetNote = AssertIndirectNote(*sharedNote, 0x438, - L"(32-bit pointer) Award - Pretty Woman\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + L"(32-bit pointer) Award - Pretty Woman\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); } TEST_METHOD(TestImpliedPointerChain) @@ -597,17 +598,17 @@ TEST_CLASS(CodeNoteModel_Tests) L"+++0x8008 = Second [32-bits]"; note.SetNote(sNote); - Assert::AreEqual(MemSize::TwentyFourBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::TwentyFourBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address const auto* nestedNote = AssertIndirectNote(note, 0x8318, - L"+0x8014\r\n++0x8004 = First [32-bits]\r\n++0x8008 = Second [32-bits]", MemSize::ThirtyTwoBit, 4); + L"+0x8014\r\n++0x8004 = First [32-bits]\r\n++0x8008 = Second [32-bits]", Memory::Size::ThirtyTwoBit, 4); Assert::AreEqual(std::wstring(L""), nestedNote->GetPointerDescription()); const auto* nestedNote2 = AssertIndirectNote(*nestedNote, 0x8014, - L"+0x8004 = First [32-bits]\r\n+0x8008 = Second [32-bits]", MemSize::ThirtyTwoBit, 4); + L"+0x8004 = First [32-bits]\r\n+0x8008 = Second [32-bits]", Memory::Size::ThirtyTwoBit, 4); Assert::AreEqual(std::wstring(L""), nestedNote2->GetPointerDescription()); - AssertIndirectNote(*nestedNote2, 0x8004, L"First [32-bits]", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*nestedNote2, 0x8008, L"Second [32-bits]", MemSize::ThirtyTwoBit, 4); + AssertIndirectNote(*nestedNote2, 0x8004, L"First [32-bits]", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*nestedNote2, 0x8008, L"Second [32-bits]", Memory::Size::ThirtyTwoBit, 4); } TEST_METHOD(TestArrayPointer) @@ -621,17 +622,17 @@ TEST_CLASS(CodeNoteModel_Tests) L"--- +0x24C | Flag"; note.SetNote(sNote); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); Assert::AreEqual(sNote, note.GetNote()); // full note for pointer address Assert::AreEqual(std::wstring(L"Pointer [32bit] (80 bytes)"), note.GetPointerDescription()); const auto* offsetNote = AssertIndirectNote( - note, 0x428, L"Pointer - Award - Tee Hee Two (32bit)\r\n+0x24C | Flag", MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + note, 0x428, L"Pointer - Award - Tee Hee Two (32bit)\r\n+0x24C | Flag", Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); offsetNote = AssertIndirectNote(note, 0x438, L"Pointer - Award - Pretty Woman (32bit)\r\n+0x24C | Flag", - MemSize::ThirtyTwoBit, 4); - AssertIndirectNote(*offsetNote, 0x24C, L"Flag", MemSize::Unknown, 1); + Memory::Size::ThirtyTwoBit, 4); + AssertIndirectNote(*offsetNote, 0x24C, L"Flag", Memory::Size::Unknown, 1); } TEST_METHOD(TestPointerOverflow) @@ -652,9 +653,9 @@ TEST_CLASS(CodeNoteModel_Tests) note.SetNote(sNote); note.UpdateRawPointerValue(0x04, note.mockEmulatorContext, nullptr); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); - note.EnumeratePointerNotes([](ra::ByteAddress nAddress, const CodeNoteModel& nOffsetNote) + note.EnumeratePointerNotes([](ra::data::ByteAddress nAddress, const CodeNoteModel& nOffsetNote) { Assert::AreEqual(0x14U, nAddress); Assert::AreEqual(0x80000004U, nOffsetNote.GetAddress()); @@ -682,9 +683,9 @@ TEST_CLASS(CodeNoteModel_Tests) note.SetNote(sNote); note.UpdateRawPointerValue(0x04, note.mockEmulatorContext, nullptr); - Assert::AreEqual(MemSize::ThirtyTwoBit, note.GetMemSize()); + Assert::AreEqual(Memory::Size::ThirtyTwoBit, note.GetMemSize()); - note.EnumeratePointerNotes([](ra::ByteAddress nAddress, const CodeNoteModel& nOffsetNote) + note.EnumeratePointerNotes([](ra::data::ByteAddress nAddress, const CodeNoteModel& nOffsetNote) { Assert::AreEqual(0x08U, nAddress); Assert::AreEqual(0xFFFFFFF8U, nOffsetNote.GetAddress()); diff --git a/tests/data/models/CodeNotesModel_Tests.cpp b/tests/data/models/CodeNotesModel_Tests.cpp index bebc4930f..05793b662 100644 --- a/tests/data/models/CodeNotesModel_Tests.cpp +++ b/tests/data/models/CodeNotesModel_Tests.cpp @@ -8,6 +8,7 @@ #include "tests\data\DataAsserts.hh" #include "tests\devkit\services\mocks\MockThreadPool.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockConsoleContext.hh" #include "tests\mocks\MockDesktop.hh" #include "tests\mocks\MockEmulatorContext.hh" @@ -41,10 +42,10 @@ TEST_CLASS(CodeNotesModel_Tests) mNewNotes.clear(); CodeNotesModel::Refresh(nGameId, - [this](ra::ByteAddress nAddress, const std::wstring& sNewNote) { + [this](ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { mNewNotes[nAddress] = sNewNote; }, - [this](ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) { + [this](ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { if (nOldAddress != 0xFFFFFFFF) mNewNotes[nOldAddress] = L""; mNewNotes[nNewAddress] = sNote; @@ -56,10 +57,10 @@ TEST_CLASS(CodeNotesModel_Tests) void MonitorCodeNoteChanges() { - m_fCodeNoteChanged = [this](ra::ByteAddress nAddress, const std::wstring& sNewNote) { + m_fCodeNoteChanged = [this](ra::data::ByteAddress nAddress, const std::wstring& sNewNote) { mNewNotes[nAddress] = sNewNote; }; - m_fCodeNoteMoved = [this](ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) { + m_fCodeNoteMoved = [this](ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { if (nOldAddress != 0xFFFFFFFF) mNewNotes[nOldAddress] = L""; mNewNotes[nNewAddress] = sNote; @@ -73,14 +74,14 @@ TEST_CLASS(CodeNotesModel_Tests) using CodeNotesModel::AddCodeNote; - void AssertNoNote(ra::ByteAddress nAddress) + void AssertNoNote(ra::data::ByteAddress nAddress) { const auto* pNote = FindCodeNote(nAddress); if (pNote != nullptr) Assert::Fail(ra::StringPrintf(L"Note found for address %04X: %s", nAddress, *pNote).c_str()); } - void AssertNote(ra::ByteAddress nAddress, const std::wstring& sExpected) + void AssertNote(ra::data::ByteAddress nAddress, const std::wstring& sExpected) { const auto* pNote = FindCodeNote(nAddress); Assert::IsNotNull(pNote, ra::StringPrintf(L"Note not found for address %04X", nAddress).c_str()); @@ -88,7 +89,7 @@ TEST_CLASS(CodeNotesModel_Tests) Assert::AreEqual(sExpected, *pNote); } - void AssertNote(ra::ByteAddress nAddress, const std::wstring& sExpected, MemSize nExpectedSize, unsigned nExpectedBytes = 0) + void AssertNote(ra::data::ByteAddress nAddress, const std::wstring& sExpected, Memory::Size nExpectedSize, unsigned nExpectedBytes = 0) { AssertNote(nAddress, sExpected); @@ -102,7 +103,7 @@ TEST_CLASS(CodeNotesModel_Tests) } } - void AssertIndirectNote(ra::ByteAddress nAddress, unsigned nOffset, const std::wstring& sExpected) + void AssertIndirectNote(ra::data::ByteAddress nAddress, unsigned nOffset, const std::wstring& sExpected) { const auto* pNote = FindCodeNoteModel(nAddress); Assert::IsNotNull(pNote, ra::StringPrintf(L"Note not found for address %04X", nAddress).c_str()); @@ -113,7 +114,7 @@ TEST_CLASS(CodeNotesModel_Tests) Assert::AreEqual(sExpected, pNote->GetNote()); } - void AssertNoteDescription(ra::ByteAddress nAddress, const wchar_t* sExpected) + void AssertNoteDescription(ra::data::ByteAddress nAddress, const wchar_t* sExpected) { const auto* pNote = FindCodeNoteModel(nAddress); if (!sExpected) @@ -208,58 +209,58 @@ TEST_CLASS(CodeNotesModel_Tests) notes.InitializeCodeNotes(1U); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(100, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(999, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [1/4]"), notes.FindCodeNote(1000, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [2/4]"), notes.FindCodeNote(1001, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [3/4]"), notes.FindCodeNote(1002, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [4/4]"), notes.FindCodeNote(1003, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1004, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Level"), notes.FindCodeNote(1100, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [1/2]"), notes.FindCodeNote(1110, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [2/2]"), notes.FindCodeNote(1111, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [1/8]"), notes.FindCodeNote(1120, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [2/8]"), notes.FindCodeNote(1121, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [3/8]"), notes.FindCodeNote(1122, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [4/8]"), notes.FindCodeNote(1123, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [5/8]"), notes.FindCodeNote(1124, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [6/8]"), notes.FindCodeNote(1125, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [7/8]"), notes.FindCodeNote(1126, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[8 byte] Exp [8/8]"), notes.FindCodeNote(1127, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1128, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[20 bytes] Items [1/20]"), notes.FindCodeNote(1200, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[20 bytes] Items [10/20]"), notes.FindCodeNote(1209, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"[20 bytes] Items [20/20]"), notes.FindCodeNote(1219, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1300, MemSize::EightBit)); - - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(100, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(998, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(999, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1000, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1001, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1002, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1003, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1004, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1099, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1100, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1109, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength"), notes.FindCodeNote(1110, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1111, MemSize::SixteenBit)); - - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(100, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(996, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(997, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location"), notes.FindCodeNote(1000, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1001, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1002, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1003, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1004, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1097, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1100, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1107, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1110, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1111, MemSize::ThirtyTwoBit)); - Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1112, MemSize::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(100, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(999, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [1/4]"), notes.FindCodeNote(1000, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [2/4]"), notes.FindCodeNote(1001, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [3/4]"), notes.FindCodeNote(1002, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [4/4]"), notes.FindCodeNote(1003, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1004, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Level"), notes.FindCodeNote(1100, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [1/2]"), notes.FindCodeNote(1110, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [2/2]"), notes.FindCodeNote(1111, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [1/8]"), notes.FindCodeNote(1120, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [2/8]"), notes.FindCodeNote(1121, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [3/8]"), notes.FindCodeNote(1122, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [4/8]"), notes.FindCodeNote(1123, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [5/8]"), notes.FindCodeNote(1124, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [6/8]"), notes.FindCodeNote(1125, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [7/8]"), notes.FindCodeNote(1126, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[8 byte] Exp [8/8]"), notes.FindCodeNote(1127, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1128, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[20 bytes] Items [1/20]"), notes.FindCodeNote(1200, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[20 bytes] Items [10/20]"), notes.FindCodeNote(1209, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"[20 bytes] Items [20/20]"), notes.FindCodeNote(1219, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1300, Memory::Size::EightBit)); + + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(100, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(998, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(999, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1000, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1001, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1002, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1003, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1004, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1099, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1100, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1109, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength"), notes.FindCodeNote(1110, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1111, Memory::Size::SixteenBit)); + + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(100, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(996, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(997, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location"), notes.FindCodeNote(1000, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1001, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1002, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[32-bit] Location [partial]"), notes.FindCodeNote(1003, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1004, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1097, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"Level [partial]"), notes.FindCodeNote(1100, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1107, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1110, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L"[16-bit] Strength [partial]"), notes.FindCodeNote(1111, Memory::Size::ThirtyTwoBit)); + Assert::AreEqual(std::wstring(L""), notes.FindCodeNote(1112, Memory::Size::ThirtyTwoBit)); } TEST_METHOD(TestFindCodeNoteStart) @@ -428,11 +429,11 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 0x04; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::TwentyFourBit); // full note for pointer address + notes.AssertNote(12U, sNote, Memory::Size::TwentyFourBit); // full note for pointer address // extracted notes for offset fields (note: pointer base default is $0000) - notes.AssertNote(4+3U, L"Bombs Defused", MemSize::Unknown, 1); - notes.AssertNote(4+4U, L"Bomb Timer", MemSize::Unknown, 1); + notes.AssertNote(4+3U, L"Bombs Defused", Memory::Size::Unknown, 1); + notes.AssertNote(4+4U, L"Bomb Timer", Memory::Size::Unknown, 1); } TEST_METHOD(TestFindCodeNotePointer2) @@ -449,11 +450,11 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 0x04; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::ThirtyTwoBit); // full note for pointer address + notes.AssertNote(12U, sNote, Memory::Size::ThirtyTwoBit); // full note for pointer address notes.AssertNote(4+0x1BU, L"Equipment - Head - String[24 Bytes]\n" L"---DEFAULT_HEAD = Barry's Head\n" - L"---FRAGGER_HEAD = Fragger Helmet", MemSize::Array, 24); + L"---FRAGGER_HEAD = Fragger Helmet", Memory::Size::Array, 24); } TEST_METHOD(TestFindCodeNotePointer3) @@ -470,11 +471,11 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 0x04; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::ThirtyTwoBit); // full note for pointer address + notes.AssertNote(12U, sNote, Memory::Size::ThirtyTwoBit); // full note for pointer address - notes.AssertNote(4+0x7F47U, L"[8-bit] Acorns collected in current track", MemSize::EightBit); - notes.AssertNote(4+0x8000U, L"[8-bit] Current lap", MemSize::EightBit); - notes.AssertNote(4+0x8033U, L"[16-bit] Total race time", MemSize::SixteenBit); + notes.AssertNote(4+0x7F47U, L"[8-bit] Acorns collected in current track", Memory::Size::EightBit); + notes.AssertNote(4+0x8000U, L"[8-bit] Current lap", Memory::Size::EightBit); + notes.AssertNote(4+0x8033U, L"[16-bit] Total race time", Memory::Size::SixteenBit); } TEST_METHOD(TestFindCodeNotePointer4) @@ -494,12 +495,12 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 0x04; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::SixteenBit); // full note for pointer address + notes.AssertNote(12U, sNote, Memory::Size::SixteenBit); // full note for pointer address - notes.AssertNote(4+0x1B56EU, L"Current Position", MemSize::Unknown, 1); - notes.AssertNote(4+0x1B57EU, L"Total Racers\n\nFree Run:", MemSize::Unknown, 1); - notes.AssertNote(4+0x1B5BEU, L"Seconds 0x", MemSize::Unknown, 1); - notes.AssertNote(4+0x1B5CEU, L"Lap", MemSize::Unknown, 1); + notes.AssertNote(4+0x1B56EU, L"Current Position", Memory::Size::Unknown, 1); + notes.AssertNote(4+0x1B57EU, L"Total Racers\n\nFree Run:", Memory::Size::Unknown, 1); + notes.AssertNote(4+0x1B5BEU, L"Seconds 0x", Memory::Size::Unknown, 1); + notes.AssertNote(4+0x1B5CEU, L"Lap", Memory::Size::Unknown, 1); } TEST_METHOD(TestFindCodeNotePointer5) @@ -519,14 +520,14 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 0x04; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::ThirtyTwoBit, 4); // full note for pointer address (assume 32-bit if not specified) + notes.AssertNote(12U, sNote, Memory::Size::ThirtyTwoBit, 4); // full note for pointer address (assume 32-bit if not specified) // extracted notes for offset fields (note: pointer base default is $0000) - notes.AssertNote(4+2, L"EXP (32-bit)", MemSize::ThirtyTwoBit); - notes.AssertNote(4+5, L"Base Level (8-bit)", MemSize::EightBit); - notes.AssertNote(4+6, L"Job Level (8-bit)", MemSize::EightBit); - notes.AssertNote(4+20, L"Stat Points (16-bit)", MemSize::SixteenBit); - notes.AssertNote(4+22, L"Skill Points (8-bit)", MemSize::EightBit); + notes.AssertNote(4+2, L"EXP (32-bit)", Memory::Size::ThirtyTwoBit); + notes.AssertNote(4+5, L"Base Level (8-bit)", Memory::Size::EightBit); + notes.AssertNote(4+6, L"Job Level (8-bit)", Memory::Size::EightBit); + notes.AssertNote(4+20, L"Stat Points (16-bit)", Memory::Size::SixteenBit); + notes.AssertNote(4+22, L"Skill Points (8-bit)", Memory::Size::EightBit); } TEST_METHOD(TestFindCodeNotePointerNested) @@ -546,13 +547,13 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(0x10+8) = 0x28; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::ThirtyTwoBit); // full note for pointer address + notes.AssertNote(12U, sNote, Memory::Size::ThirtyTwoBit); // full note for pointer address - notes.AssertNote(0x10+4U, L"Pointer - Award - Tee Hee Two (32bit)\n+2 | Flag", MemSize::ThirtyTwoBit); - notes.AssertNote(0x10+8U, L"Pointer - Award - Pretty Woman (32bit)\n+2 | Flag", MemSize::ThirtyTwoBit); + notes.AssertNote(0x10+4U, L"Pointer - Award - Tee Hee Two (32bit)\n+2 | Flag", Memory::Size::ThirtyTwoBit); + notes.AssertNote(0x10+8U, L"Pointer - Award - Pretty Woman (32bit)\n+2 | Flag", Memory::Size::ThirtyTwoBit); - notes.AssertNote(0x20+2U, L"Flag", MemSize::Unknown); - notes.AssertNote(0x28+2U, L"Flag", MemSize::Unknown); + notes.AssertNote(0x20+2U, L"Flag", Memory::Size::Unknown); + notes.AssertNote(0x28+2U, L"Flag", Memory::Size::Unknown); } TEST_METHOD(TestFindCodeNotePointerNonPrefixedOffsets) @@ -570,7 +571,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.DoFrame(); // offset parse failure results in a non-pointer note - notes.AssertNote(12U, sNote, MemSize::TwentyFourBit); + notes.AssertNote(12U, sNote, Memory::Size::TwentyFourBit); notes.AssertNoNote(4+0x07U); notes.AssertNoNote(4+0x5CU); notes.AssertNoNote(4+0x5EU); @@ -591,12 +592,12 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 4; notes.DoFrame(); - notes.AssertNote(12U, sNote, MemSize::SixteenBit); // full note for pointer address + notes.AssertNote(12U, sNote, Memory::Size::SixteenBit); // full note for pointer address // both note for 0x1B56E exist in the array, but only the first is returned - notes.AssertNote(4+0x1B56EU, L"Current Position", MemSize::Unknown, 1); - notes.AssertNote(4+0x1B57EU, L"Total Racers", MemSize::Unknown, 1); - notes.AssertNote(4+0x1B5CEU, L"Lap", MemSize::Unknown, 1); + notes.AssertNote(4+0x1B56EU, L"Current Position", Memory::Size::Unknown, 1); + notes.AssertNote(4+0x1B57EU, L"Total Racers", Memory::Size::Unknown, 1); + notes.AssertNote(4+0x1B5CEU, L"Lap", Memory::Size::Unknown, 1); } TEST_METHOD(TestFindCodeNoteSizedPointer) @@ -615,27 +616,27 @@ TEST_CLASS(CodeNotesModel_Tests) memory.at(12) = 0x10; notes.DoFrame(); - Assert::AreEqual(std::wstring(), notes.FindCodeNote(0, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Unknown [indirect]"), notes.FindCodeNote(0x10+1, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Small (8-bit) [indirect]"), notes.FindCodeNote(0x10+2, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [1/2] [indirect]"), notes.FindCodeNote(0x10+4, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [2/2] [indirect]"), notes.FindCodeNote(0x10+5, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [1/4] [indirect]"), notes.FindCodeNote(0x10+6, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [4/4] [indirect]"), notes.FindCodeNote(0x10+9, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [1/8] [indirect]"), notes.FindCodeNote(0x10+10, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [8/8] [indirect]"), notes.FindCodeNote(0x10+17, MemSize::EightBit)); - Assert::AreEqual(std::wstring(), notes.FindCodeNote(0x10+18, MemSize::EightBit)); - - Assert::AreEqual(std::wstring(L"Unknown [partial] [indirect]"), notes.FindCodeNote(0x10+0, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Unknown [partial] [indirect]"), notes.FindCodeNote(0x10+1, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Small (8-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+2, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [indirect]"), notes.FindCodeNote(0x10+4, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+5, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+6, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+9, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [partial] [indirect]"), notes.FindCodeNote(0x10+10, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [partial] [indirect]"), notes.FindCodeNote(0x10+17, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(), notes.FindCodeNote(0x10+18, MemSize::SixteenBit)); + Assert::AreEqual(std::wstring(), notes.FindCodeNote(0, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Unknown [indirect]"), notes.FindCodeNote(0x10+1, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Small (8-bit) [indirect]"), notes.FindCodeNote(0x10+2, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [1/2] [indirect]"), notes.FindCodeNote(0x10+4, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [2/2] [indirect]"), notes.FindCodeNote(0x10+5, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [1/4] [indirect]"), notes.FindCodeNote(0x10+6, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [4/4] [indirect]"), notes.FindCodeNote(0x10+9, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [1/8] [indirect]"), notes.FindCodeNote(0x10+10, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [8/8] [indirect]"), notes.FindCodeNote(0x10+17, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(), notes.FindCodeNote(0x10+18, Memory::Size::EightBit)); + + Assert::AreEqual(std::wstring(L"Unknown [partial] [indirect]"), notes.FindCodeNote(0x10+0, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Unknown [partial] [indirect]"), notes.FindCodeNote(0x10+1, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Small (8-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+2, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [indirect]"), notes.FindCodeNote(0x10+4, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+5, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+6, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(0x10+9, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [partial] [indirect]"), notes.FindCodeNote(0x10+10, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Very Large (8 bytes) [partial] [indirect]"), notes.FindCodeNote(0x10+17, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(), notes.FindCodeNote(0x10+18, Memory::Size::SixteenBit)); } @@ -658,25 +659,25 @@ TEST_CLASS(CodeNotesModel_Tests) notes.AddCodeNote(20, "Author", L"In the middle"); notes.DoFrame(); - Assert::AreEqual(std::wstring(), notes.FindCodeNote(0, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Before"), notes.FindCodeNote(1, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Pointer (32-bit) [1/4]"), notes.FindCodeNote(4, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Small (8-bit) [indirect]"), notes.FindCodeNote(16, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [1/2] [indirect]"), notes.FindCodeNote(24, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [2/2] [indirect]"), notes.FindCodeNote(25, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [1/4] [indirect]"), notes.FindCodeNote(32, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [4/4] [indirect]"), notes.FindCodeNote(35, MemSize::EightBit)); - Assert::AreEqual(std::wstring(), notes.FindCodeNote(36, MemSize::EightBit)); - - Assert::AreEqual(std::wstring(L"Before [partial]"), notes.FindCodeNote(0, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Before [partial]"), notes.FindCodeNote(1, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Pointer (32-bit) [partial]"), notes.FindCodeNote(4, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Small (8-bit) [partial] [indirect]"), notes.FindCodeNote(16, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [indirect]"), notes.FindCodeNote(24, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Medium (16-bit) [partial] [indirect]"), notes.FindCodeNote(25, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(32, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(35, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(), notes.FindCodeNote(36, MemSize::SixteenBit)); + Assert::AreEqual(std::wstring(), notes.FindCodeNote(0, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Before"), notes.FindCodeNote(1, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Pointer (32-bit) [1/4]"), notes.FindCodeNote(4, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Small (8-bit) [indirect]"), notes.FindCodeNote(16, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [1/2] [indirect]"), notes.FindCodeNote(24, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [2/2] [indirect]"), notes.FindCodeNote(25, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [1/4] [indirect]"), notes.FindCodeNote(32, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [4/4] [indirect]"), notes.FindCodeNote(35, Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(), notes.FindCodeNote(36, Memory::Size::EightBit)); + + Assert::AreEqual(std::wstring(L"Before [partial]"), notes.FindCodeNote(0, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Before [partial]"), notes.FindCodeNote(1, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Pointer (32-bit) [partial]"), notes.FindCodeNote(4, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Small (8-bit) [partial] [indirect]"), notes.FindCodeNote(16, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [indirect]"), notes.FindCodeNote(24, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Medium (16-bit) [partial] [indirect]"), notes.FindCodeNote(25, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(32, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"Large (32-bit) [partial] [indirect]"), notes.FindCodeNote(35, Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(), notes.FindCodeNote(36, Memory::Size::SixteenBit)); } TEST_METHOD(TestFindCodeNoteBrokenPointerChain) @@ -780,7 +781,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.DoFrame(); int i = 0; - notes.EnumerateCodeNotes([&i, &sPointerNote](ra::ByteAddress nAddress, unsigned nBytes, const std::wstring& sNote) { + notes.EnumerateCodeNotes([&i, &sPointerNote](ra::data::ByteAddress nAddress, unsigned nBytes, const std::wstring& sNote) { switch (i++) { case 0: @@ -829,7 +830,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.DoFrame(); int i = 0; - notes.EnumerateCodeNotes([&i, &sPointerNote](ra::ByteAddress nAddress, unsigned nBytes, const std::wstring& sNote) { + notes.EnumerateCodeNotes([&i, &sPointerNote](ra::data::ByteAddress nAddress, unsigned nBytes, const std::wstring& sNote) { switch (i++) { case 0: @@ -890,7 +891,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.DoFrame(); int i = 0; - notes.EnumerateCodeNotes([&i, &sPointerNote](ra::ByteAddress nAddress, unsigned nBytes, const std::wstring& sNote) { + notes.EnumerateCodeNotes([&i, &sPointerNote](ra::data::ByteAddress nAddress, unsigned nBytes, const std::wstring& sNote) { switch (i++) { case 0: @@ -963,7 +964,7 @@ TEST_CLASS(CodeNotesModel_Tests) Assert::AreEqual(std::wstring(L"Large (32-bit)"), notes.mNewNotes[0x14]); notes.AssertNoNote(0x02U); - notes.AssertNote(0x12U, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x12U, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); // calling DoFrame after updating the pointer should nofity about all the affected subnotes notes.mNewNotes.clear(); @@ -980,7 +981,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.AssertNoNote(0x02U); notes.AssertNoNote(0x12U); - notes.AssertNote(0x0AU, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x0AU, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); // small change to pointer causes notification addresses to overlap. Make sure the final event // for the overlapping address is the new note value. @@ -1000,7 +1001,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.AssertNoNote(0x02U); notes.AssertNoNote(0x12U); - notes.AssertNote(0x0AU, L"Large (32-bit)", MemSize::ThirtyTwoBit, 4); + notes.AssertNote(0x0AU, L"Large (32-bit)", Memory::Size::ThirtyTwoBit, 4); // no change to pointer should not raise any events notes.mNewNotes.clear(); @@ -1036,7 +1037,7 @@ TEST_CLASS(CodeNotesModel_Tests) Assert::AreEqual(std::wstring(L"Large (32-bit)"), notes.mNewNotes[0x14]); notes.AssertNoNote(0x02U); - notes.AssertNote(0x12U, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x12U, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); // calling DoFrame after updating the pointer should notify about all the affected subnotes notes.mNewNotes.clear(); @@ -1053,7 +1054,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.AssertNoNote(0x02U); notes.AssertNoNote(0x12U); - notes.AssertNote(0x0AU, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x0AU, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); } TEST_METHOD(TestDoFrameRealAddressConversionBigEndian) @@ -1084,7 +1085,7 @@ TEST_CLASS(CodeNotesModel_Tests) Assert::AreEqual(std::wstring(L"Large (32-bit)"), notes.mNewNotes[0x14]); notes.AssertNoNote(0x02U); - notes.AssertNote(0x12U, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x12U, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); // calling DoFrame after updating the pointer should notify about all the affected subnotes notes.mNewNotes.clear(); @@ -1101,7 +1102,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.AssertNoNote(0x02U); notes.AssertNoNote(0x12U); - notes.AssertNote(0x0AU, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x0AU, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); } TEST_METHOD(TestDoFrameRealAddressConversionAvoidedByOverflow) @@ -1132,7 +1133,7 @@ TEST_CLASS(CodeNotesModel_Tests) Assert::AreEqual(std::wstring(L"Large (32-bit)"), notes.mNewNotes[0x14]); notes.AssertNoNote(0x02U); - notes.AssertNote(0x12U, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x12U, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); // calling DoFrame after updating the pointer should notify about all the affected subnotes notes.mNewNotes.clear(); @@ -1149,7 +1150,7 @@ TEST_CLASS(CodeNotesModel_Tests) notes.AssertNoNote(0x02U); notes.AssertNoNote(0x12U); - notes.AssertNote(0x0AU, L"Medium (16-bit)", MemSize::SixteenBit, 2); + notes.AssertNote(0x0AU, L"Medium (16-bit)", Memory::Size::SixteenBit, 2); } TEST_METHOD(TestFindCodeNoteStartPointer) diff --git a/tests/data/models/MemoryRegionsModel_Tests.cpp b/tests/data/models/MemoryRegionsModel_Tests.cpp index 95daffefe..80a9041b9 100644 --- a/tests/data/models/MemoryRegionsModel_Tests.cpp +++ b/tests/data/models/MemoryRegionsModel_Tests.cpp @@ -31,7 +31,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) Assert::AreEqual(sExpected, sSerialized); } - void AssertRegion(ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, const std::wstring& sLabel) + void AssertRegion(ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, const std::wstring& sLabel) { for (const auto& pRegion : CustomRegions()) { @@ -115,7 +115,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"", nStartAddress, nEndAddress)); Assert::AreEqual({ 0 }, nStartAddress); Assert::AreEqual({ 0xFFFF }, nEndAddress); // total memory size - 1 @@ -126,7 +126,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"0xbeef-0xfeed", nStartAddress, nEndAddress)); Assert::AreEqual({ 0xBEEF }, nStartAddress); Assert::AreEqual({ 0xFEED }, nEndAddress); @@ -137,7 +137,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"$beef-$feed", nStartAddress, nEndAddress)); Assert::AreEqual({ 0xBEEF }, nStartAddress); Assert::AreEqual({ 0xFEED }, nEndAddress); @@ -148,7 +148,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"1234-face", nStartAddress, nEndAddress)); Assert::AreEqual({ 0x1234 }, nStartAddress); Assert::AreEqual({ 0xFACE }, nEndAddress); @@ -159,7 +159,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"0xbeef - 0xfeed", nStartAddress, nEndAddress)); Assert::AreEqual({ 0xBEEF }, nStartAddress); Assert::AreEqual({ 0xFEED }, nEndAddress); @@ -170,7 +170,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"8765", nStartAddress, nEndAddress)); Assert::AreEqual({ 0x8765 }, nStartAddress); Assert::AreEqual({ 0x8765 }, nEndAddress); @@ -181,7 +181,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsFalse(MemoryRegionsModel::ParseFilterRange(L"-8765", nStartAddress, nEndAddress)); Assert::AreEqual({ 0 }, nStartAddress); Assert::AreEqual({ 0 }, nEndAddress); @@ -192,7 +192,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsFalse(MemoryRegionsModel::ParseFilterRange(L"8765-", nStartAddress, nEndAddress)); Assert::AreEqual({ 0x8765 }, nStartAddress); Assert::AreEqual({ 0 }, nEndAddress); @@ -203,7 +203,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsFalse(MemoryRegionsModel::ParseFilterRange(L"banana", nStartAddress, nEndAddress)); Assert::AreEqual({ 0xBA }, nStartAddress); Assert::AreEqual({ 0 }, nEndAddress); @@ -214,7 +214,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"0xF000-0x10000", nStartAddress, nEndAddress)); Assert::AreEqual({ 0xF000 }, nStartAddress); Assert::AreEqual({ 0xFFFF }, nEndAddress); @@ -225,7 +225,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsFalse(MemoryRegionsModel::ParseFilterRange(L"0x10000-0x1FFFF", nStartAddress, nEndAddress)); Assert::AreEqual({ 0x10000 }, nStartAddress); Assert::AreEqual({ 0x1FFFF }, nEndAddress); @@ -236,7 +236,7 @@ TEST_CLASS(MemoryRegionsModel_Tests) ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; mockEmulatorContext.MockTotalMemorySizeChanged(0x10000); - ra::ByteAddress nStartAddress, nEndAddress; + ra::data::ByteAddress nStartAddress, nEndAddress; Assert::IsTrue(MemoryRegionsModel::ParseFilterRange(L"0x9876-0x1234", nStartAddress, nEndAddress)); Assert::AreEqual({ 0x1234 }, nStartAddress); Assert::AreEqual({ 0x9876 }, nEndAddress); diff --git a/tests/devkit/RADevKit.Tests.vcxproj.vcxproj b/tests/devkit/RADevKit.Tests.vcxproj.vcxproj index 66c23a15b..23fbb9fac 100644 --- a/tests/devkit/RADevKit.Tests.vcxproj.vcxproj +++ b/tests/devkit/RADevKit.Tests.vcxproj.vcxproj @@ -78,6 +78,7 @@ + \ No newline at end of file diff --git a/tests/devkit/RADevKit.Tests.vcxproj.vcxproj.filters b/tests/devkit/RADevKit.Tests.vcxproj.vcxproj.filters index 5d144d877..84055e295 100644 --- a/tests/devkit/RADevKit.Tests.vcxproj.vcxproj.filters +++ b/tests/devkit/RADevKit.Tests.vcxproj.vcxproj.filters @@ -83,5 +83,8 @@ services\mocks + + testutil + \ No newline at end of file diff --git a/tests/devkit/testutil/MemoryAsserts.hh b/tests/devkit/testutil/MemoryAsserts.hh new file mode 100644 index 000000000..42d168f40 --- /dev/null +++ b/tests/devkit/testutil/MemoryAsserts.hh @@ -0,0 +1,106 @@ +#ifndef RA_MEMORY_ASSERTS_H +#define RA_MEMORY_ASSERTS_H +#pragma once + +#include "CppUnitTest.hh" + +#include "data\Memory.hh" +#include "util\TypeCasts.hh" + +// The rcheevos nameless struct warning is only affecting the test project, for now we have +// to disable the warning in the project or pragmatically in rcheevos. Careful not to use nameless structs here. + +namespace Microsoft { +namespace VisualStudio { +namespace CppUnitTestFramework { + +// converters for asserting enum values + +#pragma warning(push) +#pragma warning(disable : 4505) // unreferenced inline functions, they are referenced. Must be a bug. + +template<> +std::wstring ToString(const ra::data::Memory::Size& t) +{ + switch (t) + { + case ra::data::Memory::Size::Bit_0: + return L"Bit_0"; + case ra::data::Memory::Size::Bit_1: + return L"Bit_1"; + case ra::data::Memory::Size::Bit_2: + return L"Bit_2"; + case ra::data::Memory::Size::Bit_3: + return L"Bit_3"; + case ra::data::Memory::Size::Bit_4: + return L"Bit_4"; + case ra::data::Memory::Size::Bit_5: + return L"Bit_5"; + case ra::data::Memory::Size::Bit_6: + return L"Bit_6"; + case ra::data::Memory::Size::Bit_7: + return L"Bit_7"; + case ra::data::Memory::Size::Nibble_Lower: + return L"Nibble_Lower"; + case ra::data::Memory::Size::Nibble_Upper: + return L"Nibble_Upper"; + case ra::data::Memory::Size::EightBit: + return L"EightBit"; + case ra::data::Memory::Size::SixteenBit: + return L"SixteenBit"; + case ra::data::Memory::Size::TwentyFourBit: + return L"TwentyFourBit"; + case ra::data::Memory::Size::ThirtyTwoBit: + return L"ThirtyTwoBit"; + case ra::data::Memory::Size::BitCount: + return L"BitCount"; + case ra::data::Memory::Size::SixteenBitBigEndian: + return L"SixteenBitBigEndian"; + case ra::data::Memory::Size::TwentyFourBitBigEndian: + return L"TwentyFourBitBigEndian"; + case ra::data::Memory::Size::ThirtyTwoBitBigEndian: + return L"ThirtyTwoBitBigEndian"; + case ra::data::Memory::Size::Float: + return L"Float"; + case ra::data::Memory::Size::FloatBigEndian: + return L"FloatBigEndian"; + case ra::data::Memory::Size::Double32: + return L"Double32"; + case ra::data::Memory::Size::Double32BigEndian: + return L"Double32BigEndian"; + case ra::data::Memory::Size::MBF32: + return L"MBF32"; + case ra::data::Memory::Size::MBF32LE: + return L"MBF32LE"; + case ra::data::Memory::Size::Text: + return L"Text"; + case ra::data::Memory::Size::Unknown: + return L"Unknown"; + case ra::data::Memory::Size::Array: + return L"Array"; + default: + return std::to_wstring(ra::etoi(t)); + } +} + +template<> +std::wstring ToString(const ra::data::Memory::Format& t) +{ + switch (t) + { + case ra::data::Memory::Format::Hex: + return L"Hex"; + case ra::data::Memory::Format::Dec: + return L"Dec"; + default: + return std::to_wstring(ra::etoi(t)); + } +} + +#pragma warning(pop) + +} // namespace CppUnitTestFramework +} // namespace VisualStudio +} // namespace Microsoft + +#endif /* !RA_MEMORY_ASSERTS_H */ diff --git a/tests/mocks/MockConsoleContext.hh b/tests/mocks/MockConsoleContext.hh index 3ffd69131..423d9515a 100644 --- a/tests/mocks/MockConsoleContext.hh +++ b/tests/mocks/MockConsoleContext.hh @@ -31,14 +31,14 @@ public: void ResetMemoryRegions() noexcept { m_vRegions.clear(); } - void AddMemoryRegion(ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, + void AddMemoryRegion(ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, AddressType nAddressType, const std::string& sDescription = "") { AddMemoryRegion(nStartAddress, nEndAddress, nAddressType, nStartAddress, sDescription); } - void AddMemoryRegion(ra::ByteAddress nStartAddress, ra::ByteAddress nEndAddress, - AddressType nAddressType, ra::ByteAddress nRealAddress, const std::string& sDescription = "") + void AddMemoryRegion(ra::data::ByteAddress nStartAddress, ra::data::ByteAddress nEndAddress, + AddressType nAddressType, ra::data::ByteAddress nRealAddress, const std::string& sDescription = "") { auto& pRegion = m_vRegions.emplace_back(); pRegion.StartAddress = nStartAddress; diff --git a/tests/mocks/MockGameContext.hh b/tests/mocks/MockGameContext.hh index 2d32b64c1..9c0539618 100644 --- a/tests/mocks/MockGameContext.hh +++ b/tests/mocks/MockGameContext.hh @@ -92,7 +92,7 @@ public: auto pCodeNotes = std::make_unique(); pCodeNotes->Initialize(1U, - [this](ra::ByteAddress nAddress, const std::wstring& sNote) { + [this](ra::data::ByteAddress nAddress, const std::wstring& sNote) { // a note with pointer notation is expected to keep track of where each // pointed-at note exists. this normally occurs in DoFrame, but for // the unit tests, force the update immediately after the note is updated @@ -110,13 +110,13 @@ public: OnCodeNoteChanged(nAddress, sNote); }, - [this](ra::ByteAddress nOldAddress, ra::ByteAddress nNewAddress, const std::wstring& sNote) { + [this](ra::data::ByteAddress nOldAddress, ra::data::ByteAddress nNewAddress, const std::wstring& sNote) { OnCodeNoteMoved(nOldAddress, nNewAddress, sNote); }); Assets().Append(std::move(pCodeNotes)); } - bool SetCodeNote(ra::ByteAddress nAddress, const std::wstring& sNote) + bool SetCodeNote(ra::data::ByteAddress nAddress, const std::wstring& sNote) { auto* pCodeNotes = dynamic_cast(Assets().FindCodeNotes()); if (pCodeNotes == nullptr) @@ -130,7 +130,7 @@ public: return true; } - bool UpdateCodeNote(ra::ByteAddress nAddress, const std::wstring& sNote) + bool UpdateCodeNote(ra::data::ByteAddress nAddress, const std::wstring& sNote) { auto* pCodeNotes = dynamic_cast(Assets().FindCodeNotes()); if (pCodeNotes == nullptr) diff --git a/tests/services/AchievementRuntimeExports_Tests.cpp b/tests/services/AchievementRuntimeExports_Tests.cpp index 87cdc5c27..22afdce0b 100644 --- a/tests/services/AchievementRuntimeExports_Tests.cpp +++ b/tests/services/AchievementRuntimeExports_Tests.cpp @@ -486,7 +486,7 @@ TEST_CLASS(AchievementRuntimeExports_Tests) runtime.mockEmulatorContext.WriteMemoryByte(2, 7); Assert::AreEqual({7}, runtime.GetMemoryByte(2)); Assert::AreEqual({7}, runtime.mockEmulatorContext.ReadMemoryByte(2)); - Assert::AreEqual({0x0703}, runtime.mockEmulatorContext.ReadMemory(1, MemSize::SixteenBit)); + Assert::AreEqual({0x0703}, runtime.mockEmulatorContext.ReadMemory(1, ra::data::Memory::Size::SixteenBit)); } TEST_METHOD(TestPauseEvent) diff --git a/tests/services/FrameEventQueue_Tests.cpp b/tests/services/FrameEventQueue_Tests.cpp index d0ce62de3..5d5d8b1fd 100644 --- a/tests/services/FrameEventQueue_Tests.cpp +++ b/tests/services/FrameEventQueue_Tests.cpp @@ -170,7 +170,7 @@ TEST_CLASS(FrameEventQueue_Tests) TEST_METHOD(TestPauseOnChange) { FrameEventQueueHarness eventQueue; - ra::ui::viewmodels::mocks::MockWindowManager mockWindowManager; // for MemSize->string mapping + ra::ui::viewmodels::mocks::MockWindowManager mockWindowManager; // for Memory::Size->string mapping bool bPaused = false; eventQueue.mockEmulatorContext.SetPauseFunction([&bPaused]() { bPaused = true; }); @@ -237,7 +237,7 @@ TEST_CLASS(FrameEventQueue_Tests) TEST_METHOD(TestComplexDialog) { FrameEventQueueHarness eventQueue; - ra::ui::viewmodels::mocks::MockWindowManager mockWindowManager; // for MemSize->string mapping + ra::ui::viewmodels::mocks::MockWindowManager mockWindowManager; // for Memory::Size->string mapping int nPaused = 0; eventQueue.mockEmulatorContext.SetPauseFunction([&nPaused]() { ++nPaused; }); diff --git a/tests/services/SearchResults_Tests.cpp b/tests/services/SearchResults_Tests.cpp index 933ca49e0..0ac6342a8 100644 --- a/tests/services/SearchResults_Tests.cpp +++ b/tests/services/SearchResults_Tests.cpp @@ -2,6 +2,7 @@ #include "tests\RA_UnitTestHelpers.h" #include "tests\mocks\MockEmulatorContext.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" using namespace Microsoft::VisualStudio::CppUnitTestFramework; @@ -44,17 +45,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x12U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x34U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -77,12 +78,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x3412U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0xAB34U, result.nValue); } @@ -104,7 +105,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x56AB3412U, result.nValue); } @@ -128,12 +129,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x1200U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0xAB34U, result.nValue); } @@ -160,12 +161,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0xAB341200U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x2044CD56U, result.nValue); } @@ -188,12 +189,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x1234U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x34ABU, result.nValue); } @@ -215,7 +216,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x1234AB56U, result.nValue); } @@ -239,12 +240,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x0012U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x34ABU, result.nValue); } @@ -271,12 +272,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x001234ABU, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x56CD4420U, result.nValue); } @@ -301,32 +302,32 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(0x2U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); Assert::AreEqual(0x1U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(0x4U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(3U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); Assert::AreEqual(0x3U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(0xBU, result.nValue); Assert::IsTrue(results.GetMatchingAddress(5U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); Assert::AreEqual(0xAU, result.nValue); } @@ -350,17 +351,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x3412U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0xAB34U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x56ABU, result.nValue); } @@ -387,7 +388,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -440,17 +441,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results3.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x00U, result.nValue); Assert::IsTrue(results3.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x00U, result.nValue); Assert::IsTrue(results3.GetMatchingAddress(2U, result)); Assert::AreEqual(5U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x00U, result.nValue); } @@ -477,12 +478,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x12U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x34U, result.nValue); } @@ -509,12 +510,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x12U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -541,7 +542,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -568,12 +569,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x34U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -600,7 +601,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x12U, result.nValue); } @@ -627,12 +628,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x12U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x34U, result.nValue); } @@ -662,7 +663,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -702,7 +703,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(1U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xABU, result.nValue); // no change - tests the "entire block matches" optimization @@ -719,7 +720,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results4.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x56U, result.nValue); } @@ -748,12 +749,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x14U, result.nValue); Assert::IsTrue(results2.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x55U, result.nValue); // no change - tests the "entire block matches" optimization @@ -793,27 +794,27 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x14U, result.nValue); Assert::IsTrue(results2.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x22U, result.nValue); Assert::IsTrue(results2.GetMatchingAddress(2U, result)); Assert::AreEqual(12U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x55U, result.nValue); Assert::IsTrue(results2.GetMatchingAddress(3U, result)); Assert::AreEqual(99U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x99U, result.nValue); Assert::IsTrue(results2.GetMatchingAddress(4U, result)); Assert::AreEqual(700U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x00U, result.nValue); } @@ -842,12 +843,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x14U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x36U, result.nValue); } @@ -876,12 +877,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x10U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x32U, result.nValue); } @@ -910,7 +911,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x37U, result.nValue); } @@ -937,12 +938,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x5512U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0xAB55U, result.nValue); } @@ -967,7 +968,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x55AB3412U, result.nValue); } @@ -993,12 +994,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x5500U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x6634U, result.nValue); memory.at(2) = 0x99; @@ -1011,7 +1012,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x6699U, result.nValue); } @@ -1037,12 +1038,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0xAB551200U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x2044CD66U, result.nValue); memory.at(6) = 0x99; @@ -1055,7 +1056,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x2099CD66U, result.nValue); } @@ -1084,13 +1085,13 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results1.GetMatchingAddress(0U, result)); Assert::AreEqual(0x000000U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x03550100U, result.nValue); Assert::IsTrue(results1.MatchesFilter(results, result)); Assert::IsTrue(results1.GetMatchingAddress(1U, result)); Assert::AreEqual(0x010000U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x66020100U, result.nValue); Assert::IsTrue(results1.MatchesFilter(results, result)); @@ -1104,7 +1105,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(0x010000U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x66029900U, result.nValue); Assert::IsTrue(results2.MatchesFilter(results1, result)); } @@ -1139,7 +1140,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(8U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x44332211U, result.nValue); } @@ -1166,12 +1167,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x1255U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x55ABU, result.nValue); } @@ -1196,7 +1197,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x1234AB55U, result.nValue); } @@ -1221,7 +1222,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x1234AB55U, result.nValue); } @@ -1247,12 +1248,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x0055U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x3466U, result.nValue); memory.at(2) = 0x99; @@ -1265,7 +1266,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBitBigEndian, result.nSize); Assert::AreEqual(0x9966U, result.nValue); } @@ -1291,12 +1292,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x001255ABU, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x66CD4420U, result.nValue); memory.at(6) = 0x99; @@ -1309,7 +1310,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x66CD9920U, result.nValue); } @@ -1338,17 +1339,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(4U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(5U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); Assert::AreEqual(5U, result.nValue); } @@ -1369,7 +1370,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(filtered1.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); Assert::AreEqual(1U, result.nValue); // Nibble_Upper no longer matches, but Nibble_Lower does. Neither should not be returned. @@ -1386,7 +1387,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(filtered3.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); Assert::AreEqual(1U, result.nValue); } @@ -1425,7 +1426,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results3.GetMatchingAddress(0U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x16U, result.nValue); } @@ -1440,7 +1441,7 @@ TEST_CLASS(SearchResults_Tests) Assert::AreEqual({ 3U }, results1.MatchingAddressCount()); // exclude doesn't do anything to unfiltered results - const SearchResult excludeResult{ 1U, 0U, MemSize::EightBit }; + const SearchResult excludeResult{ 1U, 0U, ra::data::Memory::Size::EightBit }; results1.ExcludeResult(excludeResult); Assert::AreEqual({ 3U }, results1.MatchingAddressCount()); @@ -1467,7 +1468,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x55U, result.nValue); } @@ -1482,7 +1483,7 @@ TEST_CLASS(SearchResults_Tests) Assert::AreEqual({ 6U }, results1.MatchingAddressCount()); // exclude doesn't do anything to unfiltered results - SearchResult excludeResult{ 1U, 0U, MemSize::Nibble_Lower }; + SearchResult excludeResult{ 1U, 0U, ra::data::Memory::Size::Nibble_Lower }; results1.ExcludeResult(excludeResult); Assert::AreEqual({ 6U }, results1.MatchingAddressCount()); @@ -1509,11 +1510,11 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(0x5U, result.nValue); excludeResult.nAddress = 2; - excludeResult.nSize = MemSize::Nibble_Upper; + excludeResult.nSize = ra::data::Memory::Size::Nibble_Upper; results.ExcludeResult(excludeResult); Assert::AreEqual({ 1U }, results.MatchingAddressCount()); Assert::IsFalse(results.ContainsAddress(0U)); @@ -1524,7 +1525,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); Assert::AreEqual(0x5U, result.nValue); } @@ -1539,7 +1540,7 @@ TEST_CLASS(SearchResults_Tests) Assert::AreEqual({ 2U }, results1.MatchingAddressCount()); // exclude doesn't do anything to unfiltered results - const SearchResult excludeResult{ 0U, 0U, MemSize::EightBit }; + const SearchResult excludeResult{ 0U, 0U, ra::data::Memory::Size::EightBit }; results1.ExcludeResult(excludeResult); Assert::AreEqual({ 2U }, results1.MatchingAddressCount()); @@ -1566,7 +1567,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0xAB55U, result.nValue); } @@ -1591,17 +1592,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(MAX_BLOCK_SIZE - 1, result)); Assert::AreEqual(MAX_BLOCK_SIZE - 1, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xFFU, result.nValue); Assert::IsTrue(results.GetMatchingAddress(MAX_BLOCK_SIZE, result)); Assert::AreEqual(MAX_BLOCK_SIZE, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x00U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(BIG_BLOCK_SIZE - 1, result)); Assert::AreEqual(BIG_BLOCK_SIZE - 1, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0xFFU, result.nValue); memory.reset(); @@ -1628,17 +1629,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(MAX_BLOCK_SIZE - 1, result)); Assert::AreEqual(MAX_BLOCK_SIZE - 1, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x00FFU, result.nValue); Assert::IsTrue(results.GetMatchingAddress(MAX_BLOCK_SIZE, result)); Assert::AreEqual(MAX_BLOCK_SIZE, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0x0100U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(BIG_BLOCK_SIZE - 2, result)); Assert::AreEqual(BIG_BLOCK_SIZE - 2, result.nAddress); - Assert::AreEqual(MemSize::SixteenBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, result.nSize); Assert::AreEqual(0xFFFEU, result.nValue); memory.reset(); @@ -1681,12 +1682,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Text, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Text, result.nSize); Assert::AreEqual({ 'S' }, result.nValue); Assert::IsTrue(results.GetMatchingAddress(35U, result)); Assert::AreEqual(35U, result.nAddress); - Assert::AreEqual(MemSize::Text, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Text, result.nSize); Assert::AreEqual({ '.' }, result.nValue); } @@ -1713,12 +1714,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0xC0000000U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0x41460000U, result.nValue); } @@ -1745,12 +1746,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0xC0000000U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0x41460000U, result.nValue); } @@ -1777,12 +1778,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::FloatBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::FloatBigEndian, result.nSize); Assert::AreEqual(0x000000C0U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::FloatBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::FloatBigEndian, result.nSize); Assert::AreEqual(0x00004641U, result.nValue); } @@ -1809,12 +1810,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::FloatBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::FloatBigEndian, result.nSize); Assert::AreEqual(0x000000C0U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::FloatBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::FloatBigEndian, result.nSize); Assert::AreEqual(0x00004641U, result.nValue); } @@ -1844,12 +1845,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::Double32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32, result.nSize); Assert::AreEqual(0xC0000000U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(12U, result)); Assert::AreEqual(12U, result.nAddress); - Assert::AreEqual(MemSize::Double32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32, result.nSize); Assert::AreEqual(0x4028C000U, result.nValue); } @@ -1879,12 +1880,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::Double32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32, result.nSize); Assert::AreEqual(0xC0000000U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(12U, result.nAddress); - Assert::AreEqual(MemSize::Double32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32, result.nSize); Assert::AreEqual(0x4028C000U, result.nValue); } @@ -1914,12 +1915,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Double32BigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32BigEndian, result.nSize); Assert::AreEqual(0x000000C0U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(8U, result)); Assert::AreEqual(8U, result.nAddress); - Assert::AreEqual(MemSize::Double32BigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32BigEndian, result.nSize); Assert::AreEqual(0x00C02840U, result.nValue); } @@ -1949,12 +1950,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Double32BigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32BigEndian, result.nSize); Assert::AreEqual(0x000000C0U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(8U, result.nAddress); - Assert::AreEqual(MemSize::Double32BigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32BigEndian, result.nSize); Assert::AreEqual(0x00C02840U, result.nValue); } @@ -1981,12 +1982,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::MBF32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32, result.nSize); Assert::AreEqual(0x00004687U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::MBF32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32, result.nSize); Assert::AreEqual(0x00008080U, result.nValue); } @@ -2013,12 +2014,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::MBF32LE, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32LE, result.nSize); Assert::AreEqual(0x87460000U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::MBF32LE, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32LE, result.nSize); Assert::AreEqual(0x80800000U, result.nValue); } @@ -2187,7 +2188,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0xC0000000U, result.nValue); } @@ -2212,7 +2213,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0xBF800000U, result.nValue); } @@ -2237,7 +2238,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Float, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Float, result.nSize); Assert::AreEqual(0xBF800000U, result.nValue); } @@ -2262,7 +2263,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::FloatBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::FloatBigEndian, result.nSize); Assert::AreEqual(0x000080BFU, result.nValue); } @@ -2288,7 +2289,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::Double32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32, result.nSize); Assert::AreEqual(0xBFF00000U, result.nValue); } @@ -2314,7 +2315,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(0U, result.nAddress); - Assert::AreEqual(MemSize::Double32BigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::Double32BigEndian, result.nSize); Assert::AreEqual(0x0000F0BFU, result.nValue); } @@ -2336,7 +2337,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::MBF32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32, result.nSize); Assert::AreEqual(0x00008080U, result.nValue); } @@ -2360,7 +2361,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::MBF32, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32, result.nSize); Assert::AreEqual(0x00008000U, result.nValue); } @@ -2382,7 +2383,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::MBF32LE, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32LE, result.nSize); Assert::AreEqual(0x80800000U, result.nValue); } @@ -2406,7 +2407,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::MBF32LE, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::MBF32LE, result.nSize); Assert::AreEqual(0x00800000U, result.nValue); } @@ -2421,7 +2422,7 @@ TEST_CLASS(SearchResults_Tests) Assert::AreEqual({ 3U }, results1.MatchingAddressCount()); // exclude doesn't do anything to unfiltered results - const SearchResult excludeResult{ 0U, 0U, MemSize::EightBit }; + const SearchResult excludeResult{ 0U, 0U, ra::data::Memory::Size::EightBit }; results1.ExcludeResult(excludeResult); Assert::AreEqual({ 3U }, results1.MatchingAddressCount()); @@ -2443,12 +2444,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results3.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x14U, result.nValue); Assert::IsTrue(results3.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x55U, result.nValue); } @@ -2462,10 +2463,10 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(1U, 3U, ra::services::SearchType::EightBit); Assert::AreEqual({ 3U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"0x02"), results1.GetFormattedValue(1U, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"0x34"), results1.GetFormattedValue(2U, MemSize::EightBit)); - Assert::AreEqual(std::wstring(L"0xab"), results1.GetFormattedValue(3U, MemSize::EightBit)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"0x02"), results1.GetFormattedValue(1U, ra::data::Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"0x34"), results1.GetFormattedValue(2U, ra::data::Memory::Size::EightBit)); + Assert::AreEqual(std::wstring(L"0xab"), results1.GetFormattedValue(3U, ra::data::Memory::Size::EightBit)); } TEST_METHOD(TestGetFormattedValueSixteenBit) @@ -2478,10 +2479,10 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(1U, 3U, ra::services::SearchType::SixteenBit); Assert::AreEqual({ 2U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"0x3402"), results1.GetFormattedValue(1U, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L"0xab34"), results1.GetFormattedValue(2U, MemSize::SixteenBit)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(3U, MemSize::SixteenBit)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"0x3402"), results1.GetFormattedValue(1U, ra::data::Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L"0xab34"), results1.GetFormattedValue(2U, ra::data::Memory::Size::SixteenBit)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(3U, ra::data::Memory::Size::SixteenBit)); } TEST_METHOD(TestGetFormattedValueFourBit) @@ -2494,16 +2495,16 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(1U, 3U, ra::services::SearchType::FourBit); Assert::AreEqual({ 6U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, MemSize::Nibble_Lower)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, MemSize::Nibble_Upper)); - Assert::AreEqual(std::wstring(L"0x2"), results1.GetFormattedValue(1U, MemSize::Nibble_Lower)); - Assert::AreEqual(std::wstring(L"0x0"), results1.GetFormattedValue(1U, MemSize::Nibble_Upper)); - Assert::AreEqual(std::wstring(L"0x4"), results1.GetFormattedValue(2U, MemSize::Nibble_Lower)); - Assert::AreEqual(std::wstring(L"0x3"), results1.GetFormattedValue(2U, MemSize::Nibble_Upper)); - Assert::AreEqual(std::wstring(L"0xb"), results1.GetFormattedValue(3U, MemSize::Nibble_Lower)); - Assert::AreEqual(std::wstring(L"0xa"), results1.GetFormattedValue(3U, MemSize::Nibble_Upper)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, MemSize::Nibble_Lower)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, MemSize::Nibble_Upper)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::Nibble_Lower)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::Nibble_Upper)); + Assert::AreEqual(std::wstring(L"0x2"), results1.GetFormattedValue(1U, ra::data::Memory::Size::Nibble_Lower)); + Assert::AreEqual(std::wstring(L"0x0"), results1.GetFormattedValue(1U, ra::data::Memory::Size::Nibble_Upper)); + Assert::AreEqual(std::wstring(L"0x4"), results1.GetFormattedValue(2U, ra::data::Memory::Size::Nibble_Lower)); + Assert::AreEqual(std::wstring(L"0x3"), results1.GetFormattedValue(2U, ra::data::Memory::Size::Nibble_Upper)); + Assert::AreEqual(std::wstring(L"0xb"), results1.GetFormattedValue(3U, ra::data::Memory::Size::Nibble_Lower)); + Assert::AreEqual(std::wstring(L"0xa"), results1.GetFormattedValue(3U, ra::data::Memory::Size::Nibble_Upper)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, ra::data::Memory::Size::Nibble_Lower)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, ra::data::Memory::Size::Nibble_Upper)); } TEST_METHOD(TestGetFormattedValueFloat) @@ -2516,10 +2517,10 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(0U, 8U, ra::services::SearchType::Float); Assert::AreEqual({ 5U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L"-2.0"), results1.GetFormattedValue(0U, MemSize::Float)); - Assert::AreEqual(std::wstring(L"12.375"), results1.GetFormattedValue(4U, MemSize::Float)); - Assert::AreEqual(std::wstring(L"6.88766e-41"), results1.GetFormattedValue(2U, MemSize::Float)); - Assert::AreEqual(std::wstring(L"8192.1875"), results1.GetFormattedValue(3U, MemSize::Float)); + Assert::AreEqual(std::wstring(L"-2.0"), results1.GetFormattedValue(0U, ra::data::Memory::Size::Float)); + Assert::AreEqual(std::wstring(L"12.375"), results1.GetFormattedValue(4U, ra::data::Memory::Size::Float)); + Assert::AreEqual(std::wstring(L"6.88766e-41"), results1.GetFormattedValue(2U, ra::data::Memory::Size::Float)); + Assert::AreEqual(std::wstring(L"8192.1875"), results1.GetFormattedValue(3U, ra::data::Memory::Size::Float)); } TEST_METHOD(TestGetFormattedValueMBF32) @@ -2532,10 +2533,10 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(0U, 8U, ra::services::SearchType::MBF32); Assert::AreEqual({ 5U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L"99.0"), results1.GetFormattedValue(0U, MemSize::MBF32)); - Assert::AreEqual(std::wstring(L"-0.5"), results1.GetFormattedValue(4U, MemSize::MBF32)); - Assert::AreEqual(std::wstring(L"1.47513e-39"), results1.GetFormattedValue(2U, MemSize::MBF32)); - Assert::AreEqual(std::wstring(L"1.73475e-18"), results1.GetFormattedValue(1U, MemSize::MBF32)); + Assert::AreEqual(std::wstring(L"99.0"), results1.GetFormattedValue(0U, ra::data::Memory::Size::MBF32)); + Assert::AreEqual(std::wstring(L"-0.5"), results1.GetFormattedValue(4U, ra::data::Memory::Size::MBF32)); + Assert::AreEqual(std::wstring(L"1.47513e-39"), results1.GetFormattedValue(2U, ra::data::Memory::Size::MBF32)); + Assert::AreEqual(std::wstring(L"1.73475e-18"), results1.GetFormattedValue(1U, ra::data::Memory::Size::MBF32)); } TEST_METHOD(TestMatchesFilterEightBitGreaterThanLast) @@ -2656,7 +2657,7 @@ TEST_CLASS(SearchResults_Tests) Assert::AreEqual({0U}, results.MatchingAddressCount()); - Assert::AreEqual(std::wstring(), results.GetFormattedValue(0U, MemSize::Text)); + Assert::AreEqual(std::wstring(), results.GetFormattedValue(0U, ra::data::Memory::Size::Text)); } TEST_METHOD(TestInitializeFromMemoryBitCount) @@ -2679,17 +2680,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(MemSize::BitCount, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::BitCount, result.nSize); Assert::AreEqual(0x12U, result.nValue); // captured values are raw bytes for GetFormattedValue Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::BitCount, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::BitCount, result.nSize); Assert::AreEqual(0x34U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::BitCount, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::BitCount, result.nSize); Assert::AreEqual(0xABU, result.nValue); } @@ -2718,7 +2719,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(2U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::BitCount, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::BitCount, result.nSize); Assert::AreEqual(0xABU, result.nValue); // no change - tests the "entire block matches" optimization @@ -2735,7 +2736,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results3.GetMatchingAddress(2U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::BitCount, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::BitCount, result.nSize); Assert::AreEqual(0x56U, result.nValue); } @@ -2765,7 +2766,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results2.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::BitCount, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::BitCount, result.nSize); Assert::AreEqual(0x55U, result.nValue); } @@ -2779,11 +2780,11 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(0U, 8U, ra::services::SearchType::BitCount); Assert::AreEqual({ 5U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L"0 (00000000)"), results1.GetFormattedValue(0U, MemSize::BitCount)); - Assert::AreEqual(std::wstring(L"2 (00010010)"), results1.GetFormattedValue(1U, MemSize::BitCount)); - Assert::AreEqual(std::wstring(L"3 (00110100)"), results1.GetFormattedValue(2U, MemSize::BitCount)); - Assert::AreEqual(std::wstring(L"5 (10101011)"), results1.GetFormattedValue(3U, MemSize::BitCount)); - Assert::AreEqual(std::wstring(L"4 (01010110)"), results1.GetFormattedValue(4U, MemSize::BitCount)); + Assert::AreEqual(std::wstring(L"0 (00000000)"), results1.GetFormattedValue(0U, ra::data::Memory::Size::BitCount)); + Assert::AreEqual(std::wstring(L"2 (00010010)"), results1.GetFormattedValue(1U, ra::data::Memory::Size::BitCount)); + Assert::AreEqual(std::wstring(L"3 (00110100)"), results1.GetFormattedValue(2U, ra::data::Memory::Size::BitCount)); + Assert::AreEqual(std::wstring(L"5 (10101011)"), results1.GetFormattedValue(3U, ra::data::Memory::Size::BitCount)); + Assert::AreEqual(std::wstring(L"4 (01010110)"), results1.GetFormattedValue(4U, ra::data::Memory::Size::BitCount)); memory.at(3) = 0x3B; // still 5 bits, but different value @@ -2801,8 +2802,8 @@ TEST_CLASS(SearchResults_Tests) mockEmulatorContext.MockMemory(memory); std::vector vResults; - vResults.push_back({2, 0x07, MemSize::Unknown}); - vResults.push_back({3, 0x16, MemSize::Unknown}); + vResults.push_back({2, 0x07, ra::data::Memory::Size::Unknown}); + vResults.push_back({3, 0x16, ra::data::Memory::Size::Unknown}); SearchResults results; results.Initialize(vResults, ra::services::SearchType::EightBit); @@ -2818,12 +2819,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x07U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(MemSize::EightBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::EightBit, result.nSize); Assert::AreEqual(0x16U, result.nValue); } @@ -2834,9 +2835,9 @@ TEST_CLASS(SearchResults_Tests) mockEmulatorContext.MockMemory(memory); std::vector vResults; - vResults.push_back({2, 0x12345678, MemSize::Unknown}); - vResults.push_back({4, 0x55551234, MemSize::Unknown}); - vResults.push_back({12, 0xdeadbeef, MemSize::Unknown}); + vResults.push_back({2, 0x12345678, ra::data::Memory::Size::Unknown}); + vResults.push_back({4, 0x55551234, ra::data::Memory::Size::Unknown}); + vResults.push_back({12, 0xdeadbeef, ra::data::Memory::Size::Unknown}); SearchResults results; results.Initialize(vResults, ra::services::SearchType::ThirtyTwoBit); @@ -2852,17 +2853,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x12345678U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x55551234U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(12U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0xdeadbeefU, result.nValue); } @@ -2873,9 +2874,9 @@ TEST_CLASS(SearchResults_Tests) mockEmulatorContext.MockMemory(memory); std::vector vResults; - vResults.push_back({2, 0x12345678, MemSize::Unknown}); // not aligned - should be ignored - vResults.push_back({4, 0x55551234, MemSize::Unknown}); - vResults.push_back({12, 0xdeadbeef, MemSize::Unknown}); + vResults.push_back({2, 0x12345678, ra::data::Memory::Size::Unknown}); // not aligned - should be ignored + vResults.push_back({4, 0x55551234, ra::data::Memory::Size::Unknown}); + vResults.push_back({12, 0xdeadbeef, ra::data::Memory::Size::Unknown}); SearchResults results; results.Initialize(vResults, ra::services::SearchType::ThirtyTwoBitAligned); @@ -2891,12 +2892,12 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0x55551234U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(12U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBit, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, result.nSize); Assert::AreEqual(0xdeadbeefU, result.nValue); } @@ -2907,9 +2908,9 @@ TEST_CLASS(SearchResults_Tests) mockEmulatorContext.MockMemory(memory); std::vector vResults; - vResults.push_back({2, 0x12345678, MemSize::Unknown}); - vResults.push_back({4, 0x56785555, MemSize::Unknown}); - vResults.push_back({12, 0xdeadbeef, MemSize::Unknown}); + vResults.push_back({2, 0x12345678, ra::data::Memory::Size::Unknown}); + vResults.push_back({4, 0x56785555, ra::data::Memory::Size::Unknown}); + vResults.push_back({12, 0xdeadbeef, ra::data::Memory::Size::Unknown}); SearchResults results; results.Initialize(vResults, ra::services::SearchType::ThirtyTwoBitBigEndian); @@ -2925,17 +2926,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x12345678U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(4U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0x56785555U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(12U, result.nAddress); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, result.nSize); Assert::AreEqual(0xdeadbeefU, result.nValue); } diff --git a/tests/ui/viewmodels/AssetEditorViewModel_Tests.cpp b/tests/ui/viewmodels/AssetEditorViewModel_Tests.cpp index 7b3c79870..e3ad578a7 100644 --- a/tests/ui/viewmodels/AssetEditorViewModel_Tests.cpp +++ b/tests/ui/viewmodels/AssetEditorViewModel_Tests.cpp @@ -13,6 +13,7 @@ #include "tests\devkit\context\mocks\MockRcClient.hh" #include "tests\devkit\services\mocks\MockFileSystem.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockAchievementRuntime.hh" #include "tests\mocks\MockClipboard.hh" #include "tests\mocks\MockClock.hh" @@ -1355,11 +1356,11 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); auto* pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::Equals, (int)pCondition->GetOperator()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pCondition->GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pCondition->GetTargetSize()); Assert::AreEqual((int)TriggerOperandType::Value, (int)pCondition->GetTargetType()); Assert::AreEqual(std::wstring(L"1"), pCondition->GetTargetValue()); @@ -1377,11 +1378,11 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::Equals, (int)pCondition->GetOperator()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pCondition->GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pCondition->GetTargetSize()); Assert::AreEqual((int)TriggerOperandType::Value, (int)pCondition->GetTargetType()); Assert::AreEqual(std::wstring(L"2"), pCondition->GetTargetValue()); } @@ -1401,11 +1402,11 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); auto* pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::Equals, (int)pCondition->GetOperator()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pCondition->GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pCondition->GetTargetSize()); Assert::AreEqual((int)TriggerOperandType::Value, (int)pCondition->GetTargetType()); Assert::AreEqual(std::wstring(L"1"), pCondition->GetTargetValue()); @@ -1418,11 +1419,11 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::Equals, (int)pCondition->GetOperator()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pCondition->GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pCondition->GetTargetSize()); Assert::AreEqual((int)TriggerOperandType::Value, (int)pCondition->GetTargetType()); Assert::AreEqual(std::wstring(L"2"), pCondition->GetTargetValue()); } @@ -1446,11 +1447,11 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); auto* pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::Equals, (int)pCondition->GetOperator()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pCondition->GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pCondition->GetTargetSize()); Assert::AreEqual((int)TriggerOperandType::Value, (int)pCondition->GetTargetType()); Assert::AreEqual(std::wstring(L"1"), pCondition->GetTargetValue()); @@ -1468,11 +1469,11 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::Equals, (int)pCondition->GetOperator()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pCondition->GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pCondition->GetTargetSize()); Assert::AreEqual((int)TriggerOperandType::Value, (int)pCondition->GetTargetType()); Assert::AreEqual(std::wstring(L"2"), pCondition->GetTargetValue()); } @@ -1726,7 +1727,7 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); auto* pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x1234"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::None, (int)pCondition->GetOperator()); @@ -1745,7 +1746,7 @@ TEST_CLASS(AssetEditorViewModel_Tests) Assert::AreEqual({ 1U }, editor.Trigger().Conditions().Count()); pCondition = editor.Trigger().Conditions().GetItemAt(0); Expects(pCondition != nullptr); - Assert::AreEqual(MemSize::EightBit, pCondition->GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pCondition->GetSourceSize()); Assert::AreEqual((int)TriggerOperandType::Address, (int)pCondition->GetSourceType()); Assert::AreEqual(std::wstring(L"0x2222"), pCondition->GetSourceValue()); Assert::AreEqual((int)TriggerOperatorType::None, (int)pCondition->GetOperator()); diff --git a/tests/ui/viewmodels/AssetListViewModel_Tests.cpp b/tests/ui/viewmodels/AssetListViewModel_Tests.cpp index 4c35086c8..eff493259 100644 --- a/tests/ui/viewmodels/AssetListViewModel_Tests.cpp +++ b/tests/ui/viewmodels/AssetListViewModel_Tests.cpp @@ -4567,7 +4567,7 @@ TEST_CLASS(AssetListViewModel_Tests) return DialogResult::Yes; }); - constexpr ra::ByteAddress nAddress = 0x02; + constexpr ra::data::ByteAddress nAddress = 0x02; vmAssetList.mockWindowManager.MemoryInspector.SetCurrentAddress(nAddress); vmAssetList.mockWindowManager.MemoryInspector.SetCurrentAddressNote(L"foo"); Assert::IsTrue(vmAssetList.mockWindowManager.MemoryInspector.IsNoteUncommitted()); diff --git a/tests/ui/viewmodels/CodeNotesViewModel_Tests.cpp b/tests/ui/viewmodels/CodeNotesViewModel_Tests.cpp index 9637e3635..8408d6653 100644 --- a/tests/ui/viewmodels/CodeNotesViewModel_Tests.cpp +++ b/tests/ui/viewmodels/CodeNotesViewModel_Tests.cpp @@ -7,6 +7,7 @@ #include "tests\ui\UIAsserts.hh" #include "tests\RA_UnitTestHelpers.h" #include "tests\devkit\services\mocks\MockThreadPool.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" #include "tests\mocks\MockDesktop.hh" @@ -100,14 +101,14 @@ TEST_CLASS(CodeNotesViewModel_Tests) mockThreadPool.SetSynchronous(true); } - const std::vector& GetPublishedAddresses() const noexcept { return m_nPublishedAddresses; } + const std::vector& GetPublishedAddresses() const noexcept { return m_nPublishedAddresses; } private: ra::services::ServiceLocator::ServiceOverride m_themeOverride; - std::vector m_nPublishedAddresses; + std::vector m_nPublishedAddresses; }; - void AssertRow(CodeNotesViewModelHarness& notes, gsl::index nRow, ra::ByteAddress nAddress, + void AssertRow(CodeNotesViewModelHarness& notes, gsl::index nRow, ra::data::ByteAddress nAddress, const wchar_t* sAddress, const wchar_t* sNote) { auto* pRow = notes.Notes().GetItemAt(nRow); @@ -618,13 +619,13 @@ TEST_CLASS(CodeNotesViewModel_Tests) const auto& pBookmarks = notes.mockWindowManager.MemoryBookmarks.Bookmarks(); Assert::AreEqual({ 4U }, pBookmarks.Items().Count()); Assert::AreEqual({ 0x0010U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); Assert::AreEqual({ 0x0016U }, pBookmarks.Items().GetItemAt(1)->GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pBookmarks.Items().GetItemAt(1)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pBookmarks.Items().GetItemAt(1)->GetSize()); Assert::AreEqual({ 0x0022U }, pBookmarks.Items().GetItemAt(2)->GetAddress()); - Assert::AreEqual(MemSize::SixteenBit, pBookmarks.Items().GetItemAt(2)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, pBookmarks.Items().GetItemAt(2)->GetSize()); Assert::AreEqual({ 0x0040U }, pBookmarks.Items().GetItemAt(3)->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pBookmarks.Items().GetItemAt(3)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pBookmarks.Items().GetItemAt(3)->GetSize()); notes.mockGameContext.SetCodeNote(0x0016, L"[32-bit BE] Score"); notes.Notes().GetItemAt(0)->SetSelected(false); @@ -634,7 +635,7 @@ TEST_CLASS(CodeNotesViewModel_Tests) notes.BookmarkSelected(); Assert::AreEqual({ 5U }, pBookmarks.Items().Count()); Assert::AreEqual({ 0x0016U }, pBookmarks.Items().GetItemAt(4)->GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, pBookmarks.Items().GetItemAt(4)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, pBookmarks.Items().GetItemAt(4)->GetSize()); } TEST_METHOD(TestModifiedIndicator) diff --git a/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp b/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp index fd6c6499f..b58f38f15 100644 --- a/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp @@ -8,6 +8,7 @@ #include "tests\devkit\context\mocks\MockRcClient.hh" #include "tests\devkit\services\mocks\MockFileSystem.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockAchievementRuntime.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" @@ -117,8 +118,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"desc"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Dec, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetPreviousValue()); @@ -143,8 +144,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"desc"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Dec, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetPreviousValue()); @@ -169,8 +170,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"desc"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Dec, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetPreviousValue()); @@ -205,8 +206,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"desc3"), bookmark.GetDescription()); Assert::AreEqual(5555U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::SixteenBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0000"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0000"), bookmark.GetPreviousValue()); @@ -252,8 +253,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsFalse(bookmark.IsCustomDescription()); } @@ -274,8 +275,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"[8-bit] Selected Character\r\n1=Bob\r\n2=Jane"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"Selected Character"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsFalse(bookmark.IsCustomDescription()); bookmark.SetDescription(L"Primary Character"); @@ -283,8 +284,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"[8-bit] Selected Character\r\n1=Bob\r\n2=Jane"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"Primary Character"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsTrue(bookmark.IsCustomDescription()); bookmark.SetDescription(L"Selected Character"); @@ -292,8 +293,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"[8-bit] Selected Character\r\n1=Bob\r\n2=Jane"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"Selected Character"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsFalse(bookmark.IsCustomDescription()); } @@ -313,8 +314,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"desc"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsTrue(bookmark.IsCustomDescription()); } @@ -335,8 +336,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"desc"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsTrue(bookmark.IsCustomDescription()); } @@ -357,8 +358,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsFalse(bookmark.IsCustomDescription()); } @@ -377,7 +378,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) for (gsl::index nIndex = 0; nIndex < gsl::narrow_cast(bookmarks.Bookmarks().Sizes().Count()); ++nIndex) { - const auto nSize = ra::itoe(bookmarks.Bookmarks().Sizes().GetItemAt(nIndex)->GetId()); + const auto nSize = ra::itoe(bookmarks.Bookmarks().Sizes().GetItemAt(nIndex)->GetId()); Assert::AreEqual({ 0U }, bookmarks.Bookmarks().Items().Count()); bookmarks.AddBookmark(1234U, nSize); @@ -411,7 +412,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyActiveGameChanged(); bookmarks.mockGameContext.NotifyGameLoad(); - bookmarks.AddBookmark(2345U, MemSize::SixteenBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::SixteenBit); Assert::IsTrue(bookmarks.IsModified()); bookmarks.mockGameContext.SetGameId(0U); @@ -435,7 +436,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyActiveGameChanged(); bookmarks.mockGameContext.NotifyGameLoad(); - bookmarks.AddBookmark(2345U, MemSize::SixteenBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::SixteenBit); bookmarks.GetBookmark(0)->SetDescription(L""); // explicit blank resets to default note bookmarks.GetBookmark(1)->SetDescription(L"Custom2"); // no backing note Assert::IsTrue(bookmarks.IsModified()); @@ -462,7 +463,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyActiveGameChanged(); bookmarks.mockGameContext.NotifyGameLoad(); - bookmarks.GetBookmark(0)->SetFormat(MemFormat::Dec); + bookmarks.GetBookmark(0)->SetFormat(ra::data::Memory::Format::Dec); Assert::IsTrue(bookmarks.IsModified()); bookmarks.mockGameContext.SetGameId(0U); @@ -487,9 +488,9 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.AddBookmark("I:0xG005c7d80&536870911_M:fH00000038"); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); - Assert::AreEqual(MemSize::Double32, bookmarks.GetBookmark(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::Double32, bookmarks.GetBookmark(0)->GetSize()); - bookmarks.GetBookmark(0)->SetSize(MemSize::Double32BigEndian); + bookmarks.GetBookmark(0)->SetSize(ra::data::Memory::Size::Double32BigEndian); Assert::IsTrue(bookmarks.IsModified()); bookmarks.mockGameContext.SetGameId(0U); @@ -519,8 +520,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), bookmark->GetRealNote()); Assert::AreEqual(std::wstring(L"Note description"), bookmark->GetDescription()); Assert::AreEqual(1234U, bookmark->GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark->GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark->GetFormat()); Assert::IsFalse(bookmark->IsCustomDescription()); bookmarks.mockGameContext.SetCodeNote(1234U, L"New description"); @@ -531,8 +532,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"New description"), bookmark->GetRealNote()); Assert::AreEqual(std::wstring(L"New description"), bookmark->GetDescription()); Assert::AreEqual(1234U, bookmark->GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark->GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark->GetFormat()); Assert::IsFalse(bookmark->IsCustomDescription()); } @@ -554,8 +555,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), bookmark->GetRealNote()); Assert::AreEqual(std::wstring(L"My Description"), bookmark->GetDescription()); Assert::AreEqual(1234U, bookmark->GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark->GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark->GetFormat()); Assert::IsTrue(bookmark->IsCustomDescription()); bookmarks.mockGameContext.SetCodeNote(1234U, L"New description"); @@ -566,8 +567,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"New description"), bookmark->GetRealNote()); Assert::AreEqual(std::wstring(L"My Description"), bookmark->GetDescription()); Assert::AreEqual(1234U, bookmark->GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark->GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark->GetFormat()); Assert::IsTrue(bookmark->IsCustomDescription()); bookmarks.mockGameContext.SetCodeNote(1234U, L"My Description"); @@ -578,8 +579,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"My Description"), bookmark->GetRealNote()); Assert::AreEqual(std::wstring(L"My Description"), bookmark->GetDescription()); Assert::AreEqual(1234U, bookmark->GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark->GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark->GetFormat()); Assert::IsFalse(bookmark->IsCustomDescription()); bookmarks.mockGameContext.SetCodeNote(1234U, L"New description"); @@ -590,8 +591,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"New description"), bookmark->GetRealNote()); Assert::AreEqual(std::wstring(L"New description"), bookmark->GetDescription()); Assert::AreEqual(1234U, bookmark->GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark->GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark->GetFormat()); Assert::IsFalse(bookmark->IsCustomDescription()); } @@ -653,14 +654,14 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestAddBookmark) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"00"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"00"), bookmark.GetPreviousValue()); @@ -674,14 +675,14 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) MemoryBookmarksViewModelHarness bookmarks; bookmarks.mockGameContext.SetCodeNote(2345U, L"NOTE"); - bookmarks.AddBookmark(2345U, MemSize::SixteenBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::SixteenBit); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L"NOTE"), bookmark.GetRealNote()); Assert::AreEqual(2345U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::SixteenBit, bookmark.GetSize()); - Assert::AreEqual(MemFormat::Dec, bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetPreviousValue()); @@ -695,14 +696,14 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) MemoryBookmarksViewModelHarness bookmarks; bookmarks.mockGameContext.SetCodeNote(2345U, L"NOTE (BCD)"); - bookmarks.AddBookmark(2345U, MemSize::SixteenBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::SixteenBit); Assert::AreEqual({1U}, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L"NOTE (BCD)"), bookmark.GetRealNote()); Assert::AreEqual(2345U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::SixteenBit, bookmark.GetSize()); - Assert::AreEqual(MemFormat::Hex, bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0000"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0000"), bookmark.GetPreviousValue()); @@ -715,14 +716,14 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) { MemoryBookmarksViewModelHarness bookmarks; bookmarks.mockConfiguration.SetFeatureEnabled(ra::services::Feature::PreferDecimal, true); - bookmarks.AddBookmark(5678U, MemSize::ThirtyTwoBit); + bookmarks.AddBookmark(5678U, ra::data::Memory::Size::ThirtyTwoBit); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(5678U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBit, bookmark.GetSize()); - Assert::AreEqual(MemFormat::Dec, bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0"), bookmark.GetPreviousValue()); @@ -734,9 +735,9 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestRemoveBookmark) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); - bookmarks.AddBookmark(2345U, MemSize::EightBit); - bookmarks.AddBookmark(4567U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(4567U, ra::data::Memory::Size::EightBit); bookmarks.GetBookmark(1)->SetSelected(true); bookmarks.ResetModified(); @@ -752,10 +753,10 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestRemoveBookmarkMultiple) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); - bookmarks.AddBookmark(2345U, MemSize::EightBit); - bookmarks.AddBookmark(4567U, MemSize::EightBit); - bookmarks.AddBookmark(6789U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(4567U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(6789U, ra::data::Memory::Size::EightBit); bookmarks.GetBookmark(1)->SetSelected(true); bookmarks.GetBookmark(3)->SetSelected(true); bookmarks.ResetModified(); @@ -772,9 +773,9 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestRemoveBookmarkNone) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); - bookmarks.AddBookmark(2345U, MemSize::EightBit); - bookmarks.AddBookmark(4567U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(4567U, ra::data::Memory::Size::EightBit); bookmarks.ResetModified(); Assert::AreEqual(0, bookmarks.RemoveSelectedBookmarks()); @@ -790,10 +791,10 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestToggleFreezeSelected) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); - bookmarks.AddBookmark(2345U, MemSize::EightBit); - bookmarks.AddBookmark(4567U, MemSize::EightBit); - bookmarks.AddBookmark(6789U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(4567U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(6789U, ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"Freeze"), bookmarks.GetFreezeButtonText()); // no selected items are frozen - freeze them all @@ -842,10 +843,10 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestTogglePauseSelected) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); - bookmarks.AddBookmark(2345U, MemSize::EightBit); - bookmarks.AddBookmark(4567U, MemSize::EightBit); - bookmarks.AddBookmark(6789U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(4567U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(6789U, ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"Pause"), bookmarks.GetPauseButtonText()); Assert::IsFalse(bookmarks.Bookmarks().HasSelection()); @@ -929,8 +930,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"Note description"), bookmark.GetDescription()); Assert::AreEqual(1234U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::EightBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); } TEST_METHOD(TestLoadBookmarkFileCancel) @@ -976,7 +977,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyActiveGameChanged(); bookmarks.mockGameContext.NotifyGameLoad(); - bookmarks.AddBookmark(2345U, MemSize::SixteenBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::SixteenBit); Assert::IsTrue(bookmarks.IsModified()); bool bDialogSeen = false; @@ -1015,7 +1016,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyActiveGameChanged(); bookmarks.mockGameContext.NotifyGameLoad(); - bookmarks.AddBookmark(2345U, MemSize::SixteenBit); + bookmarks.AddBookmark(2345U, ra::data::Memory::Size::SixteenBit); Assert::IsTrue(bookmarks.IsModified()); bool bDialogSeen = false; @@ -1045,7 +1046,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestBehaviorColoring) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(1234U, MemSize::EightBit); + bookmarks.AddBookmark(1234U, ra::data::Memory::Size::EightBit); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); auto& bookmark = *bookmarks.GetBookmark(0); @@ -1072,9 +1073,9 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestPauseOnChange) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(4U, MemSize::EightBit); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::EightBit); auto& bookmark1 = *bookmarks.GetBookmark(0); - bookmarks.AddBookmark(5U, MemSize::EightBit); + bookmarks.AddBookmark(5U, ra::data::Memory::Size::EightBit); auto& bookmark2 = *bookmarks.GetBookmark(1); std::array memory = {}; @@ -1125,7 +1126,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestPauseOnChange16Bit) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(4U, MemSize::SixteenBit); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::SixteenBit); auto& bookmark1 = *bookmarks.GetBookmark(0); std::array memory = {}; @@ -1161,7 +1162,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestPauseOnChangeShortDescription) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(4U, MemSize::EightBit); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::EightBit); auto& bookmark1 = *bookmarks.GetBookmark(0); bookmark1.SetRealNote(L"Short Description"); @@ -1184,7 +1185,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestPauseOnChangeLongDescription) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(4U, MemSize::EightBit); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::EightBit); auto& bookmark1 = *bookmarks.GetBookmark(0); bookmark1.SetRealNote(L"This description is long enough that it will be truncated at the nearest word"); @@ -1207,7 +1208,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestPauseOnChangeMultilineDescription) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(4U, MemSize::EightBit); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::EightBit); auto& bookmark1 = *bookmarks.GetBookmark(0); bookmark1.SetRealNote(L"Level:\n0x0F=1-1\n0x13=1-2\n0x14=1-3"); @@ -1240,12 +1241,12 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyActiveGameChanged(); bookmarks.mockGameContext.NotifyGameLoad(); - bookmarks.AddBookmark(1, MemSize::ThirtyTwoBit); - bookmarks.AddBookmark(2, MemSize::TwentyFourBit); - bookmarks.AddBookmark(3, MemSize::SixteenBit); - bookmarks.AddBookmark(4, MemSize::EightBit); - bookmarks.AddBookmark(4, MemSize::SixteenBit); - bookmarks.AddBookmark(5, MemSize::EightBit); + bookmarks.AddBookmark(1, ra::data::Memory::Size::ThirtyTwoBit); + bookmarks.AddBookmark(2, ra::data::Memory::Size::TwentyFourBit); + bookmarks.AddBookmark(3, ra::data::Memory::Size::SixteenBit); + bookmarks.AddBookmark(4, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(4, ra::data::Memory::Size::SixteenBit); + bookmarks.AddBookmark(5, ra::data::Memory::Size::EightBit); const auto& bookmark1 = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L"04030201"), bookmark1.GetCurrentValue()); @@ -1315,7 +1316,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) TEST_METHOD(TestUpdateCurrentValueOnSizeChange) { MemoryBookmarksViewModelHarness bookmarks; - bookmarks.AddBookmark(4U, MemSize::SixteenBit); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::SixteenBit); auto& bookmark1 = *bookmarks.GetBookmark(0); std::array memory = {}; @@ -1335,12 +1336,12 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"0504"), bookmark1.GetPreviousValue()); Assert::AreEqual(1U, bookmark1.GetChanges()); - bookmark1.SetSize(MemSize::EightBit); + bookmark1.SetSize(ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"04"), bookmark1.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0504"), bookmark1.GetPreviousValue()); Assert::AreEqual(1U, bookmark1.GetChanges()); - bookmark1.SetSize(MemSize::ThirtyTwoBit); + bookmark1.SetSize(ra::data::Memory::Size::ThirtyTwoBit); Assert::AreEqual(std::wstring(L"07061704"), bookmark1.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0504"), bookmark1.GetPreviousValue()); Assert::AreEqual(1U, bookmark1.GetChanges()); @@ -1353,14 +1354,14 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) std::array memory = {}; bookmarks.mockEmulatorContext.MockMemory(memory); - bookmarks.AddBookmark(1U, MemSize::Float); + bookmarks.AddBookmark(1U, ra::data::Memory::Size::Float); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(1U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::Float, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::Float, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0.0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), bookmark.GetPreviousValue()); @@ -1389,15 +1390,15 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) std::array memory = {}; bookmarks.mockEmulatorContext.MockMemory(memory); - bookmarks.AddBookmark(4U, MemSize::Double32); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::Double32); // without a code note, assume the user is bookmarking the 4 significant bytes Assert::AreEqual({1U}, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(4U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::Double32, bookmark.GetSize()); - Assert::AreEqual(MemFormat::Hex, bookmark.GetFormat()); // default to user preference + Assert::AreEqual(ra::data::Memory::Size::Double32, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); // default to user preference Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L"0.0"), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), bookmark.GetPreviousValue()); @@ -1412,13 +1413,13 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) // with a code note, align the bookmark to the 4 significant bytes bookmarks.mockGameContext.SetCodeNote(8U, L"[double] Note description"); - bookmarks.AddBookmark(8U, MemSize::Double32); + bookmarks.AddBookmark(8U, ra::data::Memory::Size::Double32); Assert::AreEqual({2U}, bookmarks.Bookmarks().Items().Count()); const auto& bookmark2 = *bookmarks.GetBookmark(1); Assert::AreEqual(std::wstring(L"[double] Note description"), bookmark2.GetRealNote()); Assert::AreEqual(12U, bookmark2.GetAddress()); // adjusted to significant bytes - Assert::AreEqual(MemSize::Double32, bookmark2.GetSize()); - Assert::AreEqual(MemFormat::Dec, bookmark2.GetFormat()); // implied from note + Assert::AreEqual(ra::data::Memory::Size::Double32, bookmark2.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark2.GetFormat()); // implied from note Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark2.GetBehavior()); Assert::AreEqual(std::wstring(L"0.0"), bookmark2.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), bookmark2.GetPreviousValue()); @@ -1431,13 +1432,13 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(1U, bookmark2.GetChanges()); // does not exactly match code note address, assume the user is bookmarking the most significant bytes - bookmarks.AddBookmark(12U, MemSize::Double32); + bookmarks.AddBookmark(12U, ra::data::Memory::Size::Double32); Assert::AreEqual({3U}, bookmarks.Bookmarks().Items().Count()); const auto& bookmark3 = *bookmarks.GetBookmark(2); Assert::AreEqual(std::wstring(L""), bookmark3.GetRealNote()); Assert::AreEqual(12U, bookmark3.GetAddress()); // adjusted to significant bytes - Assert::AreEqual(MemSize::Double32, bookmark3.GetSize()); - Assert::AreEqual(MemFormat::Hex, bookmark3.GetFormat()); // default to preference + Assert::AreEqual(ra::data::Memory::Size::Double32, bookmark3.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark3.GetFormat()); // default to preference Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark3.GetBehavior()); Assert::AreEqual(std::wstring(L"-2.0"), bookmark3.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), bookmark3.GetPreviousValue()); @@ -1451,13 +1452,13 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) std::array memory = {}; bookmarks.mockEmulatorContext.MockMemory(memory); - bookmarks.AddBookmark(1U, MemSize::Text); + bookmarks.AddBookmark(1U, ra::data::Memory::Size::Text); Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L""), bookmark.GetRealNote()); Assert::AreEqual(1U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::Text, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::Text, bookmark.GetSize()); Assert::AreEqual(MemoryBookmarksViewModel::BookmarkBehavior::None, bookmark.GetBehavior()); Assert::AreEqual(std::wstring(L""), bookmark.GetCurrentValue()); Assert::AreEqual(std::wstring(L""), bookmark.GetPreviousValue()); @@ -1499,9 +1500,9 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) std::array memory = {}; bookmarks.mockEmulatorContext.MockMemory(memory); - bookmarks.AddBookmark(1U, MemSize::EightBit); - bookmarks.AddBookmark(1U, MemSize::SixteenBit); - bookmarks.AddBookmark(1U, MemSize::Bit_3); + bookmarks.AddBookmark(1U, ra::data::Memory::Size::EightBit); + bookmarks.AddBookmark(1U, ra::data::Memory::Size::SixteenBit); + bookmarks.AddBookmark(1U, ra::data::Memory::Size::Bit_3); Assert::AreEqual({ 3U }, bookmarks.Bookmarks().Items().Count()); auto& bookmark1 = *bookmarks.GetBookmark(0); @@ -1550,9 +1551,9 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) std::array memory = {}; bookmarks.mockEmulatorContext.MockMemory(memory); - bookmarks.AddBookmark(4U, MemSize::Float); - bookmarks.AddBookmark(8U, MemSize::MBF32); - bookmarks.AddBookmark(12U, MemSize::Double32); + bookmarks.AddBookmark(4U, ra::data::Memory::Size::Float); + bookmarks.AddBookmark(8U, ra::data::Memory::Size::MBF32); + bookmarks.AddBookmark(12U, ra::data::Memory::Size::Double32); Assert::AreEqual({ 3U }, bookmarks.Bookmarks().Items().Count()); auto& bookmark1 = *bookmarks.GetBookmark(0); @@ -1617,8 +1618,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) const auto& bookmark = *bookmarks.GetBookmark(0); Assert::AreEqual(std::wstring(L"data here"), bookmark.GetRealNote()); Assert::AreEqual(0x28U, bookmark.GetAddress()); // $0020=0x20, 0x20+8 = 0x28 - Assert::AreEqual(MemSize::TwentyFourBit, bookmark.GetSize()); - Assert::AreEqual(MemFormat::Dec, bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::TwentyFourBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Dec, bookmark.GetFormat()); Assert::AreEqual(std::wstring(L"2752552"), bookmark.GetCurrentValue()); // 0x2a0028 = 2752552 Assert::IsTrue(bookmark.IsIndirectAddress()); Assert::AreEqual(std::string("I:0x 0020_M:0xW0008"), bookmark.GetIndirectAddress()); @@ -1669,8 +1670,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"data here"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"data here"), bookmark.GetDescription()); Assert::AreEqual(0x10+8U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::TwentyFourBit, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::TwentyFourBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsTrue(bookmark.IsIndirectAddress()); Assert::AreEqual(std::string("I:0x 0020_M:0xW0008"), bookmark.GetIndirectAddress()); } @@ -1750,8 +1751,8 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual(std::wstring(L"data here"), bookmark.GetRealNote()); Assert::AreEqual(std::wstring(L"data here"), bookmark.GetDescription()); Assert::AreEqual(0x10 + 8U, bookmark.GetAddress()); - Assert::AreEqual(MemSize::Text, bookmark.GetSize()); - Assert::AreEqual((int)MemFormat::Hex, (int)bookmark.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::Text, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, bookmark.GetFormat()); Assert::IsTrue(bookmark.IsIndirectAddress()); Assert::AreEqual(std::string("I:0x 0020_M:0xW0008"), bookmark.GetIndirectAddress()); } @@ -1769,7 +1770,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.mockGameContext.NotifyGameLoad(); bookmarks.AddBookmark("I:0xX1234_M:0xG0004"); - bookmarks.GetBookmark(1)->SetSize(MemSize::Text); + bookmarks.GetBookmark(1)->SetSize(ra::data::Memory::Size::Text); Assert::IsTrue(bookmarks.IsModified()); bookmarks.mockGameContext.SetGameId(0U); @@ -1844,25 +1845,25 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmark.UpdateCurrentValue(); Assert::AreEqual(std::wstring(L"42883efa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::Float); + bookmark.SetSize(ra::data::Memory::Size::Float); Assert::AreEqual(std::wstring(L"68.123001"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::ThirtyTwoBitBigEndian); + bookmark.SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e8842"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::TwentyFourBitBigEndian); + bookmark.SetSize(ra::data::Memory::Size::TwentyFourBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e88"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::SixteenBitBigEndian); + bookmark.SetSize(ra::data::Memory::Size::SixteenBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::EightBit); + bookmark.SetSize(ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"fa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::SixteenBit); + bookmark.SetSize(ra::data::Memory::Size::SixteenBit); Assert::AreEqual(std::wstring(L"3efa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::TwentyFourBit); + bookmark.SetSize(ra::data::Memory::Size::TwentyFourBit); Assert::AreEqual(std::wstring(L"883efa"), bookmark.GetCurrentValue()); } @@ -1885,30 +1886,30 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual({1U}, bookmarks.Bookmarks().Items().Count()); auto& bookmark = *bookmarks.GetBookmark(0); - Assert::AreEqual(MemSize::ThirtyTwoBit, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, bookmark.GetSize()); bookmark.UpdateCurrentValue(); Assert::AreEqual(std::wstring(L"42883efa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::Float); + bookmark.SetSize(ra::data::Memory::Size::Float); Assert::AreEqual(std::wstring(L"68.123001"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::ThirtyTwoBitBigEndian); + bookmark.SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e8842"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::TwentyFourBitBigEndian); + bookmark.SetSize(ra::data::Memory::Size::TwentyFourBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e88"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::SixteenBitBigEndian); + bookmark.SetSize(ra::data::Memory::Size::SixteenBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::EightBit); + bookmark.SetSize(ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"fa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::SixteenBit); + bookmark.SetSize(ra::data::Memory::Size::SixteenBit); Assert::AreEqual(std::wstring(L"3efa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::TwentyFourBit); + bookmark.SetSize(ra::data::Memory::Size::TwentyFourBit); Assert::AreEqual(std::wstring(L"883efa"), bookmark.GetCurrentValue()); } @@ -1931,15 +1932,15 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) Assert::AreEqual({ 1U }, bookmarks.Bookmarks().Items().Count()); auto& bookmark = *bookmarks.GetBookmark(0); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, bookmark.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, bookmark.GetSize()); bookmark.UpdateCurrentValue(); Assert::AreEqual(std::wstring(L"42883efa"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::FloatBigEndian); + bookmark.SetSize(ra::data::Memory::Size::FloatBigEndian); Assert::AreEqual(std::wstring(L"68.123001"), bookmark.GetCurrentValue()); - bookmark.SetSize(MemSize::ThirtyTwoBit); + bookmark.SetSize(ra::data::Memory::Size::ThirtyTwoBit); Assert::AreEqual(std::wstring(L"fa3e8842"), bookmark.GetCurrentValue()); } diff --git a/tests/ui/viewmodels/MemoryInspectorViewModel_Tests.cpp b/tests/ui/viewmodels/MemoryInspectorViewModel_Tests.cpp index d5b747e19..19a987caa 100644 --- a/tests/ui/viewmodels/MemoryInspectorViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemoryInspectorViewModel_Tests.cpp @@ -10,6 +10,7 @@ #include "tests\devkit\context\mocks\MockRcClient.hh" #include "tests\devkit\services\mocks\MockThreadPool.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockAchievementRuntime.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" @@ -79,13 +80,13 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) bool CurrentBitsVisible() const { return GetValue(CurrentBitsVisibleProperty); } - const std::wstring* FindCodeNote(ra::ByteAddress nAddress) const + const std::wstring* FindCodeNote(ra::data::ByteAddress nAddress) const { const auto* pCodeNotes = mockGameContext.Assets().FindCodeNotes(); return (pCodeNotes != nullptr) ? pCodeNotes->FindCodeNote(nAddress) : nullptr; } - void PreparePublish(ra::ByteAddress nAddress, std::wstring sNote) + void PreparePublish(ra::data::ByteAddress nAddress, std::wstring sNote) { mockServer.HandleRequest([this] (const ra::api::UpdateCodeNote::Request& pRequest, ra::api::UpdateCodeNote::Response& pResponse) @@ -115,7 +116,7 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) Assert::AreEqual(sNote, GetCurrentAddressNote()); } - void PreparePublishFailure(ra::ByteAddress nAddress, std::wstring sNote) + void PreparePublishFailure(ra::data::ByteAddress nAddress, std::wstring sNote) { mockServer.HandleRequest( [this](const ra::api::UpdateCodeNote::Request& pRequest, ra::api::UpdateCodeNote::Response& pResponse) { @@ -143,10 +144,10 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) Assert::AreEqual(sNote, GetCurrentAddressNote()); } - ra::ByteAddress GetPublishedAddress() const noexcept { return m_nPublishedAddress; } + ra::data::ByteAddress GetPublishedAddress() const noexcept { return m_nPublishedAddress; } private: - ra::ByteAddress m_nPublishedAddress = 0U; + ra::data::ByteAddress m_nPublishedAddress = 0U; }; @@ -323,7 +324,7 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) inspector.Viewer().SetAddress({ 3U }); inspector.mockWindowManager.MemoryBookmarks.InitializeNotifyTargets(); - inspector.mockWindowManager.MemoryBookmarks.AddBookmark(3, MemSize::EightBit); + inspector.mockWindowManager.MemoryBookmarks.AddBookmark(3, ra::data::Memory::Size::EightBit); auto* pNote = inspector.mockWindowManager.MemoryBookmarks.Bookmarks().Items().GetItemAt(0); Expects(pNote != nullptr); Assert::AreEqual(std::wstring(L"03"), pNote->GetCurrentValue()); @@ -350,19 +351,19 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) { MemoryInspectorViewModelHarness inspector; inspector.Viewer().SetAddress({ 3U }); - Assert::AreEqual(MemSize::EightBit, inspector.Viewer().GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, inspector.Viewer().GetSize()); Assert::IsTrue(inspector.CurrentBitsVisible()); - inspector.Viewer().SetSize(MemSize::SixteenBit); + inspector.Viewer().SetSize(ra::data::Memory::Size::SixteenBit); Assert::IsFalse(inspector.CurrentBitsVisible()); - inspector.Viewer().SetSize(MemSize::ThirtyTwoBit); + inspector.Viewer().SetSize(ra::data::Memory::Size::ThirtyTwoBit); Assert::IsFalse(inspector.CurrentBitsVisible()); - inspector.Viewer().SetSize(MemSize::ThirtyTwoBitBigEndian); + inspector.Viewer().SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); Assert::IsFalse(inspector.CurrentBitsVisible()); - inspector.Viewer().SetSize(MemSize::EightBit); + inspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); Assert::IsTrue(inspector.CurrentBitsVisible()); } @@ -703,29 +704,29 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) const auto& pBookmarks = inspector.mockWindowManager.MemoryBookmarks.Bookmarks(); Assert::AreEqual({ 1U }, pBookmarks.Items().Count()); Assert::AreEqual({ 2U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); - inspector.Viewer().SetSize(MemSize::ThirtyTwoBit); + inspector.Viewer().SetSize(ra::data::Memory::Size::ThirtyTwoBit); inspector.SetCurrentAddress(5U); inspector.BookmarkCurrentAddress(); Assert::AreEqual({ 2U }, pBookmarks.Items().Count()); Assert::AreEqual({ 2U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); Assert::AreEqual({ 5U }, pBookmarks.Items().GetItemAt(1)->GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pBookmarks.Items().GetItemAt(1)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pBookmarks.Items().GetItemAt(1)->GetSize()); - inspector.Viewer().SetSize(MemSize::ThirtyTwoBitBigEndian); + inspector.Viewer().SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); inspector.SetCurrentAddress(12U); inspector.BookmarkCurrentAddress(); Assert::AreEqual({ 3U }, pBookmarks.Items().Count()); Assert::AreEqual({ 2U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pBookmarks.Items().GetItemAt(0)->GetSize()); Assert::AreEqual({ 5U }, pBookmarks.Items().GetItemAt(1)->GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pBookmarks.Items().GetItemAt(1)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pBookmarks.Items().GetItemAt(1)->GetSize()); Assert::AreEqual({ 12U }, pBookmarks.Items().GetItemAt(2)->GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBitBigEndian, pBookmarks.Items().GetItemAt(2)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBitBigEndian, pBookmarks.Items().GetItemAt(2)->GetSize()); } TEST_METHOD(TestBookmarkCurrentAddressIndirect) @@ -751,7 +752,7 @@ TEST_CLASS(MemoryInspectorViewModel_Tests) const auto& pBookmarks = inspector.mockWindowManager.MemoryBookmarks.Bookmarks(); Assert::AreEqual({1U}, pBookmarks.Items().Count()); Assert::AreEqual({16U}, pBookmarks.Items().GetItemAt(0)->GetAddress()); - Assert::AreEqual(MemSize::ThirtyTwoBit, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, pBookmarks.Items().GetItemAt(0)->GetSize()); Assert::AreEqual(std::string("I:0xX0004_M:0xX0004"), pBookmarks.Items().GetItemAt(0)->GetIndirectAddress()); Assert::AreEqual(std::wstring(L"[32-bit] Current HP"), pBookmarks.Items().GetItemAt(0)->GetRealNote()); } diff --git a/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp b/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp index 6249e4374..d0ea36f45 100644 --- a/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp @@ -7,6 +7,7 @@ #include "tests\ui\UIAsserts.hh" #include "tests\devkit\services\mocks\MockFileSystem.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockClock.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" @@ -134,7 +135,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) const std::wstring& ContinuousFilterLabel() const { return GetValue(ContinuousFilterLabelProperty); } }; - void AssertRow(MemorySearchViewModelHarness& search, gsl::index nRow, ra::ByteAddress nAddress, + void AssertRow(MemorySearchViewModelHarness& search, gsl::index nRow, ra::data::ByteAddress nAddress, const wchar_t* sAddress, const wchar_t* sCurrentValue) { auto* pRow = search.Results().GetItemAt(nRow); @@ -152,7 +153,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) MemorySearchViewModelHarness search; Assert::AreEqual({ 0U }, search.Results().Count()); - Assert::AreEqual(MemSize::Bit_0, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Bit_0, search.ResultMemSize()); Assert::AreEqual({ 0U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L""), search.GetFilterRange()); @@ -244,7 +245,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollMaximum()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 32U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"New 8-bit Search"), search.GetFilterSummary()); Assert::IsTrue(search.CanFilter()); Assert::IsFalse(search.CanGoToPreviousPage()); @@ -264,7 +265,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollMaximum()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 31U }, search.GetResultCount()); - Assert::AreEqual(MemSize::SixteenBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"New 16-bit Search"), search.GetFilterSummary()); Assert::IsTrue(search.CanFilter()); Assert::IsFalse(search.CanGoToPreviousPage()); @@ -283,7 +284,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollMaximum()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 64U }, search.GetResultCount()); - Assert::AreEqual(MemSize::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"New 4-bit Search"), search.GetFilterSummary()); Assert::IsTrue(search.CanFilter()); Assert::IsFalse(search.CanGoToPreviousPage()); @@ -304,7 +305,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= 12"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -325,7 +326,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= 0x0C"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -358,7 +359,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 32U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"32"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"New 8-bit Search"), search.GetFilterSummary()); Assert::AreEqual({ 0U }, search.Results().Count()); } @@ -389,7 +390,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 32U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"32"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"New 8-bit Search"), search.GetFilterSummary()); Assert::AreEqual({ 0U }, search.Results().Count()); } @@ -410,7 +411,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -422,7 +423,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"2/2"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -444,7 +445,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -456,7 +457,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"2/2"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -480,7 +481,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Last +2"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -504,7 +505,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Last -2"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -528,7 +529,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 2U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"2"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"> Initial"), search.GetFilterSummary()); Assert::AreEqual({ 2U }, search.Results().Count()); @@ -565,7 +566,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -577,7 +578,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"2/2"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -589,7 +590,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/2"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -602,7 +603,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"2/2"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -622,7 +623,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({0}, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({32U}, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Last Known"), search.GetFilterSummary()); Assert::AreEqual({9U}, search.Results().Count()); @@ -681,7 +682,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 2U }, search.GetResultCount()); - Assert::AreEqual(MemSize::Text, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Text, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= sea"), search.GetFilterSummary()); Assert::AreEqual({ 2U }, search.Results().Count()); @@ -709,7 +710,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"50/50"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -726,7 +727,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"50/50"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -753,7 +754,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"50/50"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -770,7 +771,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"50/50"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -792,7 +793,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 32U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"32"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::IsTrue(search.Results().Count() > 3); AssertRow(search, 0, 0U, L"0x0000", L"0x00"); @@ -816,7 +817,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 31U }, search.GetResultCount()); - Assert::AreEqual(MemSize::SixteenBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, search.ResultMemSize()); Assert::IsTrue(search.Results().Count() > 3); AssertRow(search, 0, 0U, L"0x0000", L"0x0100"); @@ -839,7 +840,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 32U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"32"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::IsTrue(search.Results().Count() > 3); AssertRow(search, 0, 0U, L"0x0000", L"0x00"); @@ -852,7 +853,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 32U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"32"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::IsTrue(search.Results().Count() > 3); AssertRow(search, 0, 0U, L"0x0000", L"0x00"); @@ -879,7 +880,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 3U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"3"), search.GetResultCountText()); - Assert::AreEqual(MemSize::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Last +2"), search.GetFilterSummary()); Assert::AreEqual({ 3U }, search.Results().Count()); @@ -903,7 +904,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 64U }, search.GetResultCount()); - Assert::AreEqual(MemSize::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); Assert::IsTrue(search.Results().Count() > 3); AssertRow(search, 0, 0U, L"0x0000L", L"0x0"); @@ -930,7 +931,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"< 8"), search.GetFilterSummary()); Assert::AreEqual({ 8U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"8"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 8U }, search.Results().Count()); AssertRow(search, 2, 2U, L"0x0002", L"0x02"); Assert::IsTrue(search.CanFilter()); @@ -1001,7 +1002,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"< 8"), search.GetFilterSummary()); Assert::AreEqual({ 8U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"8"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 8U }, search.Results().Count()); AssertRow(search, 2, 2U, L"0x0002", L"0x02"); Assert::IsTrue(search.CanFilter()); @@ -1016,7 +1017,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"< 8"), search.GetFilterSummary()); Assert::AreEqual({ 8U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"8"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 8U }, search.Results().Count()); AssertRow(search, 2, 2U, L"0x0002", L"0x02"); Assert::IsTrue(search.CanFilter()); @@ -1043,7 +1044,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"< 8"), search.GetFilterSummary()); Assert::AreEqual({ 8U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"8"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 8U }, search.Results().Count()); AssertRow(search, 2, 2U, L"0x0002", L"0x02"); Assert::IsTrue(search.CanFilter()); @@ -1073,7 +1074,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"< 8"), search.GetFilterSummary()); Assert::AreEqual({ 8U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"8"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 8U }, search.Results().Count()); AssertRow(search, 2, 2U, L"0x0002", L"0x02"); Assert::IsTrue(search.CanFilter()); @@ -1146,7 +1147,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 5U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 5U }, search.Results().Count()); Assert::IsFalse(search.HasSelection()); @@ -1183,7 +1184,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 18U }, search.GetResultCount()); - Assert::AreEqual(MemSize::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); Assert::IsFalse(search.HasSelection()); Assert::AreEqual(0U, search.Results().GetItemAt(0)->nAddress); // 0L @@ -1220,7 +1221,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 5U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); search.SetComparisonType(ComparisonType::Equals); search.SetValueType(ra::services::SearchFilterType::LastKnownValue); @@ -1264,7 +1265,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 5U }, search.GetResultCount()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual({ 5U }, search.Results().Count()); Assert::IsFalse(search.HasSelection()); @@ -1302,7 +1303,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 5U }, search.GetResultCount()); - Assert::AreEqual(MemSize::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); Assert::AreEqual({ 5U }, search.Results().Count()); search.Results().GetItemAt(2)->SetSelected(true); @@ -1315,8 +1316,8 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 2U }, pBookmarks.Items().Count()); Assert::AreEqual({ 30U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); Assert::AreEqual({ 30U }, pBookmarks.Items().GetItemAt(1)->GetAddress()); - Assert::AreEqual(MemSize::Nibble_Lower, pBookmarks.Items().GetItemAt(0)->GetSize()); - Assert::AreEqual(MemSize::Nibble_Upper, pBookmarks.Items().GetItemAt(1)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, pBookmarks.Items().GetItemAt(1)->GetSize()); Assert::IsTrue(search.Results().GetItemAt(2)->IsSelected()); Assert::IsTrue(search.Results().GetItemAt(3)->IsSelected()); @@ -1341,7 +1342,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); - Assert::AreEqual(MemSize::Text, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Text, search.ResultMemSize()); Assert::AreEqual({ 1U }, search.Results().Count()); search.Results().GetItemAt(0)->SetSelected(true); @@ -1352,7 +1353,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) const auto& pBookmarks = search.mockWindowManager.MemoryBookmarks.Bookmarks(); Assert::AreEqual({ 1U }, pBookmarks.Items().Count()); Assert::AreEqual({ 8U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); - Assert::AreEqual(MemSize::Text, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::Text, pBookmarks.Items().GetItemAt(0)->GetSize()); Assert::IsTrue(search.Results().GetItemAt(0)->IsSelected()); } @@ -1610,7 +1611,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 6U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"6"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 6U }, search.Results().Count()); @@ -1632,7 +1633,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 5U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"5"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 5U }, search.Results().Count()); @@ -1653,7 +1654,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -1668,7 +1669,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 0U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"0"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Last Known"), search.GetFilterSummary()); Assert::AreEqual({ 0U }, search.Results().Count()); @@ -1699,7 +1700,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 6U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"6"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 6U }, search.Results().Count()); @@ -1720,7 +1721,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 4U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"4"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 4U }, search.Results().Count()); @@ -1743,7 +1744,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 1U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"1"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 1U }, search.Results().Count()); @@ -1760,7 +1761,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 0U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"0"), search.GetResultCountText()); - Assert::AreEqual(MemSize::EightBit, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"!= Initial"), search.GetFilterSummary()); Assert::AreEqual({ 0U }, search.Results().Count()); diff --git a/tests/ui/viewmodels/MemoryViewerViewModel_Tests.cpp b/tests/ui/viewmodels/MemoryViewerViewModel_Tests.cpp index b3a0a1a91..423206826 100644 --- a/tests/ui/viewmodels/MemoryViewerViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemoryViewerViewModel_Tests.cpp @@ -5,6 +5,7 @@ #include "services\ServiceLocator.hh" #include "tests\RA_UnitTestHelpers.h" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockConsoleContext.hh" #include "tests\mocks\MockEmulatorContext.hh" #include "tests\mocks\MockGameContext.hh" @@ -60,12 +61,12 @@ TEST_CLASS(MemoryViewerViewModel_Tests) size_t GetTotalMemorySize() const noexcept { return m_nTotalMemorySize; } - unsigned char GetByte(ra::ByteAddress nAddress) const + unsigned char GetByte(ra::data::ByteAddress nAddress) const { return m_pMemory[nAddress - GetFirstAddress()]; } - unsigned char GetColor(ra::ByteAddress nAddress) const + unsigned char GetColor(ra::data::ByteAddress nAddress) const { return gsl::narrow_cast(ra::itoe(m_pColor[nAddress - GetFirstAddress()])); } @@ -107,7 +108,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 0U }, viewer.GetFirstAddress()); Assert::AreEqual({ 0U }, viewer.GetTotalMemorySize()); Assert::AreEqual({ 8U }, viewer.GetNumVisibleLines()); - Assert::AreEqual(MemSize::EightBit, viewer.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, viewer.GetSize()); Assert::IsTrue(viewer.NeedsRedraw()); viewer.InitializeMemory(128); @@ -116,7 +117,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 0U }, viewer.GetFirstAddress()); Assert::AreEqual({ 128U }, viewer.GetTotalMemorySize()); Assert::AreEqual({ 8U }, viewer.GetNumVisibleLines()); - Assert::AreEqual(MemSize::EightBit, viewer.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, viewer.GetSize()); Assert::IsTrue(viewer.NeedsRedraw()); Assert::AreEqual({ 0U }, viewer.GetByte(0U)); @@ -172,7 +173,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 36U }, viewer.GetAddress()); Assert::AreEqual({ COLOR_BLACK | COLOR_REDRAW }, viewer.GetColor(0U)); Assert::AreEqual({ COLOR_RED | COLOR_REDRAW }, viewer.GetColor(36U)); - for (ra::ByteAddress i = 1; i < 128; ++i) + for (ra::data::ByteAddress i = 1; i < 128; ++i) { if (i != 36) Assert::AreEqual(COLOR_BLACK, viewer.GetColor(i)); @@ -185,7 +186,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 368U }, viewer.GetFirstAddress()); // (444 & ~0x0F) - 4 * 16 Assert::AreEqual({ 444U }, viewer.GetAddress()); Assert::AreEqual({ COLOR_RED | COLOR_REDRAW }, viewer.GetColor(444U)); - for (ra::ByteAddress i = 1; i < 128; ++i) + for (ra::data::ByteAddress i = 1; i < 128; ++i) { if (i != 444 - 368) Assert::AreEqual({ COLOR_BLACK | COLOR_REDRAW }, viewer.GetColor(i + 368)); @@ -197,7 +198,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 288U }, viewer.GetFirstAddress()); // (360U & ~0x0F) - 4 * 16 Assert::AreEqual({ 360U }, viewer.GetAddress()); Assert::AreEqual({ COLOR_RED | COLOR_REDRAW }, viewer.GetColor(360U)); - for (ra::ByteAddress i = 1; i < 128; ++i) + for (ra::data::ByteAddress i = 1; i < 128; ++i) { if (i != 360 - 288) Assert::AreEqual({ COLOR_BLACK | COLOR_REDRAW }, viewer.GetColor(i + 288)); @@ -224,7 +225,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 444U }, viewer.GetAddress()); Assert::AreEqual({ 368U }, viewer.GetFirstAddress()); // (444 & ~0x0F) - 4 * 16 Assert::AreEqual({ COLOR_RED | COLOR_REDRAW }, viewer.GetColor(444U)); - for (ra::ByteAddress i = 1; i < 128; ++i) + for (ra::data::ByteAddress i = 1; i < 128; ++i) { if (i != 444 - 368) Assert::AreEqual({ COLOR_BLACK | COLOR_REDRAW }, viewer.GetColor(i + 368)); @@ -252,7 +253,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 1023U }, viewer.GetAddress()); Assert::AreEqual({ 896U }, viewer.GetFirstAddress()); // (1023 & ~0x0F) - 4 * 16 Assert::AreEqual({ COLOR_RED | COLOR_REDRAW }, viewer.GetColor(1023U)); - for (ra::ByteAddress i = 1; i < 128; ++i) + for (ra::data::ByteAddress i = 1; i < 128; ++i) { if (i != 1023 - 896) Assert::AreEqual({ COLOR_BLACK | COLOR_REDRAW }, viewer.GetColor(i + 896)); @@ -766,7 +767,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::SixteenBit); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); viewer.MockRender(); Assert::AreEqual({ 0U }, viewer.GetAddress()); @@ -890,7 +891,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); viewer.SetFirstAddress(128U); - viewer.SetSize(MemSize::SixteenBit); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); viewer.SetAddress(130U); viewer.MockRender(); @@ -962,7 +963,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::SixteenBit); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); viewer.MockRender(); Assert::AreEqual({ 0U }, viewer.GetAddress()); @@ -1018,7 +1019,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); viewer.SetFirstAddress(128U); - viewer.SetSize(MemSize::SixteenBit); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); viewer.SetAddress(130U); viewer.MockRender(); @@ -1076,7 +1077,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::ThirtyTwoBit); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBit); viewer.MockRender(); Assert::AreEqual({ 0U }, viewer.GetAddress()); @@ -1249,7 +1250,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); viewer.SetFirstAddress(128U); - viewer.SetSize(MemSize::ThirtyTwoBit); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBit); viewer.SetAddress(132U); viewer.MockRender(); @@ -1355,7 +1356,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::ThirtyTwoBit); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBit); viewer.MockRender(); Assert::AreEqual({ 0U }, viewer.GetAddress()); @@ -1415,7 +1416,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); viewer.SetFirstAddress(128U); - viewer.SetSize(MemSize::ThirtyTwoBit); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBit); viewer.SetAddress(132U); viewer.MockRender(); @@ -1480,7 +1481,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::SixteenBit); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); viewer.MockRender(); Assert::AreEqual({ 0U }, viewer.GetAddress()); @@ -1547,7 +1548,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::ThirtyTwoBit); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBit); viewer.MockRender(); Assert::AreEqual({ 0U }, viewer.GetAddress()); @@ -1617,7 +1618,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) { MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); - viewer.SetSize(MemSize::ThirtyTwoBitBigEndian); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); viewer.MockRender(); Assert::AreEqual({0U}, viewer.GetAddress()); @@ -1743,7 +1744,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); // 16 rows of 16 bytes - Assert::AreEqual(MemSize::EightBit, viewer.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, viewer.GetSize()); Assert::AreEqual({ 0U }, viewer.GetAddress()); Assert::AreEqual({ 0U }, viewer.GetSelectedNibble()); @@ -1803,8 +1804,8 @@ TEST_CLASS(MemoryViewerViewModel_Tests) MemoryViewerViewModelHarness viewer; viewer.InitializeMemory(256); // 16 rows of 16 bytes - viewer.SetSize(MemSize::SixteenBit); - Assert::AreEqual(MemSize::SixteenBit, viewer.GetSize()); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, viewer.GetSize()); Assert::AreEqual({ 0U }, viewer.GetAddress()); Assert::AreEqual({ 0U }, viewer.GetSelectedNibble()); @@ -1873,7 +1874,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) // reset and try again in 16-bit mode viewer.SetFirstAddress(0x40U); - viewer.SetSize(MemSize::SixteenBit); + viewer.SetSize(ra::data::Memory::Size::SixteenBit); viewer.SetFirstAddress(0x60U); Assert::AreEqual({ 0x5FU }, viewer.GetAddress()); @@ -1885,7 +1886,7 @@ TEST_CLASS(MemoryViewerViewModel_Tests) // reset and try again in 32-bit mode viewer.SetFirstAddress(0x40U); viewer.SetAddress(0x5FU); - viewer.SetSize(MemSize::ThirtyTwoBit); + viewer.SetSize(ra::data::Memory::Size::ThirtyTwoBit); viewer.SetFirstAddress(0x60U); Assert::AreEqual({ 0x5FU }, viewer.GetAddress()); @@ -1968,21 +1969,21 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 0xFFU }, viewer.mockEmulatorContext.ReadMemoryByte(0U)); // Increase by 1 from 0x0 should result to 0x0001 - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0x0U); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0x0U); viewer.IncreaseCurrentValue(1); - Assert::AreEqual({ 0x1U }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0x1U }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // Increase by 1 from 0xFFFF should not change the value - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0xFFFFU); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0xFFFFU); viewer.IncreaseCurrentValue(1); - Assert::AreEqual({ 0xFFFFU }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0xFFFFU }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // ignore if readonly - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0x0U); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0x0U); viewer.SetReadOnly(true); Assert::IsTrue(viewer.IsReadOnly()); viewer.IncreaseCurrentValue(1); - Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); } TEST_METHOD(TestIncreaseCurrentValueBySixTeen) @@ -2011,21 +2012,21 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 0xFFU }, viewer.mockEmulatorContext.ReadMemoryByte(0U)); // Increase by 16 from 0x0 should result to 0x0010 - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0x0U); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0x0U); viewer.IncreaseCurrentValue(16); - Assert::AreEqual({ 0x10U }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0x10U }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // Increase by 16 from 0xFFFF should not change the value - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0xFFFFU); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0xFFFFU); viewer.IncreaseCurrentValue(16); - Assert::AreEqual({ 0xFFFFU }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0xFFFFU }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // ignore if readonly - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0x0U); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0x0U); viewer.SetReadOnly(true); Assert::IsTrue(viewer.IsReadOnly()); viewer.IncreaseCurrentValue(16); - Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); } TEST_METHOD(TestDecreaseCurrentValueByOne) @@ -2055,20 +2056,20 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemoryByte(0U)); // Decrease by 1 from 0x0 should not change the value - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0X0U); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0X0U); viewer.DecreaseCurrentValue(1); - Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // Decrease by 1 from 0xFFFF should result to 0XFFFE - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0XFFFFU); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0XFFFFU); viewer.DecreaseCurrentValue(1); - Assert::AreEqual({ 0xFFFEU }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0xFFFEU }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // ignore if readonly viewer.SetReadOnly(true); Assert::IsTrue(viewer.IsReadOnly()); viewer.DecreaseCurrentValue(1); - Assert::AreEqual({ 0xFFFEU }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0xFFFEU }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); } TEST_METHOD(TestDecreaseCurrentValueBySixteen) @@ -2098,20 +2099,20 @@ TEST_CLASS(MemoryViewerViewModel_Tests) Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemoryByte(0U)); // Decrease by 16 from 0x0 should not change the value - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0x0U); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0x0U); viewer.DecreaseCurrentValue(16); - Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0x0U }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // Decrease by 16 from 0xFFFF should result to 0XFFEF - viewer.mockEmulatorContext.WriteMemory(0x0U, MemSize::SixteenBit, 0xFFFFU); + viewer.mockEmulatorContext.WriteMemory(0x0U, ra::data::Memory::Size::SixteenBit, 0xFFFFU); viewer.DecreaseCurrentValue(16); - Assert::AreEqual({ 0xFFEFU }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0xFFEFU }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); // ignore if readonly viewer.SetReadOnly(true); Assert::IsTrue(viewer.IsReadOnly()); viewer.DecreaseCurrentValue(16); - Assert::AreEqual({ 0xFFEFU }, viewer.mockEmulatorContext.ReadMemory(0U, MemSize::SixteenBit)); + Assert::AreEqual({ 0xFFEFU }, viewer.mockEmulatorContext.ReadMemory(0U, ra::data::Memory::Size::SixteenBit)); } }; diff --git a/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp b/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp index c547223d9..df3288307 100644 --- a/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp @@ -7,6 +7,7 @@ #include "tests\devkit\context\mocks\MockRcClient.hh" #include "tests\devkit\services\mocks\MockFileSystem.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockAchievementRuntime.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" @@ -46,7 +47,7 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) InitializeNotifyTargets(); } - void AddItem(ra::ByteAddress nAddress, MemSize nSize = MemSize::EightBit, MemFormat nFormat = MemFormat::Hex) + void AddItem(ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize = ra::data::Memory::Size::EightBit, ra::data::Memory::Format nFormat = ra::data::Memory::Format::Hex) { auto& pItem = Items().Add(); pItem.BeginInitialization(); @@ -57,7 +58,7 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) pItem.EndInitialization(); } - void AddItem(const std::string& sIndirectAddress, MemFormat nFormat = MemFormat::Hex) + void AddItem(const std::string& sIndirectAddress, ra::data::Memory::Format nFormat = ra::data::Memory::Format::Hex) { auto& pItem = Items().Add(); pItem.BeginInitialization(); @@ -76,45 +77,45 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual({0U}, watchList.Items().Count()); Assert::AreEqual({ 17U }, watchList.Sizes().Count()); - Assert::AreEqual((int)MemSize::EightBit, watchList.Sizes().GetItemAt(0)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::EightBit, watchList.Sizes().GetItemAt(0)->GetId()); Assert::AreEqual(std::wstring(L" 8-bit"), watchList.Sizes().GetItemAt(0)->GetLabel()); - Assert::AreEqual((int)MemSize::SixteenBit, watchList.Sizes().GetItemAt(1)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::SixteenBit, watchList.Sizes().GetItemAt(1)->GetId()); Assert::AreEqual(std::wstring(L"16-bit"), watchList.Sizes().GetItemAt(1)->GetLabel()); - Assert::AreEqual((int)MemSize::TwentyFourBit, watchList.Sizes().GetItemAt(2)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::TwentyFourBit, watchList.Sizes().GetItemAt(2)->GetId()); Assert::AreEqual(std::wstring(L"24-bit"), watchList.Sizes().GetItemAt(2)->GetLabel()); - Assert::AreEqual((int)MemSize::ThirtyTwoBit, watchList.Sizes().GetItemAt(3)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::ThirtyTwoBit, watchList.Sizes().GetItemAt(3)->GetId()); Assert::AreEqual(std::wstring(L"32-bit"), watchList.Sizes().GetItemAt(3)->GetLabel()); - Assert::AreEqual((int)MemSize::SixteenBitBigEndian, watchList.Sizes().GetItemAt(4)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::SixteenBitBigEndian, watchList.Sizes().GetItemAt(4)->GetId()); Assert::AreEqual(std::wstring(L"16-bit BE"), watchList.Sizes().GetItemAt(4)->GetLabel()); - Assert::AreEqual((int)MemSize::TwentyFourBitBigEndian, watchList.Sizes().GetItemAt(5)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::TwentyFourBitBigEndian, watchList.Sizes().GetItemAt(5)->GetId()); Assert::AreEqual(std::wstring(L"24-bit BE"), watchList.Sizes().GetItemAt(5)->GetLabel()); - Assert::AreEqual((int)MemSize::ThirtyTwoBitBigEndian, watchList.Sizes().GetItemAt(6)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::ThirtyTwoBitBigEndian, watchList.Sizes().GetItemAt(6)->GetId()); Assert::AreEqual(std::wstring(L"32-bit BE"), watchList.Sizes().GetItemAt(6)->GetLabel()); - Assert::AreEqual((int)MemSize::BitCount, watchList.Sizes().GetItemAt(7)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::BitCount, watchList.Sizes().GetItemAt(7)->GetId()); Assert::AreEqual(std::wstring(L"BitCount"), watchList.Sizes().GetItemAt(7)->GetLabel()); - Assert::AreEqual((int)MemSize::Nibble_Lower, watchList.Sizes().GetItemAt(8)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Lower, watchList.Sizes().GetItemAt(8)->GetId()); Assert::AreEqual(std::wstring(L"Lower4"), watchList.Sizes().GetItemAt(8)->GetLabel()); - Assert::AreEqual((int)MemSize::Nibble_Upper, watchList.Sizes().GetItemAt(9)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Upper, watchList.Sizes().GetItemAt(9)->GetId()); Assert::AreEqual(std::wstring(L"Upper4"), watchList.Sizes().GetItemAt(9)->GetLabel()); - Assert::AreEqual((int)MemSize::Float, watchList.Sizes().GetItemAt(10)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Float, watchList.Sizes().GetItemAt(10)->GetId()); Assert::AreEqual(std::wstring(L"Float"), watchList.Sizes().GetItemAt(10)->GetLabel()); - Assert::AreEqual((int)MemSize::FloatBigEndian, watchList.Sizes().GetItemAt(11)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::FloatBigEndian, watchList.Sizes().GetItemAt(11)->GetId()); Assert::AreEqual(std::wstring(L"Float BE"), watchList.Sizes().GetItemAt(11)->GetLabel()); - Assert::AreEqual((int)MemSize::Double32, watchList.Sizes().GetItemAt(12)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Double32, watchList.Sizes().GetItemAt(12)->GetId()); Assert::AreEqual(std::wstring(L"Double32"), watchList.Sizes().GetItemAt(12)->GetLabel()); - Assert::AreEqual((int)MemSize::Double32BigEndian, watchList.Sizes().GetItemAt(13)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Double32BigEndian, watchList.Sizes().GetItemAt(13)->GetId()); Assert::AreEqual(std::wstring(L"Double32 BE"), watchList.Sizes().GetItemAt(13)->GetLabel()); - Assert::AreEqual((int)MemSize::MBF32, watchList.Sizes().GetItemAt(14)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::MBF32, watchList.Sizes().GetItemAt(14)->GetId()); Assert::AreEqual(std::wstring(L"MBF32"), watchList.Sizes().GetItemAt(14)->GetLabel()); - Assert::AreEqual((int)MemSize::MBF32LE, watchList.Sizes().GetItemAt(15)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::MBF32LE, watchList.Sizes().GetItemAt(15)->GetId()); Assert::AreEqual(std::wstring(L"MBF32 LE"), watchList.Sizes().GetItemAt(15)->GetLabel()); - Assert::AreEqual((int)MemSize::Text, watchList.Sizes().GetItemAt(16)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Text, watchList.Sizes().GetItemAt(16)->GetId()); Assert::AreEqual(std::wstring(L"ASCII"), watchList.Sizes().GetItemAt(16)->GetLabel()); Assert::AreEqual({ 2U }, watchList.Formats().Count()); - Assert::AreEqual((int)MemFormat::Hex, watchList.Formats().GetItemAt(0)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Format::Hex, watchList.Formats().GetItemAt(0)->GetId()); Assert::AreEqual(std::wstring(L"Hex"), watchList.Formats().GetItemAt(0)->GetLabel()); - Assert::AreEqual((int)MemFormat::Dec, watchList.Formats().GetItemAt(1)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Format::Dec, watchList.Formats().GetItemAt(1)->GetId()); Assert::AreEqual(std::wstring(L"Dec"), watchList.Formats().GetItemAt(1)->GetLabel()); } @@ -131,8 +132,8 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), pItem->GetRealNote()); Assert::AreEqual(std::wstring(L"Note description"), pItem->GetDescription()); Assert::AreEqual(1234U, pItem->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pItem->GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pItem->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem->GetFormat()); Assert::IsFalse(pItem->IsCustomDescription()); watchList.mockGameContext.SetCodeNote(1234U, L"New description"); @@ -143,8 +144,8 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"New description"), pItem->GetRealNote()); Assert::AreEqual(std::wstring(L"New description"), pItem->GetDescription()); Assert::AreEqual(1234U, pItem->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pItem->GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pItem->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem->GetFormat()); Assert::IsFalse(pItem->IsCustomDescription()); } @@ -162,8 +163,8 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"Note description"), pItem->GetRealNote()); Assert::AreEqual(std::wstring(L"My Description"), pItem->GetDescription()); Assert::AreEqual(1234U, pItem->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pItem->GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pItem->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem->GetFormat()); Assert::IsTrue(pItem->IsCustomDescription()); watchList.mockGameContext.SetCodeNote(1234U, L"New description"); @@ -174,8 +175,8 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"New description"), pItem->GetRealNote()); Assert::AreEqual(std::wstring(L"My Description"), pItem->GetDescription()); Assert::AreEqual(1234U, pItem->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pItem->GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pItem->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem->GetFormat()); Assert::IsTrue(pItem->IsCustomDescription()); watchList.mockGameContext.SetCodeNote(1234U, L"My Description"); @@ -186,8 +187,8 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"My Description"), pItem->GetRealNote()); Assert::AreEqual(std::wstring(L"My Description"), pItem->GetDescription()); Assert::AreEqual(1234U, pItem->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pItem->GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pItem->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem->GetFormat()); Assert::IsFalse(pItem->IsCustomDescription()); watchList.mockGameContext.SetCodeNote(1234U, L"New description"); @@ -198,8 +199,8 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"New description"), pItem->GetRealNote()); Assert::AreEqual(std::wstring(L"New description"), pItem->GetDescription()); Assert::AreEqual(1234U, pItem->GetAddress()); - Assert::AreEqual(MemSize::EightBit, pItem->GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem->GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, pItem->GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem->GetFormat()); Assert::IsFalse(pItem->IsCustomDescription()); } @@ -255,12 +256,12 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) watchList.mockEmulatorContext.MockMemory(memory); watchList.mockGameContext.NotifyActiveGameChanged(); - watchList.AddItem(1, MemSize::ThirtyTwoBit); - watchList.AddItem(2, MemSize::TwentyFourBit); - watchList.AddItem(3, MemSize::SixteenBit); - watchList.AddItem(4, MemSize::EightBit); - watchList.AddItem(4, MemSize::SixteenBit); - watchList.AddItem(5, MemSize::EightBit); + watchList.AddItem(1, ra::data::Memory::Size::ThirtyTwoBit); + watchList.AddItem(2, ra::data::Memory::Size::TwentyFourBit); + watchList.AddItem(3, ra::data::Memory::Size::SixteenBit); + watchList.AddItem(4, ra::data::Memory::Size::EightBit); + watchList.AddItem(4, ra::data::Memory::Size::SixteenBit); + watchList.AddItem(5, ra::data::Memory::Size::EightBit); auto& pItem1 = *watchList.Items().GetItemAt(0); Assert::AreEqual(std::wstring(L"04030201"), pItem1.GetCurrentValue()); @@ -323,7 +324,7 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) TEST_METHOD(TestUpdateCurrentValueOnSizeChange) { MemoryWatchListViewModelHarness watchList; - watchList.AddItem(4U, MemSize::SixteenBit); + watchList.AddItem(4U, ra::data::Memory::Size::SixteenBit); auto& pItem1 = *watchList.Items().GetItemAt(0); std::array memory = {}; @@ -343,12 +344,12 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"0504"), pItem1.GetPreviousValue()); Assert::AreEqual(1U, pItem1.GetChanges()); - pItem1.SetSize(MemSize::EightBit); + pItem1.SetSize(ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"04"), pItem1.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0504"), pItem1.GetPreviousValue()); Assert::AreEqual(1U, pItem1.GetChanges()); - pItem1.SetSize(MemSize::ThirtyTwoBit); + pItem1.SetSize(ra::data::Memory::Size::ThirtyTwoBit); Assert::AreEqual(std::wstring(L"07061704"), pItem1.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0504"), pItem1.GetPreviousValue()); Assert::AreEqual(1U, pItem1.GetChanges()); @@ -361,7 +362,7 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) std::array memory = {}; watchList.mockEmulatorContext.MockMemory(memory); - watchList.AddItem(1U, MemSize::EightBit); + watchList.AddItem(1U, ra::data::Memory::Size::EightBit); Assert::AreEqual({ 1U }, watchList.Items().Count()); auto& pItem = *watchList.Items().GetItemAt(0); @@ -369,13 +370,13 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) for (gsl::index nIndex = 0; nIndex < gsl::narrow_cast(watchList.Sizes().Count()); ++nIndex) { - const auto nSize = ra::itoe(watchList.Sizes().GetItemAt(nIndex)->GetId()); + const auto nSize = ra::itoe(watchList.Sizes().GetItemAt(nIndex)->GetId()); pItem.SetSize(nSize); switch (nSize) { - case MemSize::BitCount: - case MemSize::Text: + case ra::data::Memory::Size::BitCount: + case ra::data::Memory::Size::Text: Assert::IsTrue(pItem.IsReadOnly()); break; @@ -393,14 +394,14 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) std::array memory = {}; watchList.mockEmulatorContext.MockMemory(memory); - watchList.AddItem(1U, MemSize::Float); + watchList.AddItem(1U, ra::data::Memory::Size::Float); Assert::AreEqual({ 1U }, watchList.Items().Count()); const auto& pItem = *watchList.Items().GetItemAt(0); Assert::AreEqual(std::wstring(L""), pItem.GetRealNote()); Assert::AreEqual(1U, pItem.GetAddress()); - Assert::AreEqual(MemSize::Float, pItem.GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::Float, pItem.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem.GetFormat()); Assert::AreEqual(std::wstring(L"0.0"), pItem.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), pItem.GetPreviousValue()); Assert::AreEqual(0U, pItem.GetChanges()); @@ -428,15 +429,15 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) std::array memory = {}; watchList.mockEmulatorContext.MockMemory(memory); - watchList.AddItem(4U, MemSize::Double32); + watchList.AddItem(4U, ra::data::Memory::Size::Double32); // without a code note, assume the user is pIteming the 4 significant bytes Assert::AreEqual({1U}, watchList.Items().Count()); const auto& pItem = *watchList.Items().GetItemAt(0); Assert::AreEqual(std::wstring(L""), pItem.GetRealNote()); Assert::AreEqual(4U, pItem.GetAddress()); - Assert::AreEqual(MemSize::Double32, pItem.GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem.GetFormat()); // default to user preference + Assert::AreEqual(ra::data::Memory::Size::Double32, pItem.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem.GetFormat()); // default to user preference Assert::AreEqual(std::wstring(L"0.0"), pItem.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), pItem.GetPreviousValue()); Assert::AreEqual(0U, pItem.GetChanges()); @@ -450,13 +451,13 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) // with a code note, align the pItem to the 4 significant bytes watchList.mockGameContext.SetCodeNote(8U, L"[double] Note description"); - watchList.AddItem(8U, MemSize::Double32); + watchList.AddItem(8U, ra::data::Memory::Size::Double32); Assert::AreEqual({2U}, watchList.Items().Count()); const auto& pItem2 = *watchList.Items().GetItemAt(1); Assert::AreEqual(std::wstring(L"[double] Note description"), pItem2.GetRealNote()); Assert::AreEqual(12U, pItem2.GetAddress()); // adjusted to significant bytes - Assert::AreEqual(MemSize::Double32, pItem2.GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem2.GetFormat()); + Assert::AreEqual(ra::data::Memory::Size::Double32, pItem2.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem2.GetFormat()); Assert::AreEqual(std::wstring(L"0.0"), pItem2.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), pItem2.GetPreviousValue()); Assert::AreEqual(0U, pItem2.GetChanges()); @@ -468,13 +469,13 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(1U, pItem2.GetChanges()); // does not exactly match code note address, assume the user is pIteming the most significant bytes - watchList.AddItem(12U, MemSize::Double32); + watchList.AddItem(12U, ra::data::Memory::Size::Double32); Assert::AreEqual({3U}, watchList.Items().Count()); const auto& pItem3 = *watchList.Items().GetItemAt(2); Assert::AreEqual(std::wstring(L""), pItem3.GetRealNote()); Assert::AreEqual(12U, pItem3.GetAddress()); // adjusted to significant bytes - Assert::AreEqual(MemSize::Double32, pItem3.GetSize()); - Assert::AreEqual(MemFormat::Hex, pItem3.GetFormat()); // default to preference + Assert::AreEqual(ra::data::Memory::Size::Double32, pItem3.GetSize()); + Assert::AreEqual(ra::data::Memory::Format::Hex, pItem3.GetFormat()); // default to preference Assert::AreEqual(std::wstring(L"-2.0"), pItem3.GetCurrentValue()); Assert::AreEqual(std::wstring(L"0.0"), pItem3.GetPreviousValue()); Assert::AreEqual(0U, pItem3.GetChanges()); @@ -487,13 +488,13 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) std::array memory = {}; watchList.mockEmulatorContext.MockMemory(memory); - watchList.AddItem(1U, MemSize::Text); + watchList.AddItem(1U, ra::data::Memory::Size::Text); Assert::AreEqual({ 1U }, watchList.Items().Count()); const auto& pItem = *watchList.Items().GetItemAt(0); Assert::AreEqual(std::wstring(L""), pItem.GetRealNote()); Assert::AreEqual(1U, pItem.GetAddress()); - Assert::AreEqual(MemSize::Text, pItem.GetSize()); + Assert::AreEqual(ra::data::Memory::Size::Text, pItem.GetSize()); Assert::AreEqual(std::wstring(L""), pItem.GetCurrentValue()); Assert::AreEqual(std::wstring(L""), pItem.GetPreviousValue()); Assert::AreEqual(0U, pItem.GetChanges()); @@ -533,9 +534,9 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) std::array memory = {}; watchList.mockEmulatorContext.MockMemory(memory); - watchList.AddItem(1U, MemSize::EightBit); - watchList.AddItem(1U, MemSize::SixteenBit); - watchList.AddItem(1U, MemSize::Bit_3); + watchList.AddItem(1U, ra::data::Memory::Size::EightBit); + watchList.AddItem(1U, ra::data::Memory::Size::SixteenBit); + watchList.AddItem(1U, ra::data::Memory::Size::Bit_3); Assert::AreEqual({ 3U }, watchList.Items().Count()); auto& pItem1 = *watchList.Items().GetItemAt(0); @@ -581,9 +582,9 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) std::array memory = {}; watchList.mockEmulatorContext.MockMemory(memory); - watchList.AddItem(4U, MemSize::Float); - watchList.AddItem(8U, MemSize::MBF32); - watchList.AddItem(12U, MemSize::Double32); + watchList.AddItem(4U, ra::data::Memory::Size::Float); + watchList.AddItem(8U, ra::data::Memory::Size::MBF32); + watchList.AddItem(12U, ra::data::Memory::Size::Double32); Assert::AreEqual({ 3U }, watchList.Items().Count()); auto& pItem1 = *watchList.Items().GetItemAt(0); @@ -642,7 +643,7 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) watchList.mockGameContext.SetGameId(3U); - watchList.AddItem(0x0010, MemSize::ThirtyTwoBit); + watchList.AddItem(0x0010, ra::data::Memory::Size::ThirtyTwoBit); Assert::AreEqual({1U}, watchList.Items().Count()); auto& pItem = *watchList.Items().GetItemAt(0); @@ -650,25 +651,25 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) pItem.UpdateCurrentValue(); Assert::AreEqual(std::wstring(L"42883efa"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::Float); + pItem.SetSize(ra::data::Memory::Size::Float); Assert::AreEqual(std::wstring(L"68.123001"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::ThirtyTwoBitBigEndian); + pItem.SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e8842"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::TwentyFourBitBigEndian); + pItem.SetSize(ra::data::Memory::Size::TwentyFourBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e88"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::SixteenBitBigEndian); + pItem.SetSize(ra::data::Memory::Size::SixteenBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::EightBit); + pItem.SetSize(ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"fa"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::SixteenBit); + pItem.SetSize(ra::data::Memory::Size::SixteenBit); Assert::AreEqual(std::wstring(L"3efa"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::TwentyFourBit); + pItem.SetSize(ra::data::Memory::Size::TwentyFourBit); Assert::AreEqual(std::wstring(L"883efa"), pItem.GetCurrentValue()); } @@ -694,25 +695,25 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) pItem.UpdateCurrentValue(); Assert::AreEqual(std::wstring(L"42883efa"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::Float); + pItem.SetSize(ra::data::Memory::Size::Float); Assert::AreEqual(std::wstring(L"68.123001"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::ThirtyTwoBitBigEndian); + pItem.SetSize(ra::data::Memory::Size::ThirtyTwoBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e8842"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::TwentyFourBitBigEndian); + pItem.SetSize(ra::data::Memory::Size::TwentyFourBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e88"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::SixteenBitBigEndian); + pItem.SetSize(ra::data::Memory::Size::SixteenBitBigEndian); Assert::AreEqual(std::wstring(L"fa3e"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::EightBit); + pItem.SetSize(ra::data::Memory::Size::EightBit); Assert::AreEqual(std::wstring(L"fa"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::SixteenBit); + pItem.SetSize(ra::data::Memory::Size::SixteenBit); Assert::AreEqual(std::wstring(L"3efa"), pItem.GetCurrentValue()); - pItem.SetSize(MemSize::TwentyFourBit); + pItem.SetSize(ra::data::Memory::Size::TwentyFourBit); Assert::AreEqual(std::wstring(L"883efa"), pItem.GetCurrentValue()); } }; diff --git a/tests/ui/viewmodels/PointerInspectorViewModel_Tests.cpp b/tests/ui/viewmodels/PointerInspectorViewModel_Tests.cpp index f8850c442..65a7e7fca 100644 --- a/tests/ui/viewmodels/PointerInspectorViewModel_Tests.cpp +++ b/tests/ui/viewmodels/PointerInspectorViewModel_Tests.cpp @@ -9,6 +9,7 @@ #include "tests\RA_UnitTestHelpers.h" #include "tests\devkit\services\mocks\MockThreadPool.hh" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockClipboard.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" @@ -72,15 +73,15 @@ TEST_CLASS(PointerInspectorViewModel_Tests) PointerInspectorViewModel::DoFrame(); } - const std::wstring* FindCodeNote(ra::ByteAddress nAddress) const + const std::wstring* FindCodeNote(ra::data::ByteAddress nAddress) const { const auto* pCodeNotes = mockGameContext.Assets().FindCodeNotes(); return (pCodeNotes != nullptr) ? pCodeNotes->FindCodeNote(nAddress) : nullptr; } - void AssertField(gsl::index nIndex, int32_t nOffset, ra::ByteAddress nAddress, + void AssertField(gsl::index nIndex, int32_t nOffset, ra::data::ByteAddress nAddress, const std::wstring& sOffset, const std::wstring& sDescription, - MemSize nSize, MemFormat nFormat, const std::wstring& sCurrentValue) + ra::data::Memory::Size nSize, ra::data::Memory::Format nFormat, const std::wstring& sCurrentValue) { const auto* pField = Fields().Items().GetItemAt(nIndex); Assert::IsNotNull(pField); @@ -103,7 +104,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) } void AssertPointerChain(gsl::index nIndex, const std::wstring& sOffset, - ra::ByteAddress nAddress, const std::wstring& sDescription, + ra::data::ByteAddress nAddress, const std::wstring& sDescription, const std::wstring& sValue) { const auto* pPointer = PointerChain().GetItemAt(nIndex); @@ -139,7 +140,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(ra::ui::Color(0xFFFFC0C0).ARGB, pPointer->GetRowColor().ARGB); } - void AssertNote(ra::ByteAddress nAddress, const std::wstring& sExpectedNote) + void AssertNote(ra::data::ByteAddress nAddress, const std::wstring& sExpectedNote) { const auto* pNote = mockGameContext.Assets().FindCodeNotes()->FindCodeNoteModel(nAddress); Assert::IsNotNull(pNote); @@ -232,8 +233,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual({ 2U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 4, 16U, L"+0004", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); - inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 4, 16U, L"+0004", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); + inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); } TEST_METHOD(TestSetCurrentAddressWithMultiLinePointerNote) @@ -262,9 +263,9 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual({ 2U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 4, 16U, L"+0004", L"Class", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); + inspector.AssertField(0, 4, 16U, L"+0004", L"Class", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); inspector.AssertFieldFullNote(0, L"[32-bit] Class\r\n1=Wizard\r\n2=Fighter"); - inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); inspector.AssertFieldFullNote(1, L"[32-bit] Max HP"); } @@ -414,10 +415,10 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(PointerInspectorViewModel::PointerNodeViewModel::RootNodeId, inspector.GetSelectedNode()); Assert::AreEqual(std::wstring(L"[8-bit pointer] Player data"), inspector.GetCurrentAddressNote()); Assert::AreEqual({4U}, inspector.Fields().Items().Count()); - inspector.AssertField(0, 0, 0x0CU, L"+0000", L"[pointer] Row 1", MemSize::EightBit, MemFormat::Hex, L"14"); - inspector.AssertField(1, 8, 0x14U, L"+0008", L"[pointer] Row 2", MemSize::EightBit, MemFormat::Hex, L"1c"); - inspector.AssertField(2, 16, 0x1CU, L"+0010", L"[pointer] Row 3", MemSize::EightBit, MemFormat::Hex, L"24"); - inspector.AssertField(3, 24, 0x24U, L"+0018", L"Generic data", MemSize::EightBit, MemFormat::Dec, L"44"); + inspector.AssertField(0, 0, 0x0CU, L"+0000", L"[pointer] Row 1", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Hex, L"14"); + inspector.AssertField(1, 8, 0x14U, L"+0008", L"[pointer] Row 2", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Hex, L"1c"); + inspector.AssertField(2, 16, 0x1CU, L"+0010", L"[pointer] Row 3", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Hex, L"24"); + inspector.AssertField(3, 24, 0x24U, L"+0018", L"Generic data", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Dec, L"44"); Assert::AreEqual({1U}, inspector.PointerChain().Count()); inspector.AssertPointerChain(0, L"", 0x04, L"Player data", L"0c"); @@ -435,9 +436,9 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(0x00000000, inspector.GetSelectedNode()); Assert::AreEqual(std::wstring(L"[8-bit pointer] Row 1"), inspector.GetCurrentAddressNote()); Assert::AreEqual({3U}, inspector.Fields().Items().Count()); - inspector.AssertField(0, 0, 0x14U, L"+0000", L"Column 1a", MemSize::EightBit, MemFormat::Dec, L"28"); - inspector.AssertField(1, 4, 0x18U, L"+0004", L"[pointer] Column 1b", MemSize::EightBit, MemFormat::Hex, L"20"); - inspector.AssertField(2, 8, 0x1CU, L"+0008", L"Column 1c", MemSize::EightBit, MemFormat::Dec, L"36"); + inspector.AssertField(0, 0, 0x14U, L"+0000", L"Column 1a", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Dec, L"28"); + inspector.AssertField(1, 4, 0x18U, L"+0004", L"[pointer] Column 1b", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Hex, L"20"); + inspector.AssertField(2, 8, 0x1CU, L"+0008", L"Column 1c", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Dec, L"36"); Assert::AreEqual({2U}, inspector.PointerChain().Count()); inspector.AssertPointerChain(0, L"", 0x04, L"Player data", L"0c"); @@ -529,14 +530,14 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+8: [32-bit] Max HP"); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); inspector.Fields().Items().GetItemAt(0)->SetSelected(true); Assert::AreEqual(std::wstring(L"[32-bit] Max HP"), inspector.GetCurrentFieldNote()); inspector.SetCurrentFieldNote(L"[32-bit] Current HP"); Assert::AreEqual(std::wstring(L"[32-bit] Current HP"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); inspector.AssertNote({4U}, std::wstring(L"[32-bit pointer] Player data\r\n+0x08: [32-bit] Current HP")); } @@ -562,14 +563,14 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+8: [32-bit] Max HP"); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 4, 16, L"+0004", L"Class", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); + inspector.AssertField(0, 4, 16, L"+0004", L"Class", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); inspector.Fields().Items().GetItemAt(0)->SetSelected(true); Assert::AreEqual(std::wstring(L"[32-bit] Class\r\n1=Wizard\r\n2=Fighter"), inspector.GetCurrentFieldNote()); inspector.SetCurrentFieldNote(L"[32-bit] Class\r\n1=Mage\r\n2=Fighter"); Assert::AreEqual(std::wstring(L"[32-bit] Class\r\n1=Mage\r\n2=Fighter"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 4, 16, L"+0004", L"Class", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); + inspector.AssertField(0, 4, 16, L"+0004", L"Class", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); inspector.AssertNote({4U}, std::wstring(L"[32-bit pointer] Player data\r\n+0x04: [32-bit] Class\r\n1=Mage\r\n2=Fighter\r\n+0x08: [32-bit] Max HP")); } @@ -596,14 +597,14 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.SetSelectedNode(0x0000000C); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 32, L"+0008", L"First item", MemSize::SixteenBit, MemFormat::Dec, L"32"); + inspector.AssertField(0, 8, 32, L"+0008", L"First item", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"32"); inspector.Fields().Items().GetItemAt(0)->SetSelected(true); Assert::AreEqual(std::wstring(L"[16-bit] First item"), inspector.GetCurrentFieldNote()); inspector.SetCurrentFieldNote(L"[16-bit] 1st item"); Assert::AreEqual(std::wstring(L"[16-bit] 1st item"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 32, L"+0008", L"1st item", MemSize::SixteenBit, MemFormat::Dec, L"32"); + inspector.AssertField(0, 8, 32, L"+0008", L"1st item", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"32"); inspector.AssertNote({4U}, std::wstring(L"[32-bit pointer] Player data\r\n+0x08: [32-bit] Max HP\r\n+0x0C: [32-bit pointer] Inventory\r\n" L"++0x08: [16-bit] 1st item\r\n++0x0A: [16-bit] Second item")); @@ -628,7 +629,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+12: [32-bit] Current HP"); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); inspector.Fields().Items().GetItemAt(0)->SetSelected(true); Assert::AreEqual(std::wstring(L"[32-bit] Max HP"), inspector.GetCurrentFieldNote()); @@ -636,8 +637,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) // update size via current note inspector.SetCurrentFieldNote(L"[16-bit] Max HP"); Assert::AreEqual(std::wstring(L"[16-bit] Max HP"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::SixteenBit, MemFormat::Dec, L"20"); - inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"24"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"20"); + inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"24"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -645,10 +646,10 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+0x0C: [32-bit] Current HP")); // update size via field row (selected row) - inspector.Fields().Items().GetItemAt(0)->SetSize(MemSize::TwentyFourBit); + inspector.Fields().Items().GetItemAt(0)->SetSize(ra::data::Memory::Size::TwentyFourBit); Assert::AreEqual(std::wstring(L"[24-bit] Max HP"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::TwentyFourBit, MemFormat::Dec, L"20"); - inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"24"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::TwentyFourBit, ra::data::Memory::Format::Dec, L"20"); + inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"24"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -656,10 +657,10 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+0x0C: [32-bit] Current HP")); // update size via field row (unselected row) - inspector.Fields().Items().GetItemAt(1)->SetSize(MemSize::TwentyFourBit); + inspector.Fields().Items().GetItemAt(1)->SetSize(ra::data::Memory::Size::TwentyFourBit); Assert::AreEqual(std::wstring(L"[24-bit] Max HP"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::TwentyFourBit, MemFormat::Dec, L"20"); - inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", MemSize::TwentyFourBit, MemFormat::Dec, L"24"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::TwentyFourBit, ra::data::Memory::Format::Dec, L"20"); + inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", ra::data::Memory::Size::TwentyFourBit, ra::data::Memory::Format::Dec, L"24"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -692,7 +693,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+12: [32-bit] Current HP"); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 0, 12, L"+0000", L"Name", MemSize::Text, MemFormat::Dec, L"Name2"); + inspector.AssertField(0, 0, 12, L"+0000", L"Name", ra::data::Memory::Size::Text, ra::data::Memory::Format::Dec, L"Name2"); inspector.Fields().Items().GetItemAt(0)->SetSelected(true); Assert::AreEqual(std::wstring(L"[8-byte ASCII] Name"), inspector.GetCurrentFieldNote()); @@ -700,8 +701,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) // update size via current note inspector.SetCurrentFieldNote(L"[10-byte ASCII] Name"); Assert::AreEqual(std::wstring(L"[10-byte ASCII] Name"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 0, 12, L"+0000", L"Name", MemSize::Text, MemFormat::Dec, L"Name2"); - inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"24"); + inspector.AssertField(0, 0, 12, L"+0000", L"Name", ra::data::Memory::Size::Text, ra::data::Memory::Format::Dec, L"Name2"); + inspector.AssertField(1, 12, 24, L"+000c", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"24"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -731,7 +732,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(std::wstring(L"[32-bit pointer] Player data"), inspector.Nodes().GetItemAt(0)->GetLabel()); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); inspector.Fields().Items().GetItemAt(0)->SetSelected(true); Assert::AreEqual(std::wstring(L"[32-bit] Max HP"), inspector.GetCurrentFieldNote()); @@ -739,7 +740,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) // convert to pointer by updating current note inspector.SetCurrentFieldNote(L"[32-bit pointer] Max HP"); Assert::AreEqual(std::wstring(L"[32-bit pointer] Max HP"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 20, L"+0008", L"[pointer] Max HP", MemSize::ThirtyTwoBit, MemFormat::Hex, L"00000014"); + inspector.AssertField(0, 8, 20, L"+0008", L"[pointer] Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Hex, L"00000014"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -754,7 +755,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) // convert back to non-pointer by updating current note inspector.SetCurrentFieldNote(L"[32-bit] Max HP"); Assert::AreEqual(std::wstring(L"[32-bit] Max HP"), inspector.GetCurrentFieldNote()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -783,14 +784,14 @@ TEST_CLASS(PointerInspectorViewModel_Tests) L"+8: [32-bit] Max HP"); Assert::AreEqual({4U}, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 8, 20, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); auto* pField = inspector.Fields().Items().GetItemAt(0); Expects(pField != nullptr); pField->SetOffset(L"+000c"); Assert::AreEqual(std::wstring(L"+000c"), pField->GetOffset()); - inspector.AssertField(0, 12, 24, L"+000c", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"24"); + inspector.AssertField(0, 12, 24, L"+000c", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"24"); inspector.AssertNote({4U}, std::wstring(L"[32-bit pointer] Player data\r\n+0x0C: [32-bit] Max HP")); } @@ -817,7 +818,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.SetSelectedNode(0x0000000C); Assert::AreEqual({4U}, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 32, L"+0008", L"First item", MemSize::SixteenBit, MemFormat::Dec, L"32"); + inspector.AssertField(0, 8, 32, L"+0008", L"First item", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"32"); // position does not change auto* pField = inspector.Fields().Items().GetItemAt(0); @@ -828,7 +829,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(0, inspector.GetSingleSelectionIndex()); Assert::AreEqual(std::wstring(L"+0004"), pField->GetOffset()); - inspector.AssertField(0, 4, 28, L"+0004", L"First item", MemSize::SixteenBit, MemFormat::Dec, L"28"); + inspector.AssertField(0, 4, 28, L"+0004", L"First item", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"28"); inspector.AssertNote( {4U}, std::wstring( @@ -842,7 +843,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(1, inspector.GetSingleSelectionIndex()); Assert::AreEqual(std::wstring(L"+0010"), pField->GetOffset()); - inspector.AssertField(1, 16, 40, L"+0010", L"First item", MemSize::SixteenBit, MemFormat::Dec, L"40"); + inspector.AssertField(1, 16, 40, L"+0010", L"First item", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"40"); inspector.AssertNote( {4U}, std::wstring( @@ -878,7 +879,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(PointerInspectorViewModel::PointerNodeViewModel::RootNodeId, inspector.GetSelectedNode()); Assert::AreEqual(std::wstring(L"[8-bit pointer] Player data"), inspector.GetCurrentAddressNote()); - inspector.AssertField(1, 8, 0x14U, L"+0008", L"[pointer] Row 2", MemSize::EightBit, MemFormat::Hex, L"1c"); + inspector.AssertField(1, 8, 0x14U, L"+0008", L"[pointer] Row 2", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Hex, L"1c"); inspector.CopyDefinition(); Assert::AreEqual(std::wstring(), inspector.mockClipboard.GetText()); @@ -890,7 +891,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.SetSelectedNode(0x01000004); Assert::AreEqual(0x01000004, inspector.GetSelectedNode()); Assert::AreEqual(std::wstring(L"[8-bit pointer] Column 1b"), inspector.GetCurrentAddressNote()); - inspector.AssertField(0, 0, 0x20U, L"+0000", L"Column 1a", MemSize::EightBit, MemFormat::Dec, L"40"); + inspector.AssertField(0, 0, 0x20U, L"+0000", L"Column 1a", ra::data::Memory::Size::EightBit, ra::data::Memory::Format::Dec, L"40"); inspector.CopyDefinition(); Assert::AreEqual(std::wstring(), inspector.mockClipboard.GetText()); @@ -922,8 +923,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(std::wstring(L"[32-bit pointer] Player data"), inspector.GetCurrentAddressNote()); Assert::AreEqual({2U}, inspector.Fields().Items().Count()); - inspector.AssertField(0, 4, 16U, L"+0004", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); - inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"20"); + inspector.AssertField(0, 4, 16U, L"+0004", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); + inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"20"); Assert::AreEqual({1U}, inspector.PointerChain().Count()); inspector.AssertPointerChain(0, L"", 0x04, L"Player data", L"0000000c"); @@ -932,8 +933,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) memory.at(17) = 1; memory.at(20) = 99; inspector.DoFrame(); - inspector.AssertField(0, 4, 16U, L"+0004", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"272"); - inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"99"); + inspector.AssertField(0, 4, 16U, L"+0004", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"272"); + inspector.AssertField(1, 8, 20U, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"99"); Assert::AreEqual({1U}, inspector.PointerChain().Count()); inspector.AssertPointerChain(0, L"", 0x04, L"Player data", L"0000000c"); @@ -941,8 +942,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) // pointer changes memory.at(4) = 13; inspector.DoFrame(); - inspector.AssertField(0, 4, 17U, L"+0004", L"Current HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"1660944385"); - inspector.AssertField(1, 8, 21U, L"+0008", L"Max HP", MemSize::ThirtyTwoBit, MemFormat::Dec, L"402653184"); + inspector.AssertField(0, 4, 17U, L"+0004", L"Current HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"1660944385"); + inspector.AssertField(1, 8, 21U, L"+0008", L"Max HP", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"402653184"); Assert::AreEqual({1U}, inspector.PointerChain().Count()); inspector.AssertPointerChain(0, L"", 0x04, L"Player data", L"0000000d"); @@ -989,9 +990,9 @@ TEST_CLASS(PointerInspectorViewModel_Tests) // all pointers are good Assert::AreEqual({2U}, inspector.Fields().Items().Count()); inspector.AssertField(0, 0, 0x20U, L"+0000", L"Current HP", // 20+00=20 (0x56 => 86) - MemSize::ThirtyTwoBit, MemFormat::Dec, L"86"); + ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"86"); inspector.AssertField(1, 8, 0x28U, L"+0008", L"Max HP", // 20+08=28 (0x64 => 100) - MemSize::ThirtyTwoBit, MemFormat::Dec, L"100"); + ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"100"); Assert::AreEqual({3U}, inspector.PointerChain().Count()); inspector.AssertPointerChain(0, L"", 0x04, L"Player data", L"0000000c"); // 04 (0C) @@ -1012,9 +1013,9 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.AssertPointerChainAddressNull(1); inspector.AssertPointerChainAddressValid(2); inspector.AssertField(0, 0, 0x08U, L"+0000", L"Current HP", // 08+00=08 (08) - MemSize::ThirtyTwoBit, MemFormat::Dec, L"8"); + ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"8"); inspector.AssertField(1, 8, 0x10U, L"+0008", L"Max HP", // 08+08=10 (00) - MemSize::ThirtyTwoBit, MemFormat::Dec, L"0"); + ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"0"); // third level is out of range memory.at(0x0004) = 0x20; @@ -1027,9 +1028,9 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.AssertPointerChainAddressInvalid(1); inspector.AssertPointerChainAddressNull(2); inspector.AssertField(0, 0, 0x00U, L"+0000", L"Current HP", // 00+00=00 (00) - MemSize::ThirtyTwoBit, MemFormat::Dec, L"0"); + ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"0"); inspector.AssertField(1, 8, 0x08U, L"+0008", L"Max HP", // 00+08=08 (08) - MemSize::ThirtyTwoBit, MemFormat::Dec, L"8"); + ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"8"); } TEST_METHOD(TestNewFieldEmpty) @@ -1058,12 +1059,12 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.NewField(); Assert::AreEqual({ 1U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 0, 12, L"+0000", L"", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); + inspector.AssertField(0, 0, 12, L"+0000", L"", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); inspector.NewField(); Assert::AreEqual({ 2U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 0, 12, L"+0000", L"", MemSize::ThirtyTwoBit, MemFormat::Dec, L"16"); - inspector.AssertField(1, 4, 16, L"+0004", L"", MemSize::ThirtyTwoBit, MemFormat::Dec, L"256"); + inspector.AssertField(0, 0, 12, L"+0000", L"", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"16"); + inspector.AssertField(1, 4, 16, L"+0004", L"", ra::data::Memory::Size::ThirtyTwoBit, ra::data::Memory::Format::Dec, L"256"); // note should not be updated until description or offset changed inspector.AssertNote({ 4U }, std::wstring(L"[32-bit pointer] Player data\r\n")); @@ -1095,12 +1096,12 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.NewField(); Assert::AreEqual({ 1U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 0, 12, L"+0000", L"", MemSize::ThirtyTwoBitBigEndian, MemFormat::Dec, L"16"); + inspector.AssertField(0, 0, 12, L"+0000", L"", ra::data::Memory::Size::ThirtyTwoBitBigEndian, ra::data::Memory::Format::Dec, L"16"); inspector.NewField(); Assert::AreEqual({ 2U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 0, 12, L"+0000", L"", MemSize::ThirtyTwoBitBigEndian, MemFormat::Dec, L"16"); - inspector.AssertField(1, 4, 16, L"+0004", L"", MemSize::ThirtyTwoBitBigEndian, MemFormat::Dec, L"256"); + inspector.AssertField(0, 0, 12, L"+0000", L"", ra::data::Memory::Size::ThirtyTwoBitBigEndian, ra::data::Memory::Format::Dec, L"16"); + inspector.AssertField(1, 4, 16, L"+0004", L"", ra::data::Memory::Size::ThirtyTwoBitBigEndian, ra::data::Memory::Format::Dec, L"256"); } TEST_METHOD(TestNewFieldSized) @@ -1127,12 +1128,12 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); Assert::AreEqual(std::wstring(L"0x0004"), inspector.GetCurrentAddressText()); Assert::AreEqual({ 1U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", MemSize::SixteenBit, MemFormat::Dec, L"16"); + inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"16"); inspector.NewField(); Assert::AreEqual({ 2U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", MemSize::SixteenBit, MemFormat::Dec, L"16"); - inspector.AssertField(1, 10, 22, L"+000a", L"", MemSize::SixteenBit, MemFormat::Dec, L"22"); + inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"16"); + inspector.AssertField(1, 10, 22, L"+000a", L"", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"22"); // note should not be updated until description or offset changed inspector.AssertNote({ 4U }, std::wstring( @@ -1143,8 +1144,8 @@ TEST_CLASS(PointerInspectorViewModel_Tests) Assert::AreEqual(std::wstring(L"[16-bit]"), inspector.GetCurrentFieldNote()); inspector.SetCurrentFieldNote(L"[16-bit] Max HP"); Assert::AreEqual({ 2U }, inspector.Fields().Items().Count()); - inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", MemSize::SixteenBit, MemFormat::Dec, L"16"); - inspector.AssertField(1, 10, 22, L"+000a", L"Max HP", MemSize::SixteenBit, MemFormat::Dec, L"22"); + inspector.AssertField(0, 8, 20, L"+0008", L"Current HP", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"16"); + inspector.AssertField(1, 10, 22, L"+000a", L"Max HP", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"22"); inspector.AssertNote({ 4U }, std::wstring( L"[32-bit pointer] Player data\r\n" @@ -1174,7 +1175,7 @@ TEST_CLASS(PointerInspectorViewModel_Tests) inspector.SetSelectedNode(0x0000000C); Assert::AreEqual({ 4U }, inspector.GetCurrentAddress()); - inspector.AssertField(0, 8, 32, L"+0008", L"First item", MemSize::SixteenBit, MemFormat::Dec, L"32"); + inspector.AssertField(0, 8, 32, L"+0008", L"First item", ra::data::Memory::Size::SixteenBit, ra::data::Memory::Format::Dec, L"32"); // position does not change auto* pField = inspector.Fields().Items().GetItemAt(0); diff --git a/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp index bbd6ec3fe..9dcea1dac 100644 --- a/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp @@ -7,6 +7,7 @@ #include "ui\viewmodels\TriggerViewModel.hh" #include "tests\RA_UnitTestHelpers.h" +#include "tests\devkit\testutil\MemoryAsserts.hh" #include "tests\mocks\MockConfiguration.hh" #include "tests\mocks\MockConsoleContext.hh" #include "tests\mocks\MockEmulatorContext.hh" @@ -101,11 +102,11 @@ TEST_CLASS(TriggerConditionViewModel_Tests) Assert::AreEqual(1, vmCondition.GetIndex()); Assert::AreEqual(TriggerConditionType::Standard, vmCondition.GetType()); Assert::AreEqual(TriggerOperandType::Address, vmCondition.GetSourceType()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); Assert::AreEqual(std::wstring(L"0"), vmCondition.GetSourceValue()); Assert::AreEqual(TriggerOperatorType::Equals, vmCondition.GetOperator()); Assert::AreEqual(TriggerOperandType::Value, vmCondition.GetTargetType()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); Assert::AreEqual(std::wstring(L"0"), vmCondition.GetTargetValue()); Assert::AreEqual(0U, vmCondition.GetCurrentHits()); Assert::AreEqual(0U, vmCondition.GetRequiredHits()); @@ -120,91 +121,91 @@ TEST_CLASS(TriggerConditionViewModel_Tests) TEST_METHOD(TestHasSourceSize) { TriggerConditionViewModelHarness vmCondition; - vmCondition.SetTargetSize(MemSize::SixteenBit); + vmCondition.SetTargetSize(ra::data::Memory::Size::SixteenBit); Assert::AreEqual(TriggerOperandType::Address, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); // initial size is 8-bit + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); // initial size is 8-bit vmCondition.SetSourceType(TriggerOperandType::BCD); Assert::AreEqual(TriggerOperandType::BCD, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Delta); Assert::AreEqual(TriggerOperandType::Delta, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Prior); Assert::AreEqual(TriggerOperandType::Prior, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Inverted); Assert::AreEqual(TriggerOperandType::Inverted, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Recall); Assert::AreEqual(TriggerOperandType::Recall, vmCondition.GetSourceType()); Assert::IsFalse(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Value); Assert::AreEqual(TriggerOperandType::Value, vmCondition.GetSourceType()); Assert::IsFalse(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetSourceSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetSourceSize()); // value always 32-bit vmCondition.SetSourceType(TriggerOperandType::Address); Assert::AreEqual(TriggerOperandType::Address, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceSize()); - Assert::AreEqual(MemSize::SixteenBit, vmCondition.GetSourceSize()); // copied from target size + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, vmCondition.GetSourceSize()); // copied from target size } TEST_METHOD(TestHasSourceValue) { TriggerConditionViewModelHarness vmCondition; - vmCondition.SetTargetSize(MemSize::SixteenBit); + vmCondition.SetTargetSize(ra::data::Memory::Size::SixteenBit); Assert::AreEqual(TriggerOperandType::Address, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); // initial size is 8-bit + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); // initial size is 8-bit vmCondition.SetSourceType(TriggerOperandType::BCD); Assert::AreEqual(TriggerOperandType::BCD, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Delta); Assert::AreEqual(TriggerOperandType::Delta, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Prior); Assert::AreEqual(TriggerOperandType::Prior, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Inverted); Assert::AreEqual(TriggerOperandType::Inverted, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Recall); Assert::AreEqual(TriggerOperandType::Recall, vmCondition.GetSourceType()); Assert::IsFalse(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetSourceSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetSourceSize()); vmCondition.SetSourceType(TriggerOperandType::Value); Assert::AreEqual(TriggerOperandType::Value, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetSourceSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetSourceSize()); // value always 32-bit vmCondition.SetSourceType(TriggerOperandType::Address); Assert::AreEqual(TriggerOperandType::Address, vmCondition.GetSourceType()); Assert::IsTrue(vmCondition.HasSourceValue()); - Assert::AreEqual(MemSize::SixteenBit, vmCondition.GetSourceSize()); // copied from target size + Assert::AreEqual(ra::data::Memory::Size::SixteenBit, vmCondition.GetSourceSize()); // copied from target size } TEST_METHOD(TestHasTarget) @@ -269,12 +270,12 @@ TEST_CLASS(TriggerConditionViewModel_Tests) Assert::AreEqual(TriggerOperatorType::Equals, vmCondition.GetOperator()); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsTrue(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetTargetType(TriggerOperandType::Address); Assert::IsTrue(vmCondition.HasTargetSize()); Assert::IsTrue(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetOperator(TriggerOperatorType::None); Assert::IsFalse(vmCondition.HasTargetSize()); @@ -283,52 +284,52 @@ TEST_CLASS(TriggerConditionViewModel_Tests) vmCondition.SetTargetType(TriggerOperandType::Value); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsFalse(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetTargetType(TriggerOperandType::Delta); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsFalse(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetOperator(TriggerOperatorType::Equals); Assert::IsTrue(vmCondition.HasTargetSize()); Assert::IsTrue(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetTargetType(TriggerOperandType::Value); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsTrue(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetTargetType(TriggerOperandType::Recall); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsTrue(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetOperator(TriggerOperatorType::None); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsFalse(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value still 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value still 32-bit vmCondition.SetTargetType(TriggerOperandType::Prior); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsFalse(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetTargetType(TriggerOperandType::Value); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsFalse(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetTargetType(TriggerOperandType::Inverted); Assert::IsFalse(vmCondition.HasTargetSize()); Assert::IsFalse(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetOperator(TriggerOperatorType::NotEquals); Assert::IsTrue(vmCondition.HasTargetSize()); Assert::IsTrue(vmCondition.HasTarget()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); } TEST_METHOD(TestHasTargetValue) @@ -337,39 +338,39 @@ TEST_CLASS(TriggerConditionViewModel_Tests) Assert::AreEqual(TriggerOperandType::Value, vmCondition.GetTargetType()); Assert::AreEqual(TriggerOperatorType::Equals, vmCondition.GetOperator()); Assert::IsTrue(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetTargetType(TriggerOperandType::Address); Assert::IsTrue(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetTargetType(TriggerOperandType::Value); Assert::IsTrue(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetTargetType(TriggerOperandType::Delta); Assert::IsTrue(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); // size copied from source + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); // size copied from source vmCondition.SetTargetType(TriggerOperandType::Inverted); Assert::IsTrue(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); vmCondition.SetTargetType(TriggerOperandType::BCD); Assert::IsTrue(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::EightBit, vmCondition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, vmCondition.GetTargetSize()); vmCondition.SetTargetType(TriggerOperandType::Recall); Assert::IsFalse(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value always 32-bit vmCondition.SetOperator(TriggerOperatorType::None); Assert::IsFalse(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); // value still 32-bit + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); // value still 32-bit vmCondition.SetOperator(TriggerOperatorType::NotEquals); Assert::IsFalse(vmCondition.HasTargetValue()); - Assert::AreEqual(MemSize::ThirtyTwoBit, vmCondition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, vmCondition.GetTargetSize()); } TEST_METHOD(TestModifyingConditionUpdatesHasTargetValue) @@ -1717,13 +1718,13 @@ TEST_CLASS(TriggerConditionViewModel_Tests) // change to address switches size to match source condition.SetTargetType(TriggerOperandType::Delta); Assert::IsTrue(condition.HasTargetSize()); - Assert::AreEqual(MemSize::EightBit, condition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::EightBit, condition.GetTargetSize()); Assert::AreEqual(std::string("0xH1234!=d0xH0008"), condition.Serialize()); // change to value sets size back to 32-bit condition.SetTargetType(TriggerOperandType::Value); Assert::IsFalse(condition.HasTargetSize()); - Assert::AreEqual(MemSize::ThirtyTwoBit, condition.GetTargetSize()); + Assert::AreEqual(ra::data::Memory::Size::ThirtyTwoBit, condition.GetTargetSize()); Assert::AreEqual(std::string("0xH1234!=8"), condition.Serialize()); } diff --git a/tests/ui/viewmodels/TriggerViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerViewModel_Tests.cpp index ccbf3903c..acac87add 100644 --- a/tests/ui/viewmodels/TriggerViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerViewModel_Tests.cpp @@ -178,53 +178,53 @@ TEST_CLASS(TriggerViewModel_Tests) Assert::AreEqual(std::wstring(L"Recall"), vmTrigger.OperandTypes().GetItemAt(7)->GetLabel()); Assert::AreEqual({ 24U }, vmTrigger.OperandSizes().Count()); - Assert::AreEqual((int)MemSize::Bit_0, vmTrigger.OperandSizes().GetItemAt(0)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_0, vmTrigger.OperandSizes().GetItemAt(0)->GetId()); Assert::AreEqual(std::wstring(L"Bit0"), vmTrigger.OperandSizes().GetItemAt(0)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_1, vmTrigger.OperandSizes().GetItemAt(1)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_1, vmTrigger.OperandSizes().GetItemAt(1)->GetId()); Assert::AreEqual(std::wstring(L"Bit1"), vmTrigger.OperandSizes().GetItemAt(1)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_2, vmTrigger.OperandSizes().GetItemAt(2)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_2, vmTrigger.OperandSizes().GetItemAt(2)->GetId()); Assert::AreEqual(std::wstring(L"Bit2"), vmTrigger.OperandSizes().GetItemAt(2)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_3, vmTrigger.OperandSizes().GetItemAt(3)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_3, vmTrigger.OperandSizes().GetItemAt(3)->GetId()); Assert::AreEqual(std::wstring(L"Bit3"), vmTrigger.OperandSizes().GetItemAt(3)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_4, vmTrigger.OperandSizes().GetItemAt(4)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_4, vmTrigger.OperandSizes().GetItemAt(4)->GetId()); Assert::AreEqual(std::wstring(L"Bit4"), vmTrigger.OperandSizes().GetItemAt(4)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_5, vmTrigger.OperandSizes().GetItemAt(5)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_5, vmTrigger.OperandSizes().GetItemAt(5)->GetId()); Assert::AreEqual(std::wstring(L"Bit5"), vmTrigger.OperandSizes().GetItemAt(5)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_6, vmTrigger.OperandSizes().GetItemAt(6)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_6, vmTrigger.OperandSizes().GetItemAt(6)->GetId()); Assert::AreEqual(std::wstring(L"Bit6"), vmTrigger.OperandSizes().GetItemAt(6)->GetLabel()); - Assert::AreEqual((int)MemSize::Bit_7, vmTrigger.OperandSizes().GetItemAt(7)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit_7, vmTrigger.OperandSizes().GetItemAt(7)->GetId()); Assert::AreEqual(std::wstring(L"Bit7"), vmTrigger.OperandSizes().GetItemAt(7)->GetLabel()); - Assert::AreEqual((int)MemSize::Nibble_Lower, vmTrigger.OperandSizes().GetItemAt(8)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Lower, vmTrigger.OperandSizes().GetItemAt(8)->GetId()); Assert::AreEqual(std::wstring(L"Lower4"), vmTrigger.OperandSizes().GetItemAt(8)->GetLabel()); - Assert::AreEqual((int)MemSize::Nibble_Upper, vmTrigger.OperandSizes().GetItemAt(9)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Upper, vmTrigger.OperandSizes().GetItemAt(9)->GetId()); Assert::AreEqual(std::wstring(L"Upper4"), vmTrigger.OperandSizes().GetItemAt(9)->GetLabel()); - Assert::AreEqual((int)MemSize::EightBit, vmTrigger.OperandSizes().GetItemAt(10)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::EightBit, vmTrigger.OperandSizes().GetItemAt(10)->GetId()); Assert::AreEqual(std::wstring(L"8-bit"), vmTrigger.OperandSizes().GetItemAt(10)->GetLabel()); - Assert::AreEqual((int)MemSize::SixteenBit, vmTrigger.OperandSizes().GetItemAt(11)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::SixteenBit, vmTrigger.OperandSizes().GetItemAt(11)->GetId()); Assert::AreEqual(std::wstring(L"16-bit"), vmTrigger.OperandSizes().GetItemAt(11)->GetLabel()); - Assert::AreEqual((int)MemSize::TwentyFourBit, vmTrigger.OperandSizes().GetItemAt(12)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::TwentyFourBit, vmTrigger.OperandSizes().GetItemAt(12)->GetId()); Assert::AreEqual(std::wstring(L"24-bit"), vmTrigger.OperandSizes().GetItemAt(12)->GetLabel()); - Assert::AreEqual((int)MemSize::ThirtyTwoBit, vmTrigger.OperandSizes().GetItemAt(13)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::ThirtyTwoBit, vmTrigger.OperandSizes().GetItemAt(13)->GetId()); Assert::AreEqual(std::wstring(L"32-bit"), vmTrigger.OperandSizes().GetItemAt(13)->GetLabel()); - Assert::AreEqual((int)MemSize::SixteenBitBigEndian, vmTrigger.OperandSizes().GetItemAt(14)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::SixteenBitBigEndian, vmTrigger.OperandSizes().GetItemAt(14)->GetId()); Assert::AreEqual(std::wstring(L"16-bit BE"), vmTrigger.OperandSizes().GetItemAt(14)->GetLabel()); - Assert::AreEqual((int)MemSize::TwentyFourBitBigEndian, vmTrigger.OperandSizes().GetItemAt(15)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::TwentyFourBitBigEndian, vmTrigger.OperandSizes().GetItemAt(15)->GetId()); Assert::AreEqual(std::wstring(L"24-bit BE"), vmTrigger.OperandSizes().GetItemAt(15)->GetLabel()); - Assert::AreEqual((int)MemSize::ThirtyTwoBitBigEndian, vmTrigger.OperandSizes().GetItemAt(16)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::ThirtyTwoBitBigEndian, vmTrigger.OperandSizes().GetItemAt(16)->GetId()); Assert::AreEqual(std::wstring(L"32-bit BE"), vmTrigger.OperandSizes().GetItemAt(16)->GetLabel()); - Assert::AreEqual((int)MemSize::BitCount, vmTrigger.OperandSizes().GetItemAt(17)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::BitCount, vmTrigger.OperandSizes().GetItemAt(17)->GetId()); Assert::AreEqual(std::wstring(L"BitCount"), vmTrigger.OperandSizes().GetItemAt(17)->GetLabel()); - Assert::AreEqual((int)MemSize::Float, vmTrigger.OperandSizes().GetItemAt(18)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Float, vmTrigger.OperandSizes().GetItemAt(18)->GetId()); Assert::AreEqual(std::wstring(L"Float"), vmTrigger.OperandSizes().GetItemAt(18)->GetLabel()); - Assert::AreEqual((int)MemSize::FloatBigEndian, vmTrigger.OperandSizes().GetItemAt(19)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::FloatBigEndian, vmTrigger.OperandSizes().GetItemAt(19)->GetId()); Assert::AreEqual(std::wstring(L"Float BE"), vmTrigger.OperandSizes().GetItemAt(19)->GetLabel()); - Assert::AreEqual((int)MemSize::Double32, vmTrigger.OperandSizes().GetItemAt(20)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Double32, vmTrigger.OperandSizes().GetItemAt(20)->GetId()); Assert::AreEqual(std::wstring(L"Double32"), vmTrigger.OperandSizes().GetItemAt(20)->GetLabel()); - Assert::AreEqual((int)MemSize::Double32BigEndian, vmTrigger.OperandSizes().GetItemAt(21)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Double32BigEndian, vmTrigger.OperandSizes().GetItemAt(21)->GetId()); Assert::AreEqual(std::wstring(L"Double32 BE"), vmTrigger.OperandSizes().GetItemAt(21)->GetLabel()); - Assert::AreEqual((int)MemSize::MBF32, vmTrigger.OperandSizes().GetItemAt(22)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::MBF32, vmTrigger.OperandSizes().GetItemAt(22)->GetId()); Assert::AreEqual(std::wstring(L"MBF32"), vmTrigger.OperandSizes().GetItemAt(22)->GetLabel()); - Assert::AreEqual((int)MemSize::MBF32LE, vmTrigger.OperandSizes().GetItemAt(23)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::MBF32LE, vmTrigger.OperandSizes().GetItemAt(23)->GetId()); Assert::AreEqual(std::wstring(L"MBF32 LE"), vmTrigger.OperandSizes().GetItemAt(23)->GetLabel()); Assert::AreEqual({ 14U }, vmTrigger.OperatorTypes().Count()); @@ -966,7 +966,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -989,7 +989,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::SixteenBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::SixteenBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -997,7 +997,7 @@ TEST_CLASS(TriggerViewModel_Tests) Assert::AreEqual(std::string("0xH1234=16_0x 0008=2312"), vmTrigger.Serialize()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(4); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::ThirtyTwoBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::ThirtyTwoBit); vmTrigger.NewCondition(); Assert::AreEqual({ 3U }, vmTrigger.Conditions().Count()); @@ -1015,7 +1015,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -1040,7 +1040,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(4); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -1066,7 +1066,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::ThirtyTwoBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::ThirtyTwoBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -1096,7 +1096,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -1130,7 +1130,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.mockGameContext.DoFrame(); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data Assert::AreEqual( std::wstring(L"[Indirect from 0x0004]\r\n[16-bit] note"), @@ -1151,7 +1151,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.NewCondition(); @@ -1162,7 +1162,7 @@ TEST_CLASS(TriggerViewModel_Tests) // second condition should be added normally (as a comparison) vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(4); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::SixteenBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::SixteenBit); vmTrigger.NewCondition(); Assert::AreEqual({ 2U }, vmTrigger.Conditions().Count()); @@ -1668,7 +1668,7 @@ TEST_CLASS(TriggerViewModel_Tests) vmTrigger.InitializeMemory(&pMemory.at(0), pMemory.size()); vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetAddress(8); - vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(MemSize::EightBit); + vmTrigger.mockWindowManager.MemoryInspector.Viewer().SetSize(ra::data::Memory::Size::EightBit); vmTrigger.mockWindowManager.MemoryInspector.Viewer().DoFrame(); // load viewer memory data vmTrigger.SetMeasuredTrackedAsPercent(true); From 5daba10245ce8759bbf6dc59cabf2f00474f84b9 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Sat, 27 Dec 2025 11:56:10 -0700 Subject: [PATCH 02/15] remove underscores from Memory::Sizes --- src/data/context/EmulatorContext.cpp | 40 +++---- src/devkit/data/Memory.cpp | 34 +++--- src/devkit/data/Memory.hh | 100 +++++++++++------ src/services/AchievementLogicSerializer.cpp | 20 ++-- src/services/Search/SearchImpl_4bit.hh | 8 +- .../viewmodels/MemoryBookmarksViewModel.cpp | 20 ++-- src/ui/viewmodels/MemorySearchViewModel.cpp | 28 ++--- .../viewmodels/MemoryWatchListViewModel.cpp | 4 +- src/ui/viewmodels/TriggerViewModel.cpp | 20 ++-- src/ui/win32/MemoryInspectorDialog.cpp | 2 +- tests/data/context/EmulatorContext_Tests.cpp | 102 +++++++++--------- tests/devkit/testutil/MemoryAsserts.hh | 20 ++-- tests/services/SearchResults_Tests.cpp | 50 ++++----- .../MemoryBookmarksViewModel_Tests.cpp | 2 +- .../MemorySearchViewModel_Tests.cpp | 16 +-- .../MemoryWatchListViewModel_Tests.cpp | 6 +- .../ui/viewmodels/TriggerViewModel_Tests.cpp | 20 ++-- 17 files changed, 263 insertions(+), 229 deletions(-) diff --git a/src/data/context/EmulatorContext.cpp b/src/data/context/EmulatorContext.cpp index cba89664c..baf12f82c 100644 --- a/src/data/context/EmulatorContext.cpp +++ b/src/data/context/EmulatorContext.cpp @@ -857,25 +857,25 @@ uint32_t EmulatorContext::ReadMemory(ra::data::ByteAddress nAddress, Memory::Siz { switch (nSize) { - case Memory::Size::Bit_0: + case Memory::Size::Bit0: return (ReadMemoryByte(nAddress) & 0x01); - case Memory::Size::Bit_1: + case Memory::Size::Bit1: return (ReadMemoryByte(nAddress) & 0x02) ? 1 : 0; - case Memory::Size::Bit_2: + case Memory::Size::Bit2: return (ReadMemoryByte(nAddress) & 0x04) ? 1 : 0; - case Memory::Size::Bit_3: + case Memory::Size::Bit3: return (ReadMemoryByte(nAddress) & 0x08) ? 1 : 0; - case Memory::Size::Bit_4: + case Memory::Size::Bit4: return (ReadMemoryByte(nAddress) & 0x10) ? 1 : 0; - case Memory::Size::Bit_5: + case Memory::Size::Bit5: return (ReadMemoryByte(nAddress) & 0x20) ? 1 : 0; - case Memory::Size::Bit_6: + case Memory::Size::Bit6: return (ReadMemoryByte(nAddress) & 0x40) ? 1 : 0; - case Memory::Size::Bit_7: + case Memory::Size::Bit7: return (ReadMemoryByte(nAddress) & 0x80) ? 1 : 0; - case Memory::Size::Nibble_Lower: + case Memory::Size::NibbleLower: return (ReadMemoryByte(nAddress) & 0x0F); - case Memory::Size::Nibble_Upper: + case Memory::Size::NibbleUpper: return ((ReadMemoryByte(nAddress) >> 4) & 0x0F); case Memory::Size::EightBit: return ReadMemoryByte(nAddress); @@ -1043,44 +1043,44 @@ void EmulatorContext::WriteMemory(ra::data::ByteAddress nAddress, Memory::Size n WriteMemory(nAddress, u.u8, 4); break; - case Memory::Size::Bit_0: + case Memory::Size::Bit0: u.u32 = (ReadMemoryByte(nAddress) & ~0x01) | (nValue & 1); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_1: + case Memory::Size::Bit1: u.u32 = (ReadMemoryByte(nAddress) & ~0x02) | ((nValue & 1) << 1); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_2: + case Memory::Size::Bit2: u.u32 = (ReadMemoryByte(nAddress) & ~0x04) | ((nValue & 1) << 2); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_3: + case Memory::Size::Bit3: u.u32 = (ReadMemoryByte(nAddress) & ~0x08) | ((nValue & 1) << 3); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_4: + case Memory::Size::Bit4: u.u32 = (ReadMemoryByte(nAddress) & ~0x10) | ((nValue & 1) << 4); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_5: + case Memory::Size::Bit5: u.u32 = (ReadMemoryByte(nAddress) & ~0x20) | ((nValue & 1) << 5); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_6: + case Memory::Size::Bit6: u.u32 = (ReadMemoryByte(nAddress) & ~0x40) | ((nValue & 1) << 6); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Bit_7: + case Memory::Size::Bit7: u.u32 = (ReadMemoryByte(nAddress) & ~0x80) | ((nValue & 1) << 7); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Nibble_Lower: + case Memory::Size::NibbleLower: u.u32 = (ReadMemoryByte(nAddress) & ~0x0F) | (nValue & 0x0F); WriteMemory(nAddress, u.u8, 1); break; - case Memory::Size::Nibble_Upper: + case Memory::Size::NibbleUpper: u.u32 = (ReadMemoryByte(nAddress) & ~0xF0) | ((nValue & 0x0F) << 4); WriteMemory(nAddress, u.u8, 1); break; diff --git a/src/devkit/data/Memory.cpp b/src/devkit/data/Memory.cpp index 28950be17..ef93901b5 100644 --- a/src/devkit/data/Memory.cpp +++ b/src/devkit/data/Memory.cpp @@ -12,16 +12,16 @@ Memory::Size Memory::SizeFromRcheevosSize(uint8_t nSize) noexcept { switch (nSize) { - case RC_MEMSIZE_BIT_0: return Size::Bit_0; - case RC_MEMSIZE_BIT_1: return Size::Bit_1; - case RC_MEMSIZE_BIT_2: return Size::Bit_2; - case RC_MEMSIZE_BIT_3: return Size::Bit_3; - case RC_MEMSIZE_BIT_4: return Size::Bit_4; - case RC_MEMSIZE_BIT_5: return Size::Bit_5; - case RC_MEMSIZE_BIT_6: return Size::Bit_6; - case RC_MEMSIZE_BIT_7: return Size::Bit_7; - case RC_MEMSIZE_LOW: return Size::Nibble_Lower; - case RC_MEMSIZE_HIGH: return Size::Nibble_Upper; + case RC_MEMSIZE_BIT_0: return Size::Bit0; + case RC_MEMSIZE_BIT_1: return Size::Bit1; + case RC_MEMSIZE_BIT_2: return Size::Bit2; + case RC_MEMSIZE_BIT_3: return Size::Bit3; + case RC_MEMSIZE_BIT_4: return Size::Bit4; + case RC_MEMSIZE_BIT_5: return Size::Bit5; + case RC_MEMSIZE_BIT_6: return Size::Bit6; + case RC_MEMSIZE_BIT_7: return Size::Bit7; + case RC_MEMSIZE_LOW: return Size::NibbleLower; + case RC_MEMSIZE_HIGH: return Size::NibbleUpper; case RC_MEMSIZE_8_BITS: return Size::EightBit; case RC_MEMSIZE_16_BITS: return Size::SixteenBit; case RC_MEMSIZE_24_BITS: return Size::TwentyFourBit; @@ -42,7 +42,7 @@ Memory::Size Memory::SizeFromRcheevosSize(uint8_t nSize) noexcept } } -static std::wstring U32ToFloatString(unsigned nValue, char nFloatType) +static std::wstring U32ToFloatString(uint32_t nValue, uint8_t nFloatType) { rc_typed_value_t value; value.type = RC_VALUE_TYPE_UNSIGNED; @@ -67,7 +67,7 @@ static std::wstring U32ToFloatString(unsigned nValue, char nFloatType) return sValue; } -std::wstring Memory::FormatValue(unsigned nValue, Memory::Size nSize, Memory::Format nFormat) +std::wstring Memory::FormatValue(uint32_t nValue, Memory::Size nSize, Memory::Format nFormat) { switch (nSize) { @@ -105,13 +105,13 @@ std::wstring Memory::FormatValue(unsigned nValue, Memory::Size nSize, Memory::Fo } } -unsigned Memory::FloatToU32(float fValue, Memory::Size nFloatType) noexcept +uint32_t Memory::FloatToU32(float fValue, Memory::Size nFloatType) noexcept { - // this leverages the fact that Windows uses IEE754 floats + // this leverages the fact that a "float" is encoded as little-endian IEE754 union u { float fValue; - unsigned nValue; + uint32_t nValue; } uUnion; uUnion.fValue = fValue; @@ -153,9 +153,9 @@ unsigned Memory::FloatToU32(float fValue, Memory::Size nFloatType) noexcept } } -float Memory::U32ToFloat(unsigned nValue, Memory::Size nFloatType) noexcept +float Memory::U32ToFloat(uint32_t nValue, Memory::Size nFloatType) noexcept { - // this leverages the fact that Windows uses IEE754 floats + // this leverages the fact that a "float" is encoded as little-endian IEE754 union u { float fValue; diff --git a/src/devkit/data/Memory.hh b/src/devkit/data/Memory.hh index a1cf15e1a..641006117 100644 --- a/src/devkit/data/Memory.hh +++ b/src/devkit/data/Memory.hh @@ -14,16 +14,16 @@ class Memory { public: enum class Size : uint8_t { - Bit_0, - Bit_1, - Bit_2, - Bit_3, - Bit_4, - Bit_5, - Bit_6, - Bit_7, - Nibble_Lower, - Nibble_Upper, + Bit0, + Bit1, + Bit2, + Bit3, + Bit4, + Bit5, + Bit6, + Bit7, + NibbleLower, + NibbleUpper, EightBit, SixteenBit, TwentyFourBit, @@ -45,29 +45,32 @@ public: Array }; + /// + /// Gets a string representation of the size (as displayed to the user). + /// static constexpr const wchar_t* SizeString(Size nSize) { switch (nSize) { - case Size::Bit_0: + case Size::Bit0: return L"Bit0"; - case Size::Bit_1: + case Size::Bit1: return L"Bit1"; - case Size::Bit_2: + case Size::Bit2: return L"Bit2"; - case Size::Bit_3: + case Size::Bit3: return L"Bit3"; - case Size::Bit_4: + case Size::Bit4: return L"Bit4"; - case Size::Bit_5: + case Size::Bit5: return L"Bit5"; - case Size::Bit_6: + case Size::Bit6: return L"Bit6"; - case Size::Bit_7: + case Size::Bit7: return L"Bit7"; - case Size::Nibble_Lower: + case Size::NibbleLower: return L"Lower4"; - case Size::Nibble_Upper: + case Size::NibbleUpper: return L"Upper4"; case Size::EightBit: return L"8-bit"; @@ -107,6 +110,9 @@ public: } } + /// + /// Gets the number of bits needed to represent a value of the specified size. + /// static constexpr unsigned int SizeBits(Size nSize) { switch (nSize) @@ -133,18 +139,18 @@ public: return 24; case Size::BitCount: // value will be 0-8 - case Size::Nibble_Lower: - case Size::Nibble_Upper: + case Size::NibbleLower: + case Size::NibbleUpper: return 4; - case Size::Bit_0: - case Size::Bit_1: - case Size::Bit_2: - case Size::Bit_3: - case Size::Bit_4: - case Size::Bit_5: - case Size::Bit_6: - case Size::Bit_7: + case Size::Bit0: + case Size::Bit1: + case Size::Bit2: + case Size::Bit3: + case Size::Bit4: + case Size::Bit5: + case Size::Bit6: + case Size::Bit7: return 1; default: @@ -152,6 +158,9 @@ public: } } + /// + /// Gets the number of bytes needed to represent a value of the specified size. + /// static constexpr unsigned int SizeBytes(Size nSize) { switch (nSize) @@ -180,6 +189,9 @@ public: } } + /// + /// Gets the maximum value that can be represented by the specified size. + /// static constexpr unsigned int SizeMax(Size nSize) { const auto nBits = SizeBits(nSize); @@ -189,6 +201,9 @@ public: return (1 << nBits) - 1; } + /// + /// Gets whether or not a size supports floating point values. + /// static constexpr bool SizeIsFloat(Size nSize) { switch (nSize) @@ -206,6 +221,9 @@ public: } } + /// + /// Gets whether or not a size is stored in memory in big-endian order. + /// static constexpr bool SizeIsBigEndian(Size nSize) { switch (nSize) @@ -223,6 +241,9 @@ public: } } + /// + /// Converts an RC_MEMSIZE_ value to a Memory::Size value. + /// static Size SizeFromRcheevosSize(uint8_t nSize) noexcept; enum class Format : uint8_t @@ -232,11 +253,24 @@ public: Unknown, }; - static std::wstring FormatValue(unsigned nValue, Size nSize, Format nFormat); + /// + /// Converts a raw 32-bits of memory into a user-friendly string value. + /// + static std::wstring FormatValue(uint32_t nValue, Size nSize, Format nFormat); - static unsigned FloatToU32(float fValue, Size nFloatType) noexcept; - static float U32ToFloat(unsigned nValue, Size nFloatType) noexcept; + /// + /// Encodes a float into a raw 32-bit memory value. + /// + static uint32_t FloatToU32(float fValue, Size nFloatType) noexcept; + /// + /// Decodes a float from a raw 32-bit memory valu. + /// + static float U32ToFloat(uint32_t nValue, Size nFloatType) noexcept; + + /// + /// Swaps the order of bytes in a 32-bit value (switches little-endian to big-endian). + /// static constexpr uint32_t ReverseBytes(uint32_t nValue) noexcept { return ((nValue & 0xFF000000) >> 24) | diff --git a/src/services/AchievementLogicSerializer.cpp b/src/services/AchievementLogicSerializer.cpp index c27b066cf..7666838ba 100644 --- a/src/services/AchievementLogicSerializer.cpp +++ b/src/services/AchievementLogicSerializer.cpp @@ -118,16 +118,16 @@ void AchievementLogicSerializer::AppendOperand(std::string& sBuffer, TriggerOper switch (nSize) { case ra::data::Memory::Size::BitCount: sBuffer.push_back('K'); break; - case ra::data::Memory::Size::Bit_0: sBuffer.push_back('M'); break; - case ra::data::Memory::Size::Bit_1: sBuffer.push_back('N'); break; - case ra::data::Memory::Size::Bit_2: sBuffer.push_back('O'); break; - case ra::data::Memory::Size::Bit_3: sBuffer.push_back('P'); break; - case ra::data::Memory::Size::Bit_4: sBuffer.push_back('Q'); break; - case ra::data::Memory::Size::Bit_5: sBuffer.push_back('R'); break; - case ra::data::Memory::Size::Bit_6: sBuffer.push_back('S'); break; - case ra::data::Memory::Size::Bit_7: sBuffer.push_back('T'); break; - case ra::data::Memory::Size::Nibble_Lower: sBuffer.push_back('L'); break; - case ra::data::Memory::Size::Nibble_Upper: sBuffer.push_back('U'); break; + case ra::data::Memory::Size::Bit0: sBuffer.push_back('M'); break; + case ra::data::Memory::Size::Bit1: sBuffer.push_back('N'); break; + case ra::data::Memory::Size::Bit2: sBuffer.push_back('O'); break; + case ra::data::Memory::Size::Bit3: sBuffer.push_back('P'); break; + case ra::data::Memory::Size::Bit4: sBuffer.push_back('Q'); break; + case ra::data::Memory::Size::Bit5: sBuffer.push_back('R'); break; + case ra::data::Memory::Size::Bit6: sBuffer.push_back('S'); break; + case ra::data::Memory::Size::Bit7: sBuffer.push_back('T'); break; + case ra::data::Memory::Size::NibbleLower: sBuffer.push_back('L'); break; + case ra::data::Memory::Size::NibbleUpper: sBuffer.push_back('U'); break; case ra::data::Memory::Size::EightBit: sBuffer.push_back('H'); break; case ra::data::Memory::Size::TwentyFourBit: sBuffer.push_back('W'); break; case ra::data::Memory::Size::ThirtyTwoBit: sBuffer.push_back('X'); break; diff --git a/src/services/Search/SearchImpl_4bit.hh b/src/services/Search/SearchImpl_4bit.hh index ceed6579e..5809b47e3 100644 --- a/src/services/Search/SearchImpl_4bit.hh +++ b/src/services/Search/SearchImpl_4bit.hh @@ -10,7 +10,7 @@ namespace search { class FourBitSearchImpl : public SearchImpl { - ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::Nibble_Lower; } + ra::data::Memory::Size GetMemSize() const noexcept override { return ra::data::Memory::Size::NibbleLower; } unsigned int GetAddressCountForBytes(unsigned int nBytes) const noexcept override { @@ -43,7 +43,7 @@ class FourBitSearchImpl : public SearchImpl bool ExcludeResult(SearchResults& srResults, const SearchResult& pResult) const override { auto nAddress = pResult.nAddress << 1; - if (pResult.nSize == ra::data::Memory::Size::Nibble_Upper) + if (pResult.nSize == ra::data::Memory::Size::NibbleUpper) nAddress |= 1; return ExcludeAddress(srResults, nAddress); @@ -113,7 +113,7 @@ protected: bool GetValueFromMemBlock(const MemBlock& block, SearchResult& result) const noexcept override { if (result.nAddress & 1) - result.nSize = ra::data::Memory::Size::Nibble_Upper; + result.nSize = ra::data::Memory::Size::NibbleUpper; result.nAddress >>= 1; @@ -123,7 +123,7 @@ protected: result.nValue = BuildValue(block.GetBytes() + nOffset); - if (result.nSize == ra::data::Memory::Size::Nibble_Lower) + if (result.nSize == ra::data::Memory::Size::NibbleLower) result.nValue &= 0x0F; else result.nValue = (result.nValue >> 4) & 0x0F; diff --git a/src/ui/viewmodels/MemoryBookmarksViewModel.cpp b/src/ui/viewmodels/MemoryBookmarksViewModel.cpp index f769e696b..961be8943 100644 --- a/src/ui/viewmodels/MemoryBookmarksViewModel.cpp +++ b/src/ui/viewmodels/MemoryBookmarksViewModel.cpp @@ -248,16 +248,16 @@ void MemoryBookmarksViewModel::LoadBookmarks(ra::services::TextReader& sBookmark // this enumerates the mapping for backwards compatibility. switch (bookmark["Size"].GetInt()) { - case 0: nSize = ra::data::Memory::Size::Bit_0; break; - case 1: nSize = ra::data::Memory::Size::Bit_1; break; - case 2: nSize = ra::data::Memory::Size::Bit_2; break; - case 3: nSize = ra::data::Memory::Size::Bit_3; break; - case 4: nSize = ra::data::Memory::Size::Bit_4; break; - case 5: nSize = ra::data::Memory::Size::Bit_5; break; - case 6: nSize = ra::data::Memory::Size::Bit_6; break; - case 7: nSize = ra::data::Memory::Size::Bit_7; break; - case 8: nSize = ra::data::Memory::Size::Nibble_Lower; break; - case 9: nSize = ra::data::Memory::Size::Nibble_Upper; break; + case 0: nSize = ra::data::Memory::Size::Bit0; break; + case 1: nSize = ra::data::Memory::Size::Bit1; break; + case 2: nSize = ra::data::Memory::Size::Bit2; break; + case 3: nSize = ra::data::Memory::Size::Bit3; break; + case 4: nSize = ra::data::Memory::Size::Bit4; break; + case 5: nSize = ra::data::Memory::Size::Bit5; break; + case 6: nSize = ra::data::Memory::Size::Bit6; break; + case 7: nSize = ra::data::Memory::Size::Bit7; break; + case 8: nSize = ra::data::Memory::Size::NibbleLower; break; + case 9: nSize = ra::data::Memory::Size::NibbleUpper; break; case 10: nSize = ra::data::Memory::Size::EightBit; break; case 11: nSize = ra::data::Memory::Size::SixteenBit; break; case 12: nSize = ra::data::Memory::Size::TwentyFourBit; break; diff --git a/src/ui/viewmodels/MemorySearchViewModel.cpp b/src/ui/viewmodels/MemorySearchViewModel.cpp index 61694c151..a29a31784 100644 --- a/src/ui/viewmodels/MemorySearchViewModel.cpp +++ b/src/ui/viewmodels/MemorySearchViewModel.cpp @@ -162,7 +162,7 @@ MemorySearchViewModel::MemorySearchViewModel() // explicitly set the Memory::Size to some non-selectable value so the first search will // trigger a PropertyChanged event. - SetValue(ResultMemSizeProperty, ra::etoi(ra::data::Memory::Size::Bit_0)); + SetValue(ResultMemSizeProperty, ra::etoi(ra::data::Memory::Size::Bit0)); } void MemorySearchViewModel::InitializeNotifyTargets() @@ -878,12 +878,12 @@ void MemorySearchViewModel::UpdateResults() auto sAddress = ra::ByteAddressToString(pResult.nAddress); switch (pResult.nSize) { - case ra::data::Memory::Size::Nibble_Lower: + case ra::data::Memory::Size::NibbleLower: sAddress.push_back('L'); pRow->nAddress <<= 1; break; - case ra::data::Memory::Size::Nibble_Upper: + case ra::data::Memory::Size::NibbleUpper: sAddress.push_back('U'); pRow->nAddress = (pRow->nAddress << 1) | 1; break; @@ -955,10 +955,10 @@ std::wstring MemorySearchViewModel::GetTooltip(const SearchResultViewModel& vmRe ra::data::ByteAddress nAddress = vmResult.nAddress; auto nSize = pCompareResults.GetSize(); - if (nSize == ra::data::Memory::Size::Nibble_Lower) + if (nSize == ra::data::Memory::Size::NibbleLower) { if (nAddress & 1) - nSize = ra::data::Memory::Size::Nibble_Upper; + nSize = ra::data::Memory::Size::NibbleUpper; nAddress >>= 1; } @@ -1125,14 +1125,14 @@ void MemorySearchViewModel::SelectRange(gsl::index nFrom, gsl::index nTo, bool b // ignore IsSelectedProperty events - we'll update the lists directly m_vResults.RemoveNotifyTarget(*this); - if (pCurrentResults.GetSize() == ra::data::Memory::Size::Nibble_Lower) + if (pCurrentResults.GetSize() == ra::data::Memory::Size::NibbleLower) { for (auto nIndex = nFrom; nIndex <= nTo; ++nIndex) { if (pCurrentResults.GetMatchingAddress(nIndex, pResult)) { auto nAddress = pResult.nAddress << 1; - if (pResult.nSize == ra::data::Memory::Size::Nibble_Upper) + if (pResult.nSize == ra::data::Memory::Size::NibbleUpper) nAddress |= 1; if (bValue) @@ -1175,12 +1175,12 @@ void MemorySearchViewModel::ExcludeSelected() ra::services::SearchResult pItem {}; const auto nSize = pCurrentResults.pResults.GetSize(); - if (nSize == ra::data::Memory::Size::Nibble_Lower) + if (nSize == ra::data::Memory::Size::NibbleLower) { for (const auto nAddress : m_vSelectedAddresses) { pItem.nAddress = nAddress >> 1; - pItem.nSize = (nAddress & 1) ? ra::data::Memory::Size::Nibble_Upper : ra::data::Memory::Size::Nibble_Lower; + pItem.nSize = (nAddress & 1) ? ra::data::Memory::Size::NibbleUpper : ra::data::Memory::Size::NibbleLower; pResult->pResults.ExcludeResult(pItem); } } @@ -1238,9 +1238,9 @@ void MemorySearchViewModel::BookmarkSelected() { switch (nSize) { - case ra::data::Memory::Size::Nibble_Lower: - case ra::data::Memory::Size::Nibble_Upper: - vmBookmarks.AddBookmark(nAddress >> 1, (nAddress & 1) ? ra::data::Memory::Size::Nibble_Upper : ra::data::Memory::Size::Nibble_Lower); + case ra::data::Memory::Size::NibbleLower: + case ra::data::Memory::Size::NibbleUpper: + vmBookmarks.AddBookmark(nAddress >> 1, (nAddress & 1) ? ra::data::Memory::Size::NibbleUpper : ra::data::Memory::Size::NibbleLower); break; default: @@ -1322,14 +1322,14 @@ void MemorySearchViewModel::SaveResults(ra::services::TextWriter& sFile, std::fu sFile.WriteLine("Address,Value,PreviousValue,InitialValue"); - if (pCompareResults.GetSize() == ra::data::Memory::Size::Nibble_Lower) + if (pCompareResults.GetSize() == ra::data::Memory::Size::NibbleLower) { for (gsl::index nIndex = 0; ra::to_unsigned(nIndex) < pResults.MatchingAddressCount(); ++nIndex) { if (!pResults.GetMatchingAddress(nIndex, pResult)) continue; - const auto nSize = (pResult.nAddress & 1) ? ra::data::Memory::Size::Nibble_Upper : ra::data::Memory::Size::Nibble_Lower; + const auto nSize = (pResult.nAddress & 1) ? ra::data::Memory::Size::NibbleUpper : ra::data::Memory::Size::NibbleLower; const auto nAddress = pResult.nAddress >> 1; sFile.WriteLine(ra::StringPrintf(L"%s%s,%s,%s,%s", diff --git a/src/ui/viewmodels/MemoryWatchListViewModel.cpp b/src/ui/viewmodels/MemoryWatchListViewModel.cpp index 833e65dbb..de14c331f 100644 --- a/src/ui/viewmodels/MemoryWatchListViewModel.cpp +++ b/src/ui/viewmodels/MemoryWatchListViewModel.cpp @@ -39,8 +39,8 @@ MemoryWatchListViewModel::MemoryWatchListViewModel() noexcept m_vSizes.Add(ra::etoi(ra::data::Memory::Size::TwentyFourBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::TwentyFourBitBigEndian)); m_vSizes.Add(ra::etoi(ra::data::Memory::Size::ThirtyTwoBitBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::ThirtyTwoBitBigEndian)); m_vSizes.Add(ra::etoi(ra::data::Memory::Size::BitCount), ra::data::Memory::SizeString(ra::data::Memory::Size::BitCount)); - m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Lower), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Lower)); - m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Upper), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Upper)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::NibbleLower), ra::data::Memory::SizeString(ra::data::Memory::Size::NibbleLower)); + m_vSizes.Add(ra::etoi(ra::data::Memory::Size::NibbleUpper), ra::data::Memory::SizeString(ra::data::Memory::Size::NibbleUpper)); m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Float), ra::data::Memory::SizeString(ra::data::Memory::Size::Float)); m_vSizes.Add(ra::etoi(ra::data::Memory::Size::FloatBigEndian), ra::data::Memory::SizeString(ra::data::Memory::Size::FloatBigEndian)); m_vSizes.Add(ra::etoi(ra::data::Memory::Size::Double32), ra::data::Memory::SizeString(ra::data::Memory::Size::Double32)); diff --git a/src/ui/viewmodels/TriggerViewModel.cpp b/src/ui/viewmodels/TriggerViewModel.cpp index d2ab73b36..790d17458 100644 --- a/src/ui/viewmodels/TriggerViewModel.cpp +++ b/src/ui/viewmodels/TriggerViewModel.cpp @@ -60,16 +60,16 @@ TriggerViewModel::TriggerViewModel() noexcept m_vOperandTypes.Add(ra::etoi(TriggerOperandType::Inverted), L"Invert"); m_vOperandTypes.Add(ra::etoi(TriggerOperandType::Recall), L"Recall"); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_0), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_0)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_1), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_1)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_2), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_2)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_3), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_3)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_4), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_4)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_5), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_5)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_6), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_6)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit_7), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit_7)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Lower), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Lower)); - m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Nibble_Upper), ra::data::Memory::SizeString(ra::data::Memory::Size::Nibble_Upper)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit0), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit0)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit1), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit1)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit2), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit2)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit3), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit3)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit4), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit4)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit5), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit5)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit6), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit6)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::Bit7), ra::data::Memory::SizeString(ra::data::Memory::Size::Bit7)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::NibbleLower), ra::data::Memory::SizeString(ra::data::Memory::Size::NibbleLower)); + m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::NibbleUpper), ra::data::Memory::SizeString(ra::data::Memory::Size::NibbleUpper)); m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::EightBit), ra::data::Memory::SizeString(ra::data::Memory::Size::EightBit)); m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::SixteenBit), ra::data::Memory::SizeString(ra::data::Memory::Size::SixteenBit)); m_vOperandSizes.Add(ra::etoi(ra::data::Memory::Size::TwentyFourBit), ra::data::Memory::SizeString(ra::data::Memory::Size::TwentyFourBit)); diff --git a/src/ui/win32/MemoryInspectorDialog.cpp b/src/ui/win32/MemoryInspectorDialog.cpp index 376482e04..f5c67806a 100644 --- a/src/ui/win32/MemoryInspectorDialog.cpp +++ b/src/ui/win32/MemoryInspectorDialog.cpp @@ -102,7 +102,7 @@ void MemoryInspectorDialog::SearchResultsGridBinding::UpdateColumnWidths() // address column nWidth = ra::ui::win32::bindings::GridAddressColumnBinding::CalculateWidth(); - if (nSize == ra::data::Memory::Size::Nibble_Lower) + if (nSize == ra::data::Memory::Size::NibbleLower) nWidth += nCharWidth; // 0x1234L m_vColumns.at(0)->SetWidth(GridColumnBinding::WidthType::Pixels, nWidth); } diff --git a/tests/data/context/EmulatorContext_Tests.cpp b/tests/data/context/EmulatorContext_Tests.cpp index b779da7fc..7841278a0 100644 --- a/tests/data/context/EmulatorContext_Tests.cpp +++ b/tests/data/context/EmulatorContext_Tests.cpp @@ -1329,17 +1329,17 @@ TEST_CLASS(EmulatorContext_Tests) emulator.AddMemoryBlock(0, 20, &ReadMemory0, &WriteMemory0); // ReadMemory calls ReadMemoryByte for small sizes - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_0))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_1))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_2))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_3))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_4))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_5))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_6))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_7))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit0))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit1))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit2))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit3))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit4))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit5))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit6))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit7))); Assert::AreEqual(3, static_cast(emulator.ReadMemory(4U, Memory::Size::BitCount))); - Assert::AreEqual(8, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Lower))); - Assert::AreEqual(10, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Upper))); + Assert::AreEqual(8, static_cast(emulator.ReadMemory(4U, Memory::Size::NibbleLower))); + Assert::AreEqual(10, static_cast(emulator.ReadMemory(4U, Memory::Size::NibbleUpper))); Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, Memory::Size::EightBit))); Assert::AreEqual(0xA8, static_cast(emulator.ReadMemory(4U, Memory::Size::SixteenBit))); Assert::AreEqual(0x2E37, static_cast(emulator.ReadMemory(6U, Memory::Size::SixteenBit))); @@ -1350,17 +1350,17 @@ TEST_CLASS(EmulatorContext_Tests) Assert::AreEqual(0xA800372EU, emulator.ReadMemory(4U, Memory::Size::ThirtyTwoBitBigEndian)); memory.at(4) ^= 0xFF; // toggle all bits and verify again - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_0))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_1))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_2))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_3))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_4))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_5))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_6))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_7))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit0))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit1))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit2))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit3))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit4))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit5))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit6))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit7))); Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::BitCount))); - Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Lower))); - Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Upper))); + Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, Memory::Size::NibbleLower))); + Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::NibbleUpper))); Assert::AreEqual(0x57, static_cast(emulator.ReadMemory(4U, Memory::Size::EightBit))); } @@ -1381,17 +1381,17 @@ TEST_CLASS(EmulatorContext_Tests) emulator.AddMemoryBlockReader(0, &ReadMemoryBlock0); // ReadMemory calls ReadMemoryByte for small sizes - should call ReadMemory1 ($4 => $14) - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_0))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_1))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_2))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_3))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_4))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_5))); - Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_6))); - Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit_7))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit0))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit1))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit2))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit3))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit4))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit5))); + Assert::AreEqual(1, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit6))); + Assert::AreEqual(0, static_cast(emulator.ReadMemory(4U, Memory::Size::Bit7))); Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::BitCount))); - Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Lower))); - Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::Nibble_Upper))); + Assert::AreEqual(7, static_cast(emulator.ReadMemory(4U, Memory::Size::NibbleLower))); + Assert::AreEqual(5, static_cast(emulator.ReadMemory(4U, Memory::Size::NibbleUpper))); Assert::AreEqual(0x57, static_cast(emulator.ReadMemory(4U, Memory::Size::EightBit))); // sizes larger than 8 bits should use the block reader ($4 => $4) @@ -1557,7 +1557,7 @@ TEST_CLASS(EmulatorContext_Tests) // write partial value nByte = 0xC4; - emulator.WriteMemory(6U, Memory::Size::Nibble_Lower, 0x04); + emulator.WriteMemory(6U, Memory::Size::NibbleLower, 0x04); Assert::AreEqual(6U, notify.nLastByteWrittenAddress); Assert::AreEqual(nByte, notify.nLastByteWritten); } @@ -1623,54 +1623,54 @@ TEST_CLASS(EmulatorContext_Tests) Assert::AreEqual((uint8_t)0x04, memory.at(8)); memory.at(4) = 0xFF; - emulator.WriteMemory(4U, Memory::Size::Bit_0, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit0, 0x00); Assert::AreEqual((uint8_t)0xFE, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_0, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit0, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_1, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit1, 0x00); Assert::AreEqual((uint8_t)0xFD, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_1, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit1, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_2, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit2, 0x00); Assert::AreEqual((uint8_t)0xFB, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_2, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit2, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_3, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit3, 0x00); Assert::AreEqual((uint8_t)0xF7, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_3, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit3, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_4, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit4, 0x00); Assert::AreEqual((uint8_t)0xEF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_4, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit4, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_5, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit5, 0x00); Assert::AreEqual((uint8_t)0xDF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_5, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit5, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_6, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit6, 0x00); Assert::AreEqual((uint8_t)0xBF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_6, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit6, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_7, 0x00); + emulator.WriteMemory(4U, Memory::Size::Bit7, 0x00); Assert::AreEqual((uint8_t)0x7F, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Bit_7, 0x01); + emulator.WriteMemory(4U, Memory::Size::Bit7, 0x01); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Nibble_Lower, 0x00); + emulator.WriteMemory(4U, Memory::Size::NibbleLower, 0x00); Assert::AreEqual((uint8_t)0xF0, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Nibble_Lower, 0x0F); + emulator.WriteMemory(4U, Memory::Size::NibbleLower, 0x0F); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Nibble_Upper, 0x00); + emulator.WriteMemory(4U, Memory::Size::NibbleUpper, 0x00); Assert::AreEqual((uint8_t)0x0F, memory.at(4)); - emulator.WriteMemory(4U, Memory::Size::Nibble_Upper, 0x0F); + emulator.WriteMemory(4U, Memory::Size::NibbleUpper, 0x0F); Assert::AreEqual((uint8_t)0xFF, memory.at(4)); emulator.WriteMemory(4U, Memory::Size::BitCount, 0x00); diff --git a/tests/devkit/testutil/MemoryAsserts.hh b/tests/devkit/testutil/MemoryAsserts.hh index 42d168f40..19fa41a33 100644 --- a/tests/devkit/testutil/MemoryAsserts.hh +++ b/tests/devkit/testutil/MemoryAsserts.hh @@ -24,25 +24,25 @@ std::wstring ToString(const ra::data::Memory::Size& t) { switch (t) { - case ra::data::Memory::Size::Bit_0: + case ra::data::Memory::Size::Bit0: return L"Bit_0"; - case ra::data::Memory::Size::Bit_1: + case ra::data::Memory::Size::Bit1: return L"Bit_1"; - case ra::data::Memory::Size::Bit_2: + case ra::data::Memory::Size::Bit2: return L"Bit_2"; - case ra::data::Memory::Size::Bit_3: + case ra::data::Memory::Size::Bit3: return L"Bit_3"; - case ra::data::Memory::Size::Bit_4: + case ra::data::Memory::Size::Bit4: return L"Bit_4"; - case ra::data::Memory::Size::Bit_5: + case ra::data::Memory::Size::Bit5: return L"Bit_5"; - case ra::data::Memory::Size::Bit_6: + case ra::data::Memory::Size::Bit6: return L"Bit_6"; - case ra::data::Memory::Size::Bit_7: + case ra::data::Memory::Size::Bit7: return L"Bit_7"; - case ra::data::Memory::Size::Nibble_Lower: + case ra::data::Memory::Size::NibbleLower: return L"Nibble_Lower"; - case ra::data::Memory::Size::Nibble_Upper: + case ra::data::Memory::Size::NibbleUpper: return L"Nibble_Upper"; case ra::data::Memory::Size::EightBit: return L"EightBit"; diff --git a/tests/services/SearchResults_Tests.cpp b/tests/services/SearchResults_Tests.cpp index 0ac6342a8..1b37dcb0d 100644 --- a/tests/services/SearchResults_Tests.cpp +++ b/tests/services/SearchResults_Tests.cpp @@ -302,32 +302,32 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(0x2U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, result.nSize); Assert::AreEqual(0x1U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(0x4U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(3U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, result.nSize); Assert::AreEqual(0x3U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(4U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(0xBU, result.nValue); Assert::IsTrue(results.GetMatchingAddress(5U, result)); Assert::AreEqual(3U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, result.nSize); Assert::AreEqual(0xAU, result.nValue); } @@ -1339,17 +1339,17 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(4U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(1U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(5U, result.nValue); Assert::IsTrue(results.GetMatchingAddress(2U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, result.nSize); Assert::AreEqual(5U, result.nValue); } @@ -1370,7 +1370,7 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(filtered1.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, result.nSize); Assert::AreEqual(1U, result.nValue); // Nibble_Upper no longer matches, but Nibble_Lower does. Neither should not be returned. @@ -1387,7 +1387,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(filtered3.GetMatchingAddress(0U, result)); Assert::AreEqual(1U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, result.nSize); Assert::AreEqual(1U, result.nValue); } @@ -1483,7 +1483,7 @@ TEST_CLASS(SearchResults_Tests) Assert::AreEqual({ 6U }, results1.MatchingAddressCount()); // exclude doesn't do anything to unfiltered results - SearchResult excludeResult{ 1U, 0U, ra::data::Memory::Size::Nibble_Lower }; + SearchResult excludeResult{ 1U, 0U, ra::data::Memory::Size::NibbleLower }; results1.ExcludeResult(excludeResult); Assert::AreEqual({ 6U }, results1.MatchingAddressCount()); @@ -1510,11 +1510,11 @@ TEST_CLASS(SearchResults_Tests) SearchResult result; Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(0x5U, result.nValue); excludeResult.nAddress = 2; - excludeResult.nSize = ra::data::Memory::Size::Nibble_Upper; + excludeResult.nSize = ra::data::Memory::Size::NibbleUpper; results.ExcludeResult(excludeResult); Assert::AreEqual({ 1U }, results.MatchingAddressCount()); Assert::IsFalse(results.ContainsAddress(0U)); @@ -1525,7 +1525,7 @@ TEST_CLASS(SearchResults_Tests) Assert::IsTrue(results.GetMatchingAddress(0U, result)); Assert::AreEqual(2U, result.nAddress); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, result.nSize); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, result.nSize); Assert::AreEqual(0x5U, result.nValue); } @@ -2495,16 +2495,16 @@ TEST_CLASS(SearchResults_Tests) results1.Initialize(1U, 3U, ra::services::SearchType::FourBit); Assert::AreEqual({ 6U }, results1.MatchingAddressCount()); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::Nibble_Lower)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::Nibble_Upper)); - Assert::AreEqual(std::wstring(L"0x2"), results1.GetFormattedValue(1U, ra::data::Memory::Size::Nibble_Lower)); - Assert::AreEqual(std::wstring(L"0x0"), results1.GetFormattedValue(1U, ra::data::Memory::Size::Nibble_Upper)); - Assert::AreEqual(std::wstring(L"0x4"), results1.GetFormattedValue(2U, ra::data::Memory::Size::Nibble_Lower)); - Assert::AreEqual(std::wstring(L"0x3"), results1.GetFormattedValue(2U, ra::data::Memory::Size::Nibble_Upper)); - Assert::AreEqual(std::wstring(L"0xb"), results1.GetFormattedValue(3U, ra::data::Memory::Size::Nibble_Lower)); - Assert::AreEqual(std::wstring(L"0xa"), results1.GetFormattedValue(3U, ra::data::Memory::Size::Nibble_Upper)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, ra::data::Memory::Size::Nibble_Lower)); - Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, ra::data::Memory::Size::Nibble_Upper)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::NibbleLower)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(0U, ra::data::Memory::Size::NibbleUpper)); + Assert::AreEqual(std::wstring(L"0x2"), results1.GetFormattedValue(1U, ra::data::Memory::Size::NibbleLower)); + Assert::AreEqual(std::wstring(L"0x0"), results1.GetFormattedValue(1U, ra::data::Memory::Size::NibbleUpper)); + Assert::AreEqual(std::wstring(L"0x4"), results1.GetFormattedValue(2U, ra::data::Memory::Size::NibbleLower)); + Assert::AreEqual(std::wstring(L"0x3"), results1.GetFormattedValue(2U, ra::data::Memory::Size::NibbleUpper)); + Assert::AreEqual(std::wstring(L"0xb"), results1.GetFormattedValue(3U, ra::data::Memory::Size::NibbleLower)); + Assert::AreEqual(std::wstring(L"0xa"), results1.GetFormattedValue(3U, ra::data::Memory::Size::NibbleUpper)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, ra::data::Memory::Size::NibbleLower)); + Assert::AreEqual(std::wstring(L""), results1.GetFormattedValue(4U, ra::data::Memory::Size::NibbleUpper)); } TEST_METHOD(TestGetFormattedValueFloat) diff --git a/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp b/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp index b58f38f15..ee24841d0 100644 --- a/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemoryBookmarksViewModel_Tests.cpp @@ -1502,7 +1502,7 @@ TEST_CLASS(MemoryBookmarksViewModel_Tests) bookmarks.AddBookmark(1U, ra::data::Memory::Size::EightBit); bookmarks.AddBookmark(1U, ra::data::Memory::Size::SixteenBit); - bookmarks.AddBookmark(1U, ra::data::Memory::Size::Bit_3); + bookmarks.AddBookmark(1U, ra::data::Memory::Size::Bit3); Assert::AreEqual({ 3U }, bookmarks.Bookmarks().Items().Count()); auto& bookmark1 = *bookmarks.GetBookmark(0); diff --git a/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp b/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp index d0ea36f45..4563a68e2 100644 --- a/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemorySearchViewModel_Tests.cpp @@ -153,7 +153,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) MemorySearchViewModelHarness search; Assert::AreEqual({ 0U }, search.Results().Count()); - Assert::AreEqual(ra::data::Memory::Size::Bit_0, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::Bit0, search.ResultMemSize()); Assert::AreEqual({ 0U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L""), search.GetFilterRange()); @@ -284,7 +284,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollMaximum()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 64U }, search.GetResultCount()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"New 4-bit Search"), search.GetFilterSummary()); Assert::IsTrue(search.CanFilter()); Assert::IsFalse(search.CanGoToPreviousPage()); @@ -880,7 +880,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 3U }, search.GetResultCount()); Assert::AreEqual(std::wstring(L"3"), search.GetResultCountText()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, search.ResultMemSize()); Assert::AreEqual(std::wstring(L"= Last +2"), search.GetFilterSummary()); Assert::AreEqual({ 3U }, search.Results().Count()); @@ -904,7 +904,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 64U }, search.GetResultCount()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, search.ResultMemSize()); Assert::IsTrue(search.Results().Count() > 3); AssertRow(search, 0, 0U, L"0x0000L", L"0x0"); @@ -1184,7 +1184,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 18U }, search.GetResultCount()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, search.ResultMemSize()); Assert::IsFalse(search.HasSelection()); Assert::AreEqual(0U, search.Results().GetItemAt(0)->nAddress); // 0L @@ -1303,7 +1303,7 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 0 }, search.GetScrollOffset()); Assert::AreEqual(std::wstring(L"1/1"), search.GetSelectedPage()); Assert::AreEqual({ 5U }, search.GetResultCount()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, search.ResultMemSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, search.ResultMemSize()); Assert::AreEqual({ 5U }, search.Results().Count()); search.Results().GetItemAt(2)->SetSelected(true); @@ -1316,8 +1316,8 @@ TEST_CLASS(MemorySearchViewModel_Tests) Assert::AreEqual({ 2U }, pBookmarks.Items().Count()); Assert::AreEqual({ 30U }, pBookmarks.Items().GetItemAt(0)->GetAddress()); Assert::AreEqual({ 30U }, pBookmarks.Items().GetItemAt(1)->GetAddress()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Lower, pBookmarks.Items().GetItemAt(0)->GetSize()); - Assert::AreEqual(ra::data::Memory::Size::Nibble_Upper, pBookmarks.Items().GetItemAt(1)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleLower, pBookmarks.Items().GetItemAt(0)->GetSize()); + Assert::AreEqual(ra::data::Memory::Size::NibbleUpper, pBookmarks.Items().GetItemAt(1)->GetSize()); Assert::IsTrue(search.Results().GetItemAt(2)->IsSelected()); Assert::IsTrue(search.Results().GetItemAt(3)->IsSelected()); diff --git a/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp b/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp index df3288307..a34ac0696 100644 --- a/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp +++ b/tests/ui/viewmodels/MemoryWatchListViewModel_Tests.cpp @@ -93,9 +93,9 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) Assert::AreEqual(std::wstring(L"32-bit BE"), watchList.Sizes().GetItemAt(6)->GetLabel()); Assert::AreEqual((int)ra::data::Memory::Size::BitCount, watchList.Sizes().GetItemAt(7)->GetId()); Assert::AreEqual(std::wstring(L"BitCount"), watchList.Sizes().GetItemAt(7)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Lower, watchList.Sizes().GetItemAt(8)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::NibbleLower, watchList.Sizes().GetItemAt(8)->GetId()); Assert::AreEqual(std::wstring(L"Lower4"), watchList.Sizes().GetItemAt(8)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Upper, watchList.Sizes().GetItemAt(9)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::NibbleUpper, watchList.Sizes().GetItemAt(9)->GetId()); Assert::AreEqual(std::wstring(L"Upper4"), watchList.Sizes().GetItemAt(9)->GetLabel()); Assert::AreEqual((int)ra::data::Memory::Size::Float, watchList.Sizes().GetItemAt(10)->GetId()); Assert::AreEqual(std::wstring(L"Float"), watchList.Sizes().GetItemAt(10)->GetLabel()); @@ -536,7 +536,7 @@ TEST_CLASS(MemoryWatchListViewModel_Tests) watchList.AddItem(1U, ra::data::Memory::Size::EightBit); watchList.AddItem(1U, ra::data::Memory::Size::SixteenBit); - watchList.AddItem(1U, ra::data::Memory::Size::Bit_3); + watchList.AddItem(1U, ra::data::Memory::Size::Bit3); Assert::AreEqual({ 3U }, watchList.Items().Count()); auto& pItem1 = *watchList.Items().GetItemAt(0); diff --git a/tests/ui/viewmodels/TriggerViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerViewModel_Tests.cpp index acac87add..21a0181b5 100644 --- a/tests/ui/viewmodels/TriggerViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerViewModel_Tests.cpp @@ -178,25 +178,25 @@ TEST_CLASS(TriggerViewModel_Tests) Assert::AreEqual(std::wstring(L"Recall"), vmTrigger.OperandTypes().GetItemAt(7)->GetLabel()); Assert::AreEqual({ 24U }, vmTrigger.OperandSizes().Count()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_0, vmTrigger.OperandSizes().GetItemAt(0)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit0, vmTrigger.OperandSizes().GetItemAt(0)->GetId()); Assert::AreEqual(std::wstring(L"Bit0"), vmTrigger.OperandSizes().GetItemAt(0)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_1, vmTrigger.OperandSizes().GetItemAt(1)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit1, vmTrigger.OperandSizes().GetItemAt(1)->GetId()); Assert::AreEqual(std::wstring(L"Bit1"), vmTrigger.OperandSizes().GetItemAt(1)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_2, vmTrigger.OperandSizes().GetItemAt(2)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit2, vmTrigger.OperandSizes().GetItemAt(2)->GetId()); Assert::AreEqual(std::wstring(L"Bit2"), vmTrigger.OperandSizes().GetItemAt(2)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_3, vmTrigger.OperandSizes().GetItemAt(3)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit3, vmTrigger.OperandSizes().GetItemAt(3)->GetId()); Assert::AreEqual(std::wstring(L"Bit3"), vmTrigger.OperandSizes().GetItemAt(3)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_4, vmTrigger.OperandSizes().GetItemAt(4)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit4, vmTrigger.OperandSizes().GetItemAt(4)->GetId()); Assert::AreEqual(std::wstring(L"Bit4"), vmTrigger.OperandSizes().GetItemAt(4)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_5, vmTrigger.OperandSizes().GetItemAt(5)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit5, vmTrigger.OperandSizes().GetItemAt(5)->GetId()); Assert::AreEqual(std::wstring(L"Bit5"), vmTrigger.OperandSizes().GetItemAt(5)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_6, vmTrigger.OperandSizes().GetItemAt(6)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit6, vmTrigger.OperandSizes().GetItemAt(6)->GetId()); Assert::AreEqual(std::wstring(L"Bit6"), vmTrigger.OperandSizes().GetItemAt(6)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Bit_7, vmTrigger.OperandSizes().GetItemAt(7)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::Bit7, vmTrigger.OperandSizes().GetItemAt(7)->GetId()); Assert::AreEqual(std::wstring(L"Bit7"), vmTrigger.OperandSizes().GetItemAt(7)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Lower, vmTrigger.OperandSizes().GetItemAt(8)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::NibbleLower, vmTrigger.OperandSizes().GetItemAt(8)->GetId()); Assert::AreEqual(std::wstring(L"Lower4"), vmTrigger.OperandSizes().GetItemAt(8)->GetLabel()); - Assert::AreEqual((int)ra::data::Memory::Size::Nibble_Upper, vmTrigger.OperandSizes().GetItemAt(9)->GetId()); + Assert::AreEqual((int)ra::data::Memory::Size::NibbleUpper, vmTrigger.OperandSizes().GetItemAt(9)->GetId()); Assert::AreEqual(std::wstring(L"Upper4"), vmTrigger.OperandSizes().GetItemAt(9)->GetLabel()); Assert::AreEqual((int)ra::data::Memory::Size::EightBit, vmTrigger.OperandSizes().GetItemAt(10)->GetId()); Assert::AreEqual(std::wstring(L"8-bit"), vmTrigger.OperandSizes().GetItemAt(10)->GetLabel()); From e38a42d8ce080acd9930e40bfafd4c6009ecedb9 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Mon, 29 Dec 2025 23:36:46 -0700 Subject: [PATCH 03/15] add TriggerSummaryViewModel --- src/RA_Integration.vcxproj | 2 + src/RA_Integration.vcxproj.filters | 6 + src/data/models/CodeNoteModel.cpp | 29 +++ src/data/models/CodeNoteModel.hh | 1 + src/ui/viewmodels/TriggerSummaryViewModel.cpp | 176 ++++++++++++++++++ src/ui/viewmodels/TriggerSummaryViewModel.hh | 60 ++++++ tests/RA_Integration.Tests.vcxproj | 2 + tests/RA_Integration.Tests.vcxproj.filters | 6 + .../TriggerSummaryViewModel_Tests.cpp | 124 ++++++++++++ 9 files changed, 406 insertions(+) create mode 100644 src/ui/viewmodels/TriggerSummaryViewModel.cpp create mode 100644 src/ui/viewmodels/TriggerSummaryViewModel.hh create mode 100644 tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp diff --git a/src/RA_Integration.vcxproj b/src/RA_Integration.vcxproj index 4cf62937f..591122140 100644 --- a/src/RA_Integration.vcxproj +++ b/src/RA_Integration.vcxproj @@ -164,6 +164,7 @@ + @@ -353,6 +354,7 @@ + diff --git a/src/RA_Integration.vcxproj.filters b/src/RA_Integration.vcxproj.filters index f27658c0f..aa243889c 100644 --- a/src/RA_Integration.vcxproj.filters +++ b/src/RA_Integration.vcxproj.filters @@ -423,6 +423,9 @@ Data\Context + + UI\ViewModels + @@ -1040,6 +1043,9 @@ Data\Context + + UI\ViewModels + diff --git a/src/data/models/CodeNoteModel.cpp b/src/data/models/CodeNoteModel.cpp index 8c03c8eb2..0a9972825 100644 --- a/src/data/models/CodeNoteModel.cpp +++ b/src/data/models/CodeNoteModel.cpp @@ -1475,6 +1475,35 @@ std::wstring_view CodeNoteModel::GetEnumText(uint32_t nValue) const return {}; } +std::wstring CodeNoteModel::GetSummary() const +{ + if (m_pPointerData != nullptr) + return TrimSize(m_sNote.substr(0, m_pPointerData->HeaderLength), false); + + std::wstring_view svNote(m_sNote); + auto nLineEnd = svNote.find_first_of(L"\n\r"); + if (nLineEnd != std::string::npos) + svNote = svNote.substr(0, nLineEnd); + + if (m_nEnumState != EnumState::None) + { + const auto svValues = GetValues(svNote); + if (!svValues.empty()) + { + auto nIndex = svNote.find(svValues); + + // ignore bracket and whitespace + --nIndex; + while (nIndex > 0 && isspace(svNote.at(nIndex - 1))) + --nIndex; + + svNote = svNote.substr(0, nIndex); + } + } + + return TrimSize(std::wstring(svNote), false); +} + } // namespace models } // namespace data } // namespace ra diff --git a/src/data/models/CodeNoteModel.hh b/src/data/models/CodeNoteModel.hh index 2ff8e3dca..e18ac381b 100644 --- a/src/data/models/CodeNoteModel.hh +++ b/src/data/models/CodeNoteModel.hh @@ -51,6 +51,7 @@ public: bool GetNextAddress(ra::data::ByteAddress nAfterAddress, ra::data::ByteAddress& nNextAddress) const; std::wstring GetPrimaryNote() const; + std::wstring GetSummary() const; void EnumeratePointerNotes(ra::data::ByteAddress nPointerAddress, std::function fCallback) const; void EnumeratePointerNotes(std::function fCallback) const; diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp new file mode 100644 index 000000000..ebeee3cdb --- /dev/null +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -0,0 +1,176 @@ +#include "TriggerSummaryViewModel.hh" + +#include "RA_Defs.h" + +#include "data\Memory.hh" +#include "data\context\GameContext.hh" + +#include "services\ServiceLocator.hh" + +#include "util\Strings.hh" + +#include + +namespace ra { +namespace ui { +namespace viewmodels { + +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::IndicesProperty("TriggerClauseViewModel", "Indices", L"1"); +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::ReferenceProperty("TriggerClauseViewModel", "Reference", L"0x0000"); +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::OperationProperty("TriggerClauseViewModel", "Operation", L"is"); +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty("TriggerClauseViewModel", "Target", L"0"); + +static constexpr bool IsValueCharacter(wchar_t c) +{ + if (c >= '0' && c <= '9') + return true; + if (c >= 'a' && c <= 'f') + return true; + if (c >= 'A' && c <= 'F') + return true; + if (isspace(c)) + return true; + if (c == 'h' || c == 'H' || c == 'x' || c == '-') + return true; + return false; +} + +static std::wstring EnumValueFromText(std::wstring_view sEnumText) +{ + const auto nSplit = sEnumText.find_first_of(L"=:"); + auto sEnumDescription = sEnumText.substr(nSplit + 1); + for (size_t i = 0; i < nSplit; ++i) + { + if (!IsValueCharacter(sEnumText.at(i))) + { + sEnumDescription = sEnumText.substr(0, nSplit); + break; + } + } + + auto nIndex = sEnumDescription.find_first_not_of(L" \t\n\r"); + if (nIndex != 0 && nIndex != std::string::npos) + sEnumDescription = sEnumDescription.substr(nIndex); + + nIndex = sEnumDescription.find_last_not_of(L" \t\n\r"); + if (nIndex < sEnumDescription.length() - 1) + sEnumDescription = sEnumDescription.substr(0, nIndex); + + return std::wstring(sEnumDescription); +} + +static std::wstring OperatorToString(uint8_t oper) +{ + switch (oper) + { + case RC_OPERATOR_EQ: return L"is"; + case RC_OPERATOR_NE: return L"is not"; + case RC_OPERATOR_GE: return L"is at least"; + case RC_OPERATOR_GT: return L"is greater than"; + case RC_OPERATOR_LE: return L"is at most"; + case RC_OPERATOR_LT: return L"is less than"; + } +} + +static std::wstring OperandToString(const rc_operand_t& pOperand) +{ + switch (pOperand.type) + { + case RC_OPERAND_CONST: + return std::to_wstring(pOperand.value.num); + + case RC_OPERAND_ADDRESS: + return ra::Widen(ra::ByteAddressToString(pOperand.value.memref->address)); + + default: + return L"???"; + } +} + +void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) +{ + uint32_t nFirstIndex = 0; + uint32_t nLastIndex = 0; + + const auto* pCodeNotes = ra::services::ServiceLocator::Get().Assets().FindCodeNotes(); + + const auto* pCondition = pCondSet.conditions; + for (; pCondition; pCondition = pCondition->next) + { + const ra::data::models::CodeNoteModel* pNote = nullptr; + auto& pClause = m_vClauses.Add(); + + nFirstIndex = nLastIndex + 1; + nLastIndex = nFirstIndex; + if (pCondition->type == RC_CONDITION_ADD_ADDRESS) + { + do + { + nLastIndex++; + pCondition = pCondition->next; + } while (pCondition && pCondition->type == RC_CONDITION_ADD_ADDRESS); + + if (!pCondition) + { + m_vClauses.RemoveAt(m_vClauses.Count() - 1); + break; + } + + pClause.SetIndices(ra::StringPrintf(L"%u-%u", nFirstIndex, nLastIndex)); + } + else + { + pClause.SetIndices(std::to_wstring(nFirstIndex)); + } + + if (pCodeNotes && rc_operand_is_memref(&pCondition->operand1)) + { + pNote = pCodeNotes->FindCodeNoteModel(pCondition->operand1.value.memref->address); + if (pNote) + { + pClause.SetReference(pNote->GetSummary()); + pClause.SetOperation(OperatorToString(pCondition->oper)); + + if (rc_operand_is_memref(&pCondition->operand2)) + { + + } + else + { + auto nTarget = pCondition->operand2.value.num; + + // a < 1 ~> a == 0 + if (nTarget == 1 && pCondition->oper == RC_OPERATOR_LT) + { + nTarget = 0; + pClause.SetOperation(OperatorToString(RC_OPERATOR_EQ)); + } + + const auto pEnumText = pNote->GetEnumText(nTarget); + if (!pEnumText.empty()) + { + pClause.SetTarget(EnumValueFromText(pEnumText)); + + // a > 0 ~> a != 0 + if (nTarget == 0 && pCondition->oper == RC_OPERATOR_GT) + pClause.SetOperation(OperatorToString(RC_OPERATOR_NE)); + } + else + { + pClause.SetTarget(std::to_wstring(nTarget)); + } + } + + continue; + } + } + + pClause.SetReference(OperandToString(pCondition->operand1)); + pClause.SetOperation(OperatorToString(pCondition->oper)); + pClause.SetTarget(OperandToString(pCondition->operand2)); + } +} + +} // namespace viewmodels +} // namespace ui +} // namespace ra diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh new file mode 100644 index 000000000..d7e940e47 --- /dev/null +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -0,0 +1,60 @@ +#ifndef RA_UI_TRIGGERSUMMARYVIEWMODEL_H +#define RA_UI_TRIGGERSUMMARYVIEWMODEL_H +#pragma once + +#include "ui\ViewModelBase.hh" +#include "ui\ViewModelCollection.hh" +#include "ui\Types.hh" + +struct rc_condset_t; + +namespace ra { +namespace ui { +namespace viewmodels { + +class TriggerSummaryViewModel : public ViewModelBase +{ +public: + GSL_SUPPRESS_F6 TriggerSummaryViewModel() noexcept = default; + ~TriggerSummaryViewModel() = default; + + TriggerSummaryViewModel(const TriggerSummaryViewModel&) noexcept = delete; + TriggerSummaryViewModel& operator=(const TriggerSummaryViewModel&) noexcept = delete; + TriggerSummaryViewModel(TriggerSummaryViewModel&&) noexcept = delete; + TriggerSummaryViewModel& operator=(TriggerSummaryViewModel&&) noexcept = delete; + + void InitializeFrom(const rc_condset_t& pCondSet); + + class TriggerClauseViewModel : public ViewModelBase + { + public: + static const StringModelProperty IndicesProperty; + const std::wstring& GetIndices() const { return GetValue(IndicesProperty); } + void SetIndices(const std::wstring& sValue) { SetValue(IndicesProperty, sValue); } + + static const StringModelProperty ReferenceProperty; + const std::wstring& GetReference() const { return GetValue(ReferenceProperty); } + void SetReference(const std::wstring& sValue) { SetValue(ReferenceProperty, sValue); } + + static const StringModelProperty OperationProperty; + const std::wstring& GetOperation() const { return GetValue(OperationProperty); } + void SetOperation(const std::wstring& sValue) { SetValue(OperationProperty, sValue); } + + static const StringModelProperty TargetProperty; + const std::wstring& GetTarget() const { return GetValue(TargetProperty); } + void SetTarget(const std::wstring& sValue) { SetValue(TargetProperty, sValue); } + + std::wstring GetTooltip(const StringModelProperty& nProperty) const; + }; + + const ViewModelCollection& Clauses() const { return m_vClauses; } + +private: + ViewModelCollection m_vClauses; +}; + +} // namespace viewmodels +} // namespace ui +} // namespace ra + +#endif !RA_UI_TRIGGERSUMMARYVIEWMODEL_H diff --git a/tests/RA_Integration.Tests.vcxproj b/tests/RA_Integration.Tests.vcxproj index 24181e136..fb2e90007 100644 --- a/tests/RA_Integration.Tests.vcxproj +++ b/tests/RA_Integration.Tests.vcxproj @@ -150,6 +150,7 @@ + @@ -219,6 +220,7 @@ + diff --git a/tests/RA_Integration.Tests.vcxproj.filters b/tests/RA_Integration.Tests.vcxproj.filters index d112921e0..2615f84f3 100644 --- a/tests/RA_Integration.Tests.vcxproj.filters +++ b/tests/RA_Integration.Tests.vcxproj.filters @@ -474,6 +474,12 @@ Code + + Code + + + Tests\UI\ViewModels + diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp new file mode 100644 index 000000000..c610f8195 --- /dev/null +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -0,0 +1,124 @@ +#include "CppUnitTest.h" + +#include "ui\viewmodels\TriggerSummaryViewModel.hh" + +#include "tests\ui\UIAsserts.hh" +#include "tests\mocks\MockClipboard.hh" +#include "tests\mocks\MockConfiguration.hh" +#include "tests\mocks\MockConsoleContext.hh" +#include "tests\mocks\MockDesktop.hh" +#include "tests\mocks\MockGameContext.hh" +#include "tests\mocks\MockEmulatorContext.hh" +#include "tests\mocks\MockImageRepository.hh" +#include "tests\mocks\MockUserContext.hh" +#include "tests\mocks\MockWindowManager.hh" + +#include + +using namespace Microsoft::VisualStudio::CppUnitTestFramework; + +namespace ra { +namespace ui { +namespace viewmodels { +namespace tests { + +TEST_CLASS(TriggerSummaryViewModel_Tests) +{ +private: + class TriggerSummaryViewModelHarness : public TriggerSummaryViewModel + { + public: + ra::data::context::mocks::MockEmulatorContext mockEmulatorContext; + ra::data::context::mocks::MockGameContext mockGameContext; + ra::data::context::mocks::MockUserContext mockUserContext; + + void InitializeFrom(const std::string& sTrigger) + { + const auto nSize = rc_trigger_size(sTrigger.c_str()); + if (nSize > 0) + { + m_sTriggerBuffer.resize(nSize); + rc_trigger_t* pTrigger = rc_parse_trigger(m_sTriggerBuffer.data(), sTrigger.c_str(), nullptr, 0); + TriggerSummaryViewModel::InitializeFrom(*pTrigger->requirement); + } + } + + void AssertClause(gsl::index nIndex, const std::wstring& sIndices, + const std::wstring& sReference, const std::wstring& sOperation, const std::wstring& sTarget) + { + const auto* pClause = Clauses().GetItemAt(nIndex); + Assert::IsNotNull(pClause); + Assert::AreEqual(sIndices, pClause->GetIndices()); + Assert::AreEqual(sReference, pClause->GetReference()); + Assert::AreEqual(sOperation, pClause->GetOperation()); + Assert::AreEqual(sTarget, pClause->GetTarget()); + } + + private: + std::string m_sTriggerBuffer; + }; + +public: + TEST_METHOD(TestSimpleNoNotes) + { + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("0xH1234=5_0xH2345!=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"0x1234", L"is", L"5"); + summary.AssertClause(1, L"2", L"0x2345", L"is not", L"0"); + } + + TEST_METHOD(TestSimpleNote) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.mockGameContext.SetCodeNote({ 0x2345U }, L"[16-bit] Level"); + summary.InitializeFrom("0xH1234=5_0x 2345!=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"is", L"5"); + summary.AssertClause(1, L"2", L"Level", L"is not", L"0"); + } + + TEST_METHOD(TestEnumNote) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"Character (1=Bill, 2=Bob, 3=Betty, 4=Bonnie, 5=Ben)"); + summary.mockGameContext.SetCodeNote({ 0x2345U }, L"Difficulty\r\n0=Easy\r\n1=Normal\r\n2=Hard\r\n"); + summary.InitializeFrom("0xH1234=5_0x 2345!=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"Character", L"is", L"Ben"); + summary.AssertClause(1, L"2", L"Difficulty", L"is not", L"Easy"); + } + + TEST_METHOD(TestEnumNoteGreaterThanZero) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"Character (1=Bill, 2=Bob, 3=Betty, 4=Bonnie, 5=Ben)"); + summary.mockGameContext.SetCodeNote({ 0x2345U }, L"Difficulty\r\n0=Easy\r\n1=Normal\r\n2=Hard\r\n"); + summary.InitializeFrom("0xH1234>2_0x 2345>0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"Character", L"is greater than", L"Bob"); + summary.AssertClause(1, L"2", L"Difficulty", L"is not", L"Easy"); // >0 converted to !=0 + } + + TEST_METHOD(TestEnumNoteLessThanOne) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"Character (1=Bill, 2=Bob, 3=Betty, 4=Bonnie, 5=Ben)"); + summary.mockGameContext.SetCodeNote({ 0x2345U }, L"Difficulty\r\n0=Easy\r\n1=Normal\r\n2=Hard\r\n"); + summary.InitializeFrom("0xH1234<1_0x 2345<1"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"Character", L"is", L"0"); + summary.AssertClause(1, L"2", L"Difficulty", L"is", L"Easy"); // <1 converted to ==0 + } +}; + +} // namespace tests +} // namespace viewmodels +} // namespace ui +} // namespace ra From 97b247f061496c277c80a803cb6b1424c2e0ff61 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 30 Dec 2025 00:02:57 -0700 Subject: [PATCH 04/15] add delta self logic --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 141 +++++++++++++----- .../TriggerSummaryViewModel_Tests.cpp | 13 ++ 2 files changed, 115 insertions(+), 39 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index ebeee3cdb..c2077e519 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -87,6 +87,66 @@ static std::wstring OperandToString(const rc_operand_t& pOperand) } } +static void HandleCompareMemoryReferenceToSelf(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, const rc_condition_t& pCondition) +{ + pClause.SetTarget(L""); + + if (pCondition.operand1.memref_access_type == pCondition.operand2.memref_access_type) + { + switch (pCondition.oper) + { + case RC_OPERATOR_EQ: + case RC_OPERATOR_GE: + case RC_OPERATOR_LE: + pClause.SetOperation(L"unimportant"); // delta = delta ~> always true + break; + + case RC_OPERATOR_NE: + case RC_OPERATOR_GT: + case RC_OPERATOR_LT: + pClause.SetOperation(L"invalid"); // delta != delta ~> always false + break; + } + } + else + { + switch (pCondition.oper) + { + case RC_OPERATOR_EQ: + pClause.SetOperation(L"hasn't changed"); + break; + + case RC_OPERATOR_NE: + pClause.SetOperation(L"changed"); + break; + + case RC_OPERATOR_LT: + pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS + ? L"decreased" // val < delta + : L"increased"); // delta < val + break; + + case RC_OPERATOR_GT: + pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS + ? L"increased" // val > delta + : L"decreased"); // delta > val + break; + + case RC_OPERATOR_LE: + pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS + ? L"did not increase" // val <= delta + : L"did not decrease"); // delta <= val + break; + + case RC_OPERATOR_GE: + pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS + ? L"did not decrease" // val >= delta + : L"did not increase"); // delta >= val + break; + } + } +} + void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) { uint32_t nFirstIndex = 0; @@ -97,7 +157,6 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) const auto* pCondition = pCondSet.conditions; for (; pCondition; pCondition = pCondition->next) { - const ra::data::models::CodeNoteModel* pNote = nullptr; auto& pClause = m_vClauses.Add(); nFirstIndex = nLastIndex + 1; @@ -123,51 +182,55 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) pClause.SetIndices(std::to_wstring(nFirstIndex)); } + const ra::data::models::CodeNoteModel* pNote = nullptr; if (pCodeNotes && rc_operand_is_memref(&pCondition->operand1)) - { pNote = pCodeNotes->FindCodeNoteModel(pCondition->operand1.value.memref->address); - if (pNote) - { - pClause.SetReference(pNote->GetSummary()); - pClause.SetOperation(OperatorToString(pCondition->oper)); - - if (rc_operand_is_memref(&pCondition->operand2)) - { - - } - else - { - auto nTarget = pCondition->operand2.value.num; - - // a < 1 ~> a == 0 - if (nTarget == 1 && pCondition->oper == RC_OPERATOR_LT) - { - nTarget = 0; - pClause.SetOperation(OperatorToString(RC_OPERATOR_EQ)); - } - - const auto pEnumText = pNote->GetEnumText(nTarget); - if (!pEnumText.empty()) - { - pClause.SetTarget(EnumValueFromText(pEnumText)); - - // a > 0 ~> a != 0 - if (nTarget == 0 && pCondition->oper == RC_OPERATOR_GT) - pClause.SetOperation(OperatorToString(RC_OPERATOR_NE)); - } - else - { - pClause.SetTarget(std::to_wstring(nTarget)); - } - } + if (pNote) + pClause.SetReference(pNote->GetSummary()); + else + pClause.SetReference(OperandToString(pCondition->operand1)); + + pClause.SetOperation(OperatorToString(pCondition->oper)); + + if (rc_operand_is_memref(&pCondition->operand2)) + { + if (pCondition->operand1.value.memref == pCondition->operand2.value.memref) + { + // comparing value to itself + HandleCompareMemoryReferenceToSelf(pClause, *pCondition); continue; } } + else if (pNote) + { + auto nTarget = pCondition->operand2.value.num; - pClause.SetReference(OperandToString(pCondition->operand1)); - pClause.SetOperation(OperatorToString(pCondition->oper)); - pClause.SetTarget(OperandToString(pCondition->operand2)); + // a < 1 ~> a == 0 + if (nTarget == 1 && pCondition->oper == RC_OPERATOR_LT) + { + nTarget = 0; + pClause.SetOperation(OperatorToString(RC_OPERATOR_EQ)); + } + + const auto pEnumText = pNote->GetEnumText(nTarget); + if (!pEnumText.empty()) + { + pClause.SetTarget(EnumValueFromText(pEnumText)); + + // a > 0 ~> a != 0 + if (nTarget == 0 && pCondition->oper == RC_OPERATOR_GT) + pClause.SetOperation(OperatorToString(RC_OPERATOR_NE)); + } + else + { + pClause.SetTarget(std::to_wstring(nTarget)); + } + } + else + { + pClause.SetTarget(OperandToString(pCondition->operand2)); + } } } diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index c610f8195..747f78529 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -116,6 +116,19 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.AssertClause(0, L"1", L"Character", L"is", L"0"); summary.AssertClause(1, L"2", L"Difficulty", L"is", L"Easy"); // <1 converted to ==0 } + + TEST_METHOD(TestMemoryReferenceDeltaSelf) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x2345U }, L"Difficulty\r\n0=Easy\r\n1=Normal\r\n2=Hard\r\n"); + summary.InitializeFrom("0xH1234!=d0xH1234_0x 2345>d0x 2345_0x 2345 Date: Tue, 30 Dec 2025 07:28:22 -0700 Subject: [PATCH 05/15] add changed logic --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 172 ++++++++++++++++-- src/ui/viewmodels/TriggerSummaryViewModel.hh | 9 + .../TriggerSummaryViewModel_Tests.cpp | 48 ++++- 3 files changed, 212 insertions(+), 17 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index c2077e519..298be7e1c 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -20,6 +20,105 @@ const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::Refer const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::OperationProperty("TriggerClauseViewModel", "Operation", L"is"); const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty("TriggerClauseViewModel", "Target", L"0"); +enum TriggerSummaryViewModel::TriggerClauseViewModel::TriggerClauseType : int +{ + None = 0, + Is, + IsNot, + Comparison, + AlwaysTrue, + AlwaysFalse, + Changed, + HasntChanged, + ChangedTo, + ChangedFrom, +}; + +using TriggerClauseType = TriggerSummaryViewModel::TriggerClauseViewModel::TriggerClauseType; + +static bool IsSameMemoryReference(const rc_operand_t& pOperand1, const rc_operand_t& pOperand2) +{ + switch (pOperand1.type) { + case RC_OPERAND_CONST: + return (pOperand1.value.num == pOperand2.value.num); + case RC_OPERAND_FP: + return (pOperand1.value.dbl == pOperand2.value.dbl); + case RC_OPERAND_RECALL: + return (pOperand1.value.memref == pOperand2.value.memref); + default: + break; + } + + if (pOperand1.size != pOperand2.size) + return false; + + return (pOperand1.value.memref == pOperand2.value.memref); +} + +bool TriggerSummaryViewModel::MergeClauses( + TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, + TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, + gsl::index nIndex1, gsl::index nIndex2) +{ + if (pClause1.nType == TriggerClauseType::Is) + { + if (pClause2.nType == TriggerClauseType::IsNot) + { + if (IsSameMemoryReference(pClause1.pCondition->operand2, pClause2.pCondition->operand2)) + { + if (pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + // a == x && da != x + pClause1.SetOperation(L"changed to"); + pClause1.nType = TriggerClauseType::ChangedTo; + m_vClauses.RemoveAt(nIndex2); + } + else + { + // da == x && a != x + pClause2.SetOperation(L"changed from"); + pClause2.nType = TriggerClauseType::ChangedFrom; + m_vClauses.RemoveAt(nIndex1); + } + return true; + } + + // a == x && a != y ~> a == x + m_vClauses.RemoveAt(nIndex2); + return true; + } + else if (pClause2.nType == TriggerClauseType::Comparison && + pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + if (IsSameMemoryReference(pClause1.pCondition->operand2, pClause2.pCondition->operand2)) + { + if (pClause2.pCondition->oper == RC_OPERATOR_LT) + { + // a == x && da < x + pClause1.SetOperation(L"increased to"); + pClause1.nType = TriggerClauseType::ChangedTo; + m_vClauses.RemoveAt(nIndex2); + return true; + } + else if (pClause2.pCondition->oper == RC_OPERATOR_GT) + { + // a == x && da > x + pClause1.SetOperation(L"decreased to"); + pClause1.nType = TriggerClauseType::ChangedTo; + m_vClauses.RemoveAt(nIndex2); + return true; + } + } + } + } + else if (pClause2.nType == TriggerClauseType::Is) + { + return MergeClauses(pClause2, pClause1, nIndex2, nIndex1); + } + + return false; +} + static constexpr bool IsValueCharacter(wchar_t c) { if (c >= '0' && c <= '9') @@ -59,16 +158,39 @@ static std::wstring EnumValueFromText(std::wstring_view sEnumText) return std::wstring(sEnumDescription); } -static std::wstring OperatorToString(uint8_t oper) +static void HandleOperation(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, uint8_t nOperation) { - switch (oper) + switch (nOperation) { - case RC_OPERATOR_EQ: return L"is"; - case RC_OPERATOR_NE: return L"is not"; - case RC_OPERATOR_GE: return L"is at least"; - case RC_OPERATOR_GT: return L"is greater than"; - case RC_OPERATOR_LE: return L"is at most"; - case RC_OPERATOR_LT: return L"is less than"; + case RC_OPERATOR_EQ: + pClause.SetOperation(L"is"); + pClause.nType = TriggerClauseType::Is; + break; + + case RC_OPERATOR_NE: + pClause.SetOperation(L"is not"); + pClause.nType = TriggerClauseType::IsNot; + break; + + case RC_OPERATOR_GE: + pClause.SetOperation(L"is at least"); + pClause.nType = TriggerClauseType::Comparison; + break; + + case RC_OPERATOR_GT: + pClause.SetOperation(L"is greater than"); + pClause.nType = TriggerClauseType::Comparison; + break; + + case RC_OPERATOR_LE: + pClause.SetOperation(L"is at most"); + pClause.nType = TriggerClauseType::Comparison; + break; + + case RC_OPERATOR_LT: + pClause.SetOperation(L"is less than"); + pClause.nType = TriggerClauseType::Comparison; + break; } } @@ -98,13 +220,17 @@ static void HandleCompareMemoryReferenceToSelf(TriggerSummaryViewModel::TriggerC case RC_OPERATOR_EQ: case RC_OPERATOR_GE: case RC_OPERATOR_LE: - pClause.SetOperation(L"unimportant"); // delta = delta ~> always true + // delta = delta ~> always true + pClause.SetOperation(L"unimportant"); + pClause.nType = TriggerClauseType::AlwaysTrue; break; case RC_OPERATOR_NE: case RC_OPERATOR_GT: case RC_OPERATOR_LT: - pClause.SetOperation(L"invalid"); // delta != delta ~> always false + // delta != delta ~> always false + pClause.SetOperation(L"invalid"); + pClause.nType = TriggerClauseType::AlwaysFalse; break; } } @@ -114,6 +240,7 @@ static void HandleCompareMemoryReferenceToSelf(TriggerSummaryViewModel::TriggerC { case RC_OPERATOR_EQ: pClause.SetOperation(L"hasn't changed"); + pClause.nType = TriggerClauseType::HasntChanged; break; case RC_OPERATOR_NE: @@ -124,24 +251,28 @@ static void HandleCompareMemoryReferenceToSelf(TriggerSummaryViewModel::TriggerC pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS ? L"decreased" // val < delta : L"increased"); // delta < val + pClause.nType = TriggerClauseType::Changed; break; case RC_OPERATOR_GT: pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS ? L"increased" // val > delta : L"decreased"); // delta > val + pClause.nType = TriggerClauseType::Changed; break; case RC_OPERATOR_LE: pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS ? L"did not increase" // val <= delta : L"did not decrease"); // delta <= val + pClause.nType = TriggerClauseType::Changed; break; case RC_OPERATOR_GE: pClause.SetOperation(pCondition.operand1.memref_access_type == RC_OPERAND_ADDRESS ? L"did not decrease" // val >= delta : L"did not increase"); // delta >= val + pClause.nType = TriggerClauseType::Changed; break; } } @@ -182,6 +313,8 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) pClause.SetIndices(std::to_wstring(nFirstIndex)); } + pClause.pCondition = pCondition; + const ra::data::models::CodeNoteModel* pNote = nullptr; if (pCodeNotes && rc_operand_is_memref(&pCondition->operand1)) pNote = pCodeNotes->FindCodeNoteModel(pCondition->operand1.value.memref->address); @@ -191,7 +324,7 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) else pClause.SetReference(OperandToString(pCondition->operand1)); - pClause.SetOperation(OperatorToString(pCondition->oper)); + HandleOperation(pClause, pCondition->oper); if (rc_operand_is_memref(&pCondition->operand2)) { @@ -210,7 +343,7 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) if (nTarget == 1 && pCondition->oper == RC_OPERATOR_LT) { nTarget = 0; - pClause.SetOperation(OperatorToString(RC_OPERATOR_EQ)); + HandleOperation(pClause, RC_OPERATOR_EQ); } const auto pEnumText = pNote->GetEnumText(nTarget); @@ -220,7 +353,7 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) // a > 0 ~> a != 0 if (nTarget == 0 && pCondition->oper == RC_OPERATOR_GT) - pClause.SetOperation(OperatorToString(RC_OPERATOR_NE)); + HandleOperation(pClause, RC_OPERATOR_NE); } else { @@ -231,6 +364,19 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) { pClause.SetTarget(OperandToString(pCondition->operand2)); } + + if (rc_operand_is_memref(&pCondition->operand1)) + { + for (gsl::index nIndex = 0; nIndex < m_vClauses.Count() - 1; ++nIndex) + { + auto* pOtherClause = m_vClauses.GetItemAt(nIndex); + if (pOtherClause && IsSameMemoryReference(pCondition->operand1, pOtherClause->pCondition->operand1)) + { + if (MergeClauses(*pOtherClause, pClause, nIndex, m_vClauses.Count() - 1)) + break; + } + } + } } } diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index d7e940e47..1c6d16930 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -45,11 +45,20 @@ public: void SetTarget(const std::wstring& sValue) { SetValue(TargetProperty, sValue); } std::wstring GetTooltip(const StringModelProperty& nProperty) const; + + const rc_condition_t* pCondition = nullptr; + enum TriggerClauseType : int; + TriggerClauseType nType = ra::itoe(0); }; const ViewModelCollection& Clauses() const { return m_vClauses; } private: + bool MergeClauses( + TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, + TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, + gsl::index nIndex1, gsl::index nIndex2); + ViewModelCollection m_vClauses; }; diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index 747f78529..7520daa44 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -48,10 +48,10 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) { const auto* pClause = Clauses().GetItemAt(nIndex); Assert::IsNotNull(pClause); - Assert::AreEqual(sIndices, pClause->GetIndices()); - Assert::AreEqual(sReference, pClause->GetReference()); - Assert::AreEqual(sOperation, pClause->GetOperation()); - Assert::AreEqual(sTarget, pClause->GetTarget()); + Assert::AreEqual(sIndices, pClause->GetIndices(), L"Indices differ"); + Assert::AreEqual(sReference, pClause->GetReference(), L"Reference differs"); + Assert::AreEqual(sOperation, pClause->GetOperation(), L"Operation differs"); + Assert::AreEqual(sTarget, pClause->GetTarget(), L"Target differs"); } private: @@ -129,6 +129,46 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.AssertClause(2, L"3", L"Difficulty", L"decreased", L""); summary.AssertClause(3, L"4", L"Difficulty", L"increased", L""); } + + TEST_METHOD(TestChangedTo) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("0xH1234=5_d0xH1234!=5"); + + Assert::AreEqual({ 1U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"changed to", L"5"); + } + + TEST_METHOD(TestChangedFrom) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("0xH1234!=5_d0xH1234=5"); + + Assert::AreEqual({ 1U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"changed from", L"5"); + } + + TEST_METHOD(TestIncreasedTo) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("0xH1234=5_d0xH1234<5"); + + Assert::AreEqual({ 1U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"increased to", L"5"); + } + + TEST_METHOD(TestDecreasedTo) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("0xH1234=5_d0xH1234>5"); + + Assert::AreEqual({ 1U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"decreased to", L"5"); + } }; } // namespace tests From 8f7400a7d4cb03792312da215ff85250605795ab Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 30 Dec 2025 08:11:44 -0700 Subject: [PATCH 06/15] merge indices when merging conditions --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 141 ++++++++++++++++-- src/ui/viewmodels/TriggerSummaryViewModel.hh | 3 + .../TriggerSummaryViewModel_Tests.cpp | 28 +++- 3 files changed, 152 insertions(+), 20 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index 298be7e1c..cf6e2686a 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -55,6 +55,102 @@ static bool IsSameMemoryReference(const rc_operand_t& pOperand1, const rc_operan return (pOperand1.value.memref == pOperand2.value.memref); } +static constexpr uint32_t ParseUInt32(std::wstring_view sValue) +{ + uint32_t nValue = 0; + for (auto c : sValue) + { + nValue *= 10; + nValue += (c - '0'); + } + + return nValue; +} + +static void ParseRanges(std::vector>& vRanges, const std::wstring& sIndices) +{ + std::wstring_view sRemaining = sIndices; + size_t nIndex; + do + { + nIndex = sRemaining.find(','); + const auto sRange = sRemaining.substr(0, nIndex); + + const auto nIndex2 = sRange.find('-'); + if (nIndex2 == std::wstring::npos) + { + const uint32_t nValue = ParseUInt32(sRange); + vRanges.push_back({ nValue, nValue }); + } + else + { + const uint32_t nStart = ParseUInt32(sRange.substr(0, nIndex2)); + const uint32_t nEnd = ParseUInt32(sRange.substr(nIndex2 + 1)); + vRanges.push_back({ nStart, nEnd }); + } + } while (nIndex < sRemaining.length()); +} + +static void MergeIndices(TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, TriggerSummaryViewModel::TriggerClauseViewModel& pClause2) +{ + std::vector> vRanges; + ParseRanges(vRanges, pClause1.GetIndices()); + ParseRanges(vRanges, pClause2.GetIndices()); + + std::sort(vRanges.begin(), vRanges.end(), [](const std::pair& a, const std::pair& b) { + return a.first < b.first; + }); + + uint32_t nStart = 0xFFFFFFFF; + uint32_t nEnd = nStart; + + std::wstring sNewIndices; + for (const auto& pRange : vRanges) + { + if (pRange.first == nEnd + 1) + { + nEnd = pRange.second; + } + else + { + if (nStart != 0xFFFFFFFF) + { + sNewIndices.append(std::to_wstring(nStart)); + if (nStart != nEnd) + { + sNewIndices.push_back(L'-'); + sNewIndices.append(std::to_wstring(nEnd)); + } + + sNewIndices.push_back(L','); + } + + nStart = pRange.first; + nEnd = pRange.second; + } + } + + sNewIndices.append(std::to_wstring(nStart)); + if (nStart != nEnd) + { + sNewIndices.push_back(L'-'); + sNewIndices.append(std::to_wstring(nEnd)); + } + + pClause1.SetIndices(sNewIndices); +} + +bool TriggerSummaryViewModel::MergeClauses(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, + TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, + gsl::index nDiscardIndex, TriggerClauseType nNewType, const std::wstring& sNewOperation) +{ + pClause.SetOperation(sNewOperation); + pClause.nType = nNewType; + MergeIndices(pClause, pDiscardClause); + m_vClauses.RemoveAt(nDiscardIndex); + return true; +} + bool TriggerSummaryViewModel::MergeClauses( TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, @@ -69,18 +165,15 @@ bool TriggerSummaryViewModel::MergeClauses( if (pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) { // a == x && da != x - pClause1.SetOperation(L"changed to"); - pClause1.nType = TriggerClauseType::ChangedTo; - m_vClauses.RemoveAt(nIndex2); + return MergeClauses(pClause1, pClause2, nIndex2, TriggerClauseType::ChangedTo, L"changed to"); } - else + else if (pClause2.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) { // da == x && a != x - pClause2.SetOperation(L"changed from"); - pClause2.nType = TriggerClauseType::ChangedFrom; - m_vClauses.RemoveAt(nIndex1); + return MergeClauses(pClause2, pClause1, nIndex1, TriggerClauseType::ChangedFrom, L"changed from"); } - return true; + + return false; } // a == x && a != y ~> a == x @@ -95,21 +188,37 @@ bool TriggerSummaryViewModel::MergeClauses( if (pClause2.pCondition->oper == RC_OPERATOR_LT) { // a == x && da < x - pClause1.SetOperation(L"increased to"); - pClause1.nType = TriggerClauseType::ChangedTo; - m_vClauses.RemoveAt(nIndex2); - return true; + return MergeClauses(pClause1, pClause2, nIndex2, TriggerClauseType::ChangedTo, L"increased to"); } else if (pClause2.pCondition->oper == RC_OPERATOR_GT) { // a == x && da > x - pClause1.SetOperation(L"decreased to"); - pClause1.nType = TriggerClauseType::ChangedTo; - m_vClauses.RemoveAt(nIndex2); - return true; + return MergeClauses(pClause1, pClause2, nIndex2, TriggerClauseType::ChangedTo, L"decreased to"); } } } + else if (pClause2.nType == TriggerClauseType::Is && + pClause1.pCondition->operand1.size >= RC_MEMSIZE_BIT_0 && + pClause1.pCondition->operand1.size <= RC_MEMSIZE_BIT_7) + { + if (pClause1.pCondition->operand2.type == RC_OPERAND_CONST && + pClause2.pCondition->operand2.type == RC_OPERAND_CONST && + pClause1.pCondition->operand2.value.num != pClause2.pCondition->operand2.value.num) + { + if (pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + // a == n && da == ~n + return MergeClauses(pClause1, pClause2, nIndex2, TriggerClauseType::ChangedTo, L"changed to"); + } + else if(pClause2.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + // da == ~n && a == n + return MergeClauses(pClause2, pClause1, nIndex1, TriggerClauseType::ChangedTo, L"changed to"); + } + + return false; + } + } } else if (pClause2.nType == TriggerClauseType::Is) { diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index 1c6d16930..895334a53 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -58,6 +58,9 @@ private: TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, gsl::index nIndex1, gsl::index nIndex2); + bool MergeClauses(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, + TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, + gsl::index nDiscardIndex, TriggerClauseViewModel::TriggerClauseType nNewType, const std::wstring& sNewOperation); ViewModelCollection m_vClauses; }; diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index 7520daa44..f6af159fb 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -137,7 +137,7 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.InitializeFrom("0xH1234=5_d0xH1234!=5"); Assert::AreEqual({ 1U }, summary.Clauses().Count()); - summary.AssertClause(0, L"1", L"World", L"changed to", L"5"); + summary.AssertClause(0, L"1-2", L"World", L"changed to", L"5"); } TEST_METHOD(TestChangedFrom) @@ -147,7 +147,27 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.InitializeFrom("0xH1234!=5_d0xH1234=5"); Assert::AreEqual({ 1U }, summary.Clauses().Count()); - summary.AssertClause(0, L"1", L"World", L"changed from", L"5"); + summary.AssertClause(0, L"1-2", L"World", L"changed from", L"5"); + } + + TEST_METHOD(TestBitChangedTo) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("0xO1234=1_d0xO1234=0"); + + Assert::AreEqual({ 1U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1-2", L"World", L"changed to", L"1"); + } + + TEST_METHOD(TestBitChangedToDeltaFirst) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("d0xO1234=1_0xO1234=0"); + + Assert::AreEqual({ 1U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1-2", L"World", L"changed to", L"0"); } TEST_METHOD(TestIncreasedTo) @@ -157,7 +177,7 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.InitializeFrom("0xH1234=5_d0xH1234<5"); Assert::AreEqual({ 1U }, summary.Clauses().Count()); - summary.AssertClause(0, L"1", L"World", L"increased to", L"5"); + summary.AssertClause(0, L"1-2", L"World", L"increased to", L"5"); } TEST_METHOD(TestDecreasedTo) @@ -167,7 +187,7 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.InitializeFrom("0xH1234=5_d0xH1234>5"); Assert::AreEqual({ 1U }, summary.Clauses().Count()); - summary.AssertClause(0, L"1", L"World", L"decreased to", L"5"); + summary.AssertClause(0, L"1-2", L"World", L"decreased to", L"5"); } }; From a255ee1d72ed44386b86fddc4ad85dea9af657e7 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 6 Jan 2026 11:54:40 -0700 Subject: [PATCH 07/15] add trigger summary dialog --- src/RA_Integration.vcxproj | 2 + src/RA_Integration.vcxproj.filters | 6 ++ src/RA_Resource.h | 4 +- src/RA_Shared.rc | 10 ++ src/ui/viewmodels/TriggerSummaryViewModel.hh | 5 +- src/ui/viewmodels/TriggerViewModel.cpp | 23 +++++ src/ui/viewmodels/TriggerViewModel.hh | 2 + src/ui/win32/AssetEditorDialog.cpp | 11 ++ src/ui/win32/Desktop.cpp | 2 + src/ui/win32/TriggerSummaryDialog.cpp | 100 +++++++++++++++++++ src/ui/win32/TriggerSummaryDialog.hh | 43 ++++++++ 11 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 src/ui/win32/TriggerSummaryDialog.cpp create mode 100644 src/ui/win32/TriggerSummaryDialog.hh diff --git a/src/RA_Integration.vcxproj b/src/RA_Integration.vcxproj index 591122140..849bafefb 100644 --- a/src/RA_Integration.vcxproj +++ b/src/RA_Integration.vcxproj @@ -196,6 +196,7 @@ + @@ -401,6 +402,7 @@ + diff --git a/src/RA_Integration.vcxproj.filters b/src/RA_Integration.vcxproj.filters index aa243889c..7cf54a1be 100644 --- a/src/RA_Integration.vcxproj.filters +++ b/src/RA_Integration.vcxproj.filters @@ -426,6 +426,9 @@ UI\ViewModels + + UI\Win32 + @@ -1046,6 +1049,9 @@ UI\ViewModels + + UI\Win32 + diff --git a/src/RA_Resource.h b/src/RA_Resource.h index d08538eb8..4c4747b70 100644 --- a/src/RA_Resource.h +++ b/src/RA_Resource.h @@ -153,6 +153,7 @@ #define IDC_RA_LBX_REGIONS 1248 #define IDC_RA_ADD_REGION 1249 #define IDC_RA_REMOVE_REGION 1250 +#define IDC_RA_VIEW_DETAIL 1251 #define IDD_RA_MEMORY 1501 @@ -170,6 +171,7 @@ #define IDD_RA_POINTERFINDER 1514 #define IDD_RA_POINTERINSPECTOR 1515 #define IDD_RA_MEMORYREGIONS 1516 +#define IDD_RA_TRIGGERSUMMARY 1517 #define IDC_RA_PASSWORD 1535 #define IDC_RA_SAVEPASSWORD 1536 #define IDC_RA_USERNAME 1549 @@ -224,7 +226,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 122 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1251 +#define _APS_NEXT_CONTROL_VALUE 1252 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/src/RA_Shared.rc b/src/RA_Shared.rc index 945fcecae..85057146d 100644 --- a/src/RA_Shared.rc +++ b/src/RA_Shared.rc @@ -154,6 +154,7 @@ BEGIN LTEXT "Requirements:",IDC_STATIC,50,55,48,8 ICON "",IDC_RA_ERROR_INDICATOR,98,53,13,13,SS_NOTIFY | SS_CENTERIMAGE CONTROL "",IDC_RA_LBX_CONDITIONS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,50,66,391,109 + PUSHBUTTON "Explain",IDC_RA_VIEW_DETAIL,207,53,44,13 CONTROL "Highlights",IDC_RA_CHK_HIGHLIGHTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,257,53,45,13 CONTROL "Pause on Reset",IDC_RA_CHK_PAUSE_ON_RESET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,307,53,65,13 CONTROL "Pause on Trigger",IDC_RA_CHK_PAUSE_ON_TRIGGER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,376,53,65,13 @@ -166,6 +167,15 @@ BEGIN CONTROL "Show Decimal",IDC_RA_CHK_SHOW_DECIMALS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,383,179,54,10 END +IDD_RA_TRIGGERSUMMARY DIALOGEX 0, 0, 480, 240 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +CAPTION "Trigger Summary" +FONT 8, "MS Shell Dlg", 400, 0, 0x0 +BEGIN + CONTROL "",IDC_RA_LBX_CONDITIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_CLIPCHILDREN | WS_BORDER,4,4,472,216 + PUSHBUTTON "OK",IDOK,426,223,50,14 +END + IDD_RA_GAMETITLESEL DIALOGEX 0, 0, 249, 136 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index 895334a53..adc23cadb 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -2,7 +2,7 @@ #define RA_UI_TRIGGERSUMMARYVIEWMODEL_H #pragma once -#include "ui\ViewModelBase.hh" +#include "ui\WindowViewModelBase.hh" #include "ui\ViewModelCollection.hh" #include "ui\Types.hh" @@ -12,7 +12,7 @@ namespace ra { namespace ui { namespace viewmodels { -class TriggerSummaryViewModel : public ViewModelBase +class TriggerSummaryViewModel : public WindowViewModelBase { public: GSL_SUPPRESS_F6 TriggerSummaryViewModel() noexcept = default; @@ -51,6 +51,7 @@ public: TriggerClauseType nType = ra::itoe(0); }; + ViewModelCollection& Clauses() { return m_vClauses; } const ViewModelCollection& Clauses() const { return m_vClauses; } private: diff --git a/src/ui/viewmodels/TriggerViewModel.cpp b/src/ui/viewmodels/TriggerViewModel.cpp index 790d17458..f7089b8d3 100644 --- a/src/ui/viewmodels/TriggerViewModel.cpp +++ b/src/ui/viewmodels/TriggerViewModel.cpp @@ -18,6 +18,7 @@ #include "ui\EditorTheme.hh" #include "ui\viewmodels\MessageBoxViewModel.hh" #include "ui\viewmodels\WindowManager.hh" +#include "ui\viewmodels\TriggerSummaryViewModel.hh" namespace ra { namespace ui { @@ -937,6 +938,28 @@ void TriggerViewModel::UpdateFrom(const rc_value_t& pValue) UpdateGroups(*m_pTrigger); } +void TriggerViewModel::Summarize() +{ + auto* pGroup = m_vGroups.GetItemAt(GetSelectedGroupIndex()); + if (!pGroup) + return; + + auto* pCondSet = pGroup->GetConditionSet(IsValue()); + if (!pCondSet) + return; + + const auto& pAssetEditor = ra::services::ServiceLocator::Get().AssetEditor; + TriggerSummaryViewModel vmSummary; + + if (m_vGroups.Count() == 1) + vmSummary.SetWindowTitle(L"Trigger Summary - " + pAssetEditor.GetAsset()->GetName()); + else + vmSummary.SetWindowTitle(pGroup->GetLabel() + L" Summary - " + pAssetEditor.GetAsset()->GetName()); + + vmSummary.InitializeFrom(*pCondSet); + vmSummary.ShowModal(pAssetEditor); +} + void TriggerViewModel::SelectRange(gsl::index nFrom, gsl::index nTo, bool bValue) { m_vConditions.RemoveNotifyTarget(*this); diff --git a/src/ui/viewmodels/TriggerViewModel.hh b/src/ui/viewmodels/TriggerViewModel.hh index 1a56b82a1..4a75e4373 100644 --- a/src/ui/viewmodels/TriggerViewModel.hh +++ b/src/ui/viewmodels/TriggerViewModel.hh @@ -122,6 +122,8 @@ public: void AddGroup(); void RemoveGroup(); + void Summarize(); + /// /// Gets the list of condition types. /// diff --git a/src/ui/win32/AssetEditorDialog.cpp b/src/ui/win32/AssetEditorDialog.cpp index 41c46ffa7..a99eb322e 100644 --- a/src/ui/win32/AssetEditorDialog.cpp +++ b/src/ui/win32/AssetEditorDialog.cpp @@ -841,6 +841,7 @@ AssetEditorDialog::AssetEditorDialog(AssetEditorViewModel& vmAssetEditor) m_bindWindow.BindEnabled(IDC_RA_ADD_GROUP, AssetEditorViewModel::IsAssetLoadedProperty); m_bindWindow.BindEnabled(IDC_RA_DELETE_GROUP, AssetEditorViewModel::IsAssetLoadedProperty); m_bindWindow.BindEnabled(IDC_RA_COPY_ALL, AssetEditorViewModel::IsAssetLoadedProperty); + m_bindWindow.BindEnabled(IDC_RA_VIEW_DETAIL, AssetEditorViewModel::IsAssetLoadedProperty); m_bindWindow.BindEnabled(IDC_RA_LBX_CONDITIONS, AssetEditorViewModel::IsAssetLoadedProperty); m_bindWindow.BindEnabled(IDC_RA_ADD_COND, AssetEditorViewModel::IsAssetLoadedProperty); m_bindWindow.BindEnabled(IDC_RA_DELETE_COND, AssetEditorViewModel::IsAssetLoadedProperty); @@ -1024,6 +1025,7 @@ AssetEditorDialog::AssetEditorDialog(AssetEditorViewModel& vmAssetEditor) SetAnchor(IDC_RA_DELETE_GROUP, Anchor::Bottom | Anchor::Left); SetAnchor(IDC_RA_COPY_ALL, Anchor::Bottom | Anchor::Left); SetAnchor(IDC_RA_ERROR_INDICATOR, Anchor::Top | Anchor::Left); + SetAnchor(IDC_RA_VIEW_DETAIL, Anchor::Top | Anchor::Right); SetAnchor(IDC_RA_CHK_HIGHLIGHTS, Anchor::Top | Anchor::Right); SetAnchor(IDC_RA_CHK_PAUSE_ON_RESET, Anchor::Top | Anchor::Right); SetAnchor(IDC_RA_CHK_PAUSE_ON_TRIGGER, Anchor::Top | Anchor::Right); @@ -1234,6 +1236,15 @@ BOOL AssetEditorDialog::OnCommand(WORD nCommand) return TRUE; } + + case IDC_RA_VIEW_DETAIL: + { + auto* vmAssetEditor = dynamic_cast(&m_vmWindow); + if (vmAssetEditor) + vmAssetEditor->Trigger().Summarize(); + + return TRUE; + } } return DialogBase::OnCommand(nCommand); diff --git a/src/ui/win32/Desktop.cpp b/src/ui/win32/Desktop.cpp index 6f6ceaf43..465994647 100644 --- a/src/ui/win32/Desktop.cpp +++ b/src/ui/win32/Desktop.cpp @@ -23,6 +23,7 @@ #include "ui/win32/PointerInspectorDialog.hh" #include "ui/win32/ProgressDialog.hh" #include "ui/win32/RichPresenceDialog.hh" +#include "ui/win32/TriggerSummaryDialog.hh" #include "ui/win32/UnknownGameDialog.hh" #include "ui/win32/bindings/ControlBinding.hh" @@ -51,6 +52,7 @@ Desktop::Desktop() noexcept m_vDialogPresenters.emplace_back(new (std::nothrow) AssetEditorDialog::Presenter); m_vDialogPresenters.emplace_back(new (std::nothrow) PointerFinderDialog::Presenter); m_vDialogPresenters.emplace_back(new (std::nothrow) PointerInspectorDialog::Presenter); + m_vDialogPresenters.emplace_back(new (std::nothrow) TriggerSummaryDialog::Presenter); m_vDialogPresenters.emplace_back(new (std::nothrow) FileDialog::Presenter); m_vDialogPresenters.emplace_back(new (std::nothrow) OverlaySettingsDialog::Presenter); m_vDialogPresenters.emplace_back(new (std::nothrow) NewAssetDialog::Presenter); diff --git a/src/ui/win32/TriggerSummaryDialog.cpp b/src/ui/win32/TriggerSummaryDialog.cpp new file mode 100644 index 000000000..cbbc4c8ff --- /dev/null +++ b/src/ui/win32/TriggerSummaryDialog.cpp @@ -0,0 +1,100 @@ +#include "TriggerSummaryDialog.hh" + +#include "RA_Resource.h" + +#include "data\context\EmulatorContext.hh" + +#include "ui\viewmodels\MessageBoxViewModel.hh" +#include "ui\viewmodels\PointerInspectorViewModel.hh" + +#include "ui\win32\bindings\GridAddressColumnBinding.hh" +#include "ui\win32\bindings\GridMemoryWatchFormatColumnBinding.hh" +#include "ui\win32\bindings\GridMemoryWatchValueColumnBinding.hh" +#include "ui\win32\bindings\GridLookupColumnBinding.hh" +#include "ui\win32\bindings\GridNumberColumnBinding.hh" +#include "ui\win32\bindings\GridTextColumnBinding.hh" + +#include "util\EnumOps.hh" +#include "util\Log.hh" + +using ra::ui::viewmodels::TriggerSummaryViewModel; +using ra::ui::win32::bindings::GridColumnBinding; + +namespace ra { +namespace ui { +namespace win32 { + +bool TriggerSummaryDialog::Presenter::IsSupported(const ra::ui::WindowViewModelBase& vmViewModel) noexcept +{ + return (dynamic_cast(&vmViewModel) != nullptr); +} + +void TriggerSummaryDialog::Presenter::ShowModal(ra::ui::WindowViewModelBase& vmViewModel, HWND hParentWnd) +{ + auto* vmTriggerSummary = dynamic_cast(&vmViewModel); + Expects(vmTriggerSummary != nullptr); + + TriggerSummaryDialog oDialog(*vmTriggerSummary); + oDialog.CreateModalWindow(MAKEINTRESOURCE(IDD_RA_TRIGGERSUMMARY), this, hParentWnd); +} + +void TriggerSummaryDialog::Presenter::ShowWindow(ra::ui::WindowViewModelBase& vmViewModel) +{ + ShowModal(vmViewModel, nullptr); +} + +// ------------------------------------ + +TriggerSummaryDialog::TriggerSummaryDialog(TriggerSummaryViewModel& vmTriggerSummary) + : DialogBase(vmTriggerSummary), + m_bindClauses(vmTriggerSummary) +{ + m_bindWindow.SetInitialPosition(RelativePosition::Center, RelativePosition::Center, "Trigger Summary"); + + auto pIndicesColumn = std::make_unique( + TriggerSummaryViewModel::TriggerClauseViewModel::IndicesProperty); + pIndicesColumn->SetHeader(L"Indices"); + pIndicesColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 80); + pIndicesColumn->SetAlignment(ra::ui::RelativePosition::Far); + m_bindClauses.BindColumn(0, std::move(pIndicesColumn)); + + auto pReferenceColumn = std::make_unique( + TriggerSummaryViewModel::TriggerClauseViewModel::ReferenceProperty); + pReferenceColumn->SetHeader(L"Reference"); + pReferenceColumn->SetWidth(GridColumnBinding::WidthType::Fill, 40); + pReferenceColumn->BindTooltip(TriggerSummaryViewModel::TriggerClauseViewModel::ReferenceProperty); + m_bindClauses.BindColumn(1, std::move(pReferenceColumn)); + + auto pOperationColumn = std::make_unique( + TriggerSummaryViewModel::TriggerClauseViewModel::OperationProperty); + pOperationColumn->SetHeader(L"Operation"); + pOperationColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 120); + m_bindClauses.BindColumn(2, std::move(pOperationColumn)); + + auto pTargetColumn = std::make_unique( + TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty); + pTargetColumn->SetHeader(L"Target"); + pTargetColumn->SetWidth(GridColumnBinding::WidthType::Fill, 40); + pTargetColumn->BindTooltip(TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty); + m_bindClauses.BindColumn(3, std::move(pTargetColumn)); + + m_bindClauses.BindItems(vmTriggerSummary.Clauses()); + + using namespace ra::bitwise_ops; + SetAnchor(IDC_RA_LBX_CONDITIONS, Anchor::Top | Anchor::Left | Anchor::Bottom | Anchor::Right); + SetAnchor(IDOK, Anchor::Bottom | Anchor::Right); + + SetMinimumSize(480, 192); +} + +BOOL TriggerSummaryDialog::OnInitDialog() +{ + m_bindClauses.SetControl(*this, IDC_RA_LBX_CONDITIONS); + m_bindClauses.InitializeTooltips(std::chrono::seconds(30)); + + return DialogBase::OnInitDialog(); +} + +} // namespace win32 +} // namespace ui +} // namespace ra diff --git a/src/ui/win32/TriggerSummaryDialog.hh b/src/ui/win32/TriggerSummaryDialog.hh new file mode 100644 index 000000000..1fc10bbb7 --- /dev/null +++ b/src/ui/win32/TriggerSummaryDialog.hh @@ -0,0 +1,43 @@ +#ifndef RA_UI_WIN32_DLG_TRIGGERSUMMARY_H +#define RA_UI_WIN32_DLG_TRIGGERSUMMARY_H +#pragma once + +#include "ui/viewmodels/TriggerSummaryViewModel.hh" +#include "ui/win32/bindings/GridBinding.hh" +#include "ui/win32/DialogBase.hh" +#include "ui/win32/IDialogPresenter.hh" + +namespace ra { +namespace ui { +namespace win32 { + +class TriggerSummaryDialog : public DialogBase +{ +public: + explicit TriggerSummaryDialog(ra::ui::viewmodels::TriggerSummaryViewModel& vmTriggerSummary); + virtual ~TriggerSummaryDialog() noexcept = default; + TriggerSummaryDialog(const TriggerSummaryDialog&) noexcept = delete; + TriggerSummaryDialog& operator=(const TriggerSummaryDialog&) noexcept = delete; + TriggerSummaryDialog(TriggerSummaryDialog&&) noexcept = delete; + TriggerSummaryDialog& operator=(TriggerSummaryDialog&&) noexcept = delete; + + class Presenter : public IDialogPresenter + { + public: + bool IsSupported(const ra::ui::WindowViewModelBase& viewModel) noexcept override; + void ShowWindow(ra::ui::WindowViewModelBase& viewModel) override; + void ShowModal(ra::ui::WindowViewModelBase& viewModel, HWND hParentWnd) override; + }; + +protected: + BOOL OnInitDialog() override; + +private: + ra::ui::win32::bindings::GridBinding m_bindClauses; +}; + +} // namespace win32 +} // namespace ui +} // namespace ra + +#endif // !RA_UI_WIN32_DLG_TRIGGERSUMMARY_H From b50d924e8c5017853b16bfdf0cefa89026de9f89 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 6 Jan 2026 12:23:37 -0700 Subject: [PATCH 08/15] update operation for delta/prior --- src/devkit/data/ModelPropertyContainer.hh | 2 +- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 38 ++++++++++++++++--- .../TriggerSummaryViewModel_Tests.cpp | 20 ++++++++++ 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/devkit/data/ModelPropertyContainer.hh b/src/devkit/data/ModelPropertyContainer.hh index f57427a81..f54f4bbf4 100644 --- a/src/devkit/data/ModelPropertyContainer.hh +++ b/src/devkit/data/ModelPropertyContainer.hh @@ -14,7 +14,7 @@ class ModelPropertyContainer public: GSL_SUPPRESS_F6 ModelPropertyContainer() = default; -#ifdef DEBUG +#ifndef NDEBUG virtual ~ModelPropertyContainer() noexcept { m_bDestructed = true; } diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index cf6e2686a..f0671a40d 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -269,38 +269,62 @@ static std::wstring EnumValueFromText(std::wstring_view sEnumText) static void HandleOperation(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, uint8_t nOperation) { + std::wstring sOperation; + if (rc_operand_is_memref(&pClause.pCondition->operand1)) + { + switch (pClause.pCondition->operand1.type) + { + case RC_OPERAND_ADDRESS: + sOperation = L"is"; + break; + + case RC_OPERAND_PRIOR: + sOperation = L"was"; + break; + + case RC_OPERAND_DELTA: + sOperation = L"last frame was"; + break; + } + } + else + { + sOperation = L"is"; + } + switch (nOperation) { case RC_OPERATOR_EQ: - pClause.SetOperation(L"is"); pClause.nType = TriggerClauseType::Is; break; case RC_OPERATOR_NE: - pClause.SetOperation(L"is not"); + sOperation += L" not"; pClause.nType = TriggerClauseType::IsNot; break; case RC_OPERATOR_GE: - pClause.SetOperation(L"is at least"); + sOperation += L" at least"; pClause.nType = TriggerClauseType::Comparison; break; case RC_OPERATOR_GT: - pClause.SetOperation(L"is greater than"); + sOperation += L" greater than"; pClause.nType = TriggerClauseType::Comparison; break; case RC_OPERATOR_LE: - pClause.SetOperation(L"is at most"); + sOperation += L" at most"; pClause.nType = TriggerClauseType::Comparison; break; case RC_OPERATOR_LT: - pClause.SetOperation(L"is less than"); + sOperation += L" less than"; pClause.nType = TriggerClauseType::Comparison; break; } + + pClause.SetOperation(sOperation); } static std::wstring OperandToString(const rc_operand_t& pOperand) @@ -311,6 +335,8 @@ static std::wstring OperandToString(const rc_operand_t& pOperand) return std::to_wstring(pOperand.value.num); case RC_OPERAND_ADDRESS: + case RC_OPERAND_DELTA: + case RC_OPERAND_PRIOR: return ra::Widen(ra::ByteAddressToString(pOperand.value.memref->address)); default: diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index f6af159fb..7c0596290 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -69,6 +69,26 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.AssertClause(1, L"2", L"0x2345", L"is not", L"0"); } + TEST_METHOD(TestSimpleDeltaOnly) + { + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("d0xH1234=5_d0xH2345!=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"0x1234", L"last frame was", L"5"); + summary.AssertClause(1, L"2", L"0x2345", L"last frame was not", L"0"); + } + + TEST_METHOD(TestSimplePriorOnly) + { + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("p0xH1234=5_p0xH2345!=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"0x1234", L"was", L"5"); + summary.AssertClause(1, L"2", L"0x2345", L"was not", L"0"); + } + TEST_METHOD(TestSimpleNote) { TriggerSummaryViewModelHarness summary; From f804cffd5d8efb7bf719ad4f1373372e50fe1d0a Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 6 Jan 2026 14:14:33 -0700 Subject: [PATCH 09/15] add AddHeaders function --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 186 ++++++++++++++++-- src/ui/viewmodels/TriggerSummaryViewModel.hh | 9 + src/ui/viewmodels/TriggerViewModel.cpp | 2 + src/ui/win32/TriggerSummaryDialog.cpp | 7 + .../TriggerSummaryViewModel_Tests.cpp | 88 ++++++++- 5 files changed, 276 insertions(+), 16 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index f0671a40d..e8b0ea6cc 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -7,6 +7,8 @@ #include "services\ServiceLocator.hh" +#include "ui\EditorTheme.hh" + #include "util\Strings.hh" #include @@ -15,27 +17,45 @@ namespace ra { namespace ui { namespace viewmodels { -const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::IndicesProperty("TriggerClauseViewModel", "Indices", L"1"); +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::IndicesProperty("TriggerClauseViewModel", "Indices", L""); const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::ReferenceProperty("TriggerClauseViewModel", "Reference", L"0x0000"); const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::OperationProperty("TriggerClauseViewModel", "Operation", L"is"); -const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty("TriggerClauseViewModel", "Target", L"0"); +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty("TriggerClauseViewModel", "Target", L""); +const StringModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::TallyProperty("TriggerClauseViewModel", "Tally", L""); +const IntModelProperty TriggerSummaryViewModel::TriggerClauseViewModel::ColorProperty("TriggerClauseViewModel", "Color", 0); enum TriggerSummaryViewModel::TriggerClauseViewModel::TriggerClauseType : int { None = 0, - Is, - IsNot, - Comparison, - AlwaysTrue, - AlwaysFalse, - Changed, - HasntChanged, - ChangedTo, - ChangedFrom, + Is, // direct equality comparison (=) + IsNot, // direct inequality comparison (!=) + Comparison, // open-ended comparison (> >= < <=) + AlwaysTrue, // logically impossible to ever be false + AlwaysFalse, // logically impossible to ever be true + Changed, // value differs from its delta + HasntChanged, // value doesn't differ from its delta + ChangedTo, // direct equality comparison (=) with a delta check + ChangedFrom, // direct inequality comparison (!=) with a delta check }; using TriggerClauseType = TriggerSummaryViewModel::TriggerClauseViewModel::TriggerClauseType; +static constexpr bool IsChangeType(TriggerClauseType nType) +{ + switch (nType) + { + case TriggerClauseType::Changed: + case TriggerClauseType::ChangedTo: + case TriggerClauseType::ChangedFrom: + // these are all specific checks of a memory address and its delta. + // as such, they'll only be true on the frame they change. + return true; + + default: + return false; + } +} + static bool IsSameMemoryReference(const rc_operand_t& pOperand1, const rc_operand_t& pOperand2) { switch (pOperand1.type) { @@ -344,6 +364,23 @@ static std::wstring OperandToString(const rc_operand_t& pOperand) } } +static void HandleTally(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, const rc_condition_t& pCondition) +{ + if (pCondition.required_hits == 1) + { + // don't say "do something once" for a single captured hit starting condition + if (pCondition.type != RC_CONDITION_STANDARD) + pClause.SetTally(L"once"); + } + else if (pCondition.required_hits > 1) + { + if (IsChangeType(pClause.nType)) + pClause.SetTally(ra::StringPrintf(L"%u times", pCondition.required_hits)); + else + pClause.SetTally(ra::StringPrintf(L"for %u frames", pCondition.required_hits)); + } +} + static void HandleCompareMemoryReferenceToSelf(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, const rc_condition_t& pCondition) { pClause.SetTarget(L""); @@ -467,6 +504,7 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) { // comparing value to itself HandleCompareMemoryReferenceToSelf(pClause, *pCondition); + HandleTally(pClause, *pCondition); continue; } } @@ -500,6 +538,8 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) pClause.SetTarget(OperandToString(pCondition->operand2)); } + HandleTally(pClause, *pCondition); + if (rc_operand_is_memref(&pCondition->operand1)) { for (gsl::index nIndex = 0; nIndex < m_vClauses.Count() - 1; ++nIndex) @@ -515,6 +555,130 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) } } +void TriggerSummaryViewModel::AddHeaders() +{ + enum class TriggerClauseBucket + { + None, + Trigger, + Ongoing, + Unless, + Start, + Restart, + Unimportant, + Conflicting, + + Count, + }; + + std::vector> vBuckets(ra::etoi(TriggerClauseBucket::Count)); + + for (gsl::index nIndex = 0; nIndex < m_vClauses.Count(); ++nIndex) + { + auto* pClause = m_vClauses.GetItemAt(nIndex); + if (!pClause) + continue; + + auto nBucket = TriggerClauseBucket::Ongoing; + + switch (pClause->nType) + { + default: + // anything that is only true for one frame should be classified as a trigger. + if (IsChangeType(pClause->nType)) + nBucket = TriggerClauseBucket::Trigger; + break; + + case TriggerClauseType::AlwaysTrue: + nBucket = TriggerClauseBucket::Unimportant; + break; + + case TriggerClauseType::AlwaysFalse: + nBucket = TriggerClauseBucket::Conflicting; + break; + } + + switch (pClause->pCondition->type) + { + case RC_CONDITION_PAUSE_IF: + nBucket = TriggerClauseBucket::Unless; + break; + + case RC_CONDITION_RESET_IF: + nBucket = TriggerClauseBucket::Restart; + break; + + case RC_CONDITION_TRIGGER: + nBucket = TriggerClauseBucket::Trigger; + break; + + default: + if (pClause->pCondition->required_hits > 0) + nBucket = TriggerClauseBucket::Start; + break; + } + + vBuckets.at(ra::etoi(nBucket)).push_back(pClause); + } + + const auto& pTheme = ra::services::ServiceLocator::Get(); + + gsl::index nInsertIndex = 0; + auto fBuildGroup = [this, &vBuckets, &nInsertIndex](TriggerClauseBucket nBucket, const std::wstring& sHeader, ra::ui::Color nColor) + { + const auto& vBucketItems = vBuckets.at(ra::etoi(nBucket)); + if (vBucketItems.empty()) + return; + + auto& vmHeader = m_vClauses.Add(); + vmHeader.SetReference(sHeader); + vmHeader.SetOperation(L""); + vmHeader.SetColor(nColor); + m_vClauses.MoveItem(m_vClauses.Count() - 1, nInsertIndex++); + + for (const auto* pClause : vBucketItems) + { + for (gsl::index nIndex = nInsertIndex; nIndex < m_vClauses.Count(); ++nIndex) + { + if (m_vClauses.GetItemAt(nIndex) == pClause) + { + if (nIndex != nInsertIndex) + m_vClauses.MoveItem(nIndex, nInsertIndex); + ++nInsertIndex; + break; + } + } + } + }; + + fBuildGroup(TriggerClauseBucket::Conflicting, L"--- CONFLICTING ---", pTheme.ColorTriggerPauseTrue()); + + if (!vBuckets.at(ra::etoi(TriggerClauseBucket::Trigger)).empty()) + { + fBuildGroup(TriggerClauseBucket::Trigger, L"--- TRIGGER WHEN ---", pTheme.ColorTriggerBecomingTrue()); + fBuildGroup(TriggerClauseBucket::Ongoing, L"--- WHILE ---", pTheme.ColorTriggerIsTrue()); + } + else + { + // No trigger clauses. Promote the Ongoing clauses to trigger clauses + fBuildGroup(TriggerClauseBucket::Ongoing, L"--- TRIGGER WHEN ---", pTheme.ColorTriggerBecomingTrue()); + } + + const auto vUnlessItems = vBuckets.at(ra::etoi(TriggerClauseBucket::Unless)); + if (!vUnlessItems.empty()) { + fBuildGroup(TriggerClauseBucket::Unless, vUnlessItems.size() > 1 ? L"--- UNLESS ANY ---" : L"--- UNLESS ---", pTheme.ColorTriggerPauseTrue()); + } + + fBuildGroup(TriggerClauseBucket::Start, L"--- STARTING WHEN ---", pTheme.ColorTriggerWasTrue()); + + const auto vRestartItems = vBuckets.at(ra::etoi(TriggerClauseBucket::Restart)); + if (!vRestartItems.empty()) { + fBuildGroup(TriggerClauseBucket::Restart, vRestartItems.size() > 1 ? L"--- FAILING WHEN ANY ---" : L"--- FAILING WHEN ---", pTheme.ColorTriggerResetTrue()); + } + + fBuildGroup(TriggerClauseBucket::Unimportant, L"--- IMPOTENT ---", pTheme.ColorTriggerIsTrue()); +} + } // namespace viewmodels } // namespace ui } // namespace ra diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index adc23cadb..b916a28d4 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -24,6 +24,7 @@ public: TriggerSummaryViewModel& operator=(TriggerSummaryViewModel&&) noexcept = delete; void InitializeFrom(const rc_condset_t& pCondSet); + void AddHeaders(); class TriggerClauseViewModel : public ViewModelBase { @@ -44,6 +45,14 @@ public: const std::wstring& GetTarget() const { return GetValue(TargetProperty); } void SetTarget(const std::wstring& sValue) { SetValue(TargetProperty, sValue); } + static const StringModelProperty TallyProperty; + const std::wstring& GetTally() const { return GetValue(TallyProperty); } + void SetTally(const std::wstring& sValue) { SetValue(TallyProperty, sValue); } + + static const IntModelProperty ColorProperty; + Color GetColor() const { return Color(ra::to_unsigned(GetValue(ColorProperty))); } + void SetColor(Color value) { SetValue(ColorProperty, ra::to_signed(value.ARGB)); } + std::wstring GetTooltip(const StringModelProperty& nProperty) const; const rc_condition_t* pCondition = nullptr; diff --git a/src/ui/viewmodels/TriggerViewModel.cpp b/src/ui/viewmodels/TriggerViewModel.cpp index f7089b8d3..2338c94e3 100644 --- a/src/ui/viewmodels/TriggerViewModel.cpp +++ b/src/ui/viewmodels/TriggerViewModel.cpp @@ -957,6 +957,8 @@ void TriggerViewModel::Summarize() vmSummary.SetWindowTitle(pGroup->GetLabel() + L" Summary - " + pAssetEditor.GetAsset()->GetName()); vmSummary.InitializeFrom(*pCondSet); + vmSummary.AddHeaders(); + vmSummary.ShowModal(pAssetEditor); } diff --git a/src/ui/win32/TriggerSummaryDialog.cpp b/src/ui/win32/TriggerSummaryDialog.cpp index cbbc4c8ff..734da35c6 100644 --- a/src/ui/win32/TriggerSummaryDialog.cpp +++ b/src/ui/win32/TriggerSummaryDialog.cpp @@ -78,6 +78,13 @@ TriggerSummaryDialog::TriggerSummaryDialog(TriggerSummaryViewModel& vmTriggerSum pTargetColumn->BindTooltip(TriggerSummaryViewModel::TriggerClauseViewModel::TargetProperty); m_bindClauses.BindColumn(3, std::move(pTargetColumn)); + auto pTallyColumn = std::make_unique( + TriggerSummaryViewModel::TriggerClauseViewModel::TallyProperty); + pTallyColumn->SetHeader(L"Tally"); + pTallyColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 80); + m_bindClauses.BindColumn(4, std::move(pTallyColumn)); + + m_bindClauses.BindRowColor(TriggerSummaryViewModel::TriggerClauseViewModel::ColorProperty); m_bindClauses.BindItems(vmTriggerSummary.Clauses()); using namespace ra::bitwise_ops; diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index 7c0596290..1107ef04b 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -13,6 +13,8 @@ #include "tests\mocks\MockUserContext.hh" #include "tests\mocks\MockWindowManager.hh" +#include "ui\EditorTheme.hh" + #include using namespace Microsoft::VisualStudio::CppUnitTestFramework; @@ -44,14 +46,21 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) } void AssertClause(gsl::index nIndex, const std::wstring& sIndices, - const std::wstring& sReference, const std::wstring& sOperation, const std::wstring& sTarget) + const std::wstring& sReference, const std::wstring& sOperation, + const std::wstring& sTarget, const std::wstring& sTally = L"") { const auto* pClause = Clauses().GetItemAt(nIndex); Assert::IsNotNull(pClause); - Assert::AreEqual(sIndices, pClause->GetIndices(), L"Indices differ"); - Assert::AreEqual(sReference, pClause->GetReference(), L"Reference differs"); - Assert::AreEqual(sOperation, pClause->GetOperation(), L"Operation differs"); - Assert::AreEqual(sTarget, pClause->GetTarget(), L"Target differs"); + Assert::AreEqual(sIndices, pClause->GetIndices(), ra::StringPrintf(L"Indices on clause %u differ", nIndex).c_str()); + Assert::AreEqual(sReference, pClause->GetReference(), ra::StringPrintf(L"reference on clause %u differ", nIndex).c_str()); + Assert::AreEqual(sOperation, pClause->GetOperation(), ra::StringPrintf(L"Operation on clause %u differ", nIndex).c_str()); + Assert::AreEqual(sTarget, pClause->GetTarget(), ra::StringPrintf(L"Target on clause %u differ", nIndex).c_str()); + Assert::AreEqual(sTally, pClause->GetTally(), ra::StringPrintf(L"Tally on clause %u differ", nIndex).c_str()); + } + + void AssertHeader(gsl::index nIndex, const std::wstring& sHeader) + { + AssertClause(nIndex, L"", sHeader, L"", L"", L""); } private: @@ -89,6 +98,26 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.AssertClause(1, L"2", L"0x2345", L"was not", L"0"); } + TEST_METHOD(TestSimpleHitTarget) + { + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("0xH1234=5.8._0xH2345>d0xH2345.4."); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"0x1234", L"is", L"5", L"for 8 frames"); + summary.AssertClause(1, L"2", L"0x2345", L"increased", L"", L"4 times"); + } + + TEST_METHOD(TestSimpleOnce) + { + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("0xH1234=5.1._R:0xH2345=6.1."); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"0x1234", L"is", L"5", L""); // don't report once for "start" conditions + summary.AssertClause(1, L"2", L"0x2345", L"is", L"6", L"once"); // do report once for non-"start" conditions + } + TEST_METHOD(TestSimpleNote) { TriggerSummaryViewModelHarness summary; @@ -209,6 +238,55 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) Assert::AreEqual({ 1U }, summary.Clauses().Count()); summary.AssertClause(0, L"1-2", L"World", L"decreased to", L"5"); } + + TEST_METHOD(TestAddHeadersSimple) + { + ra::ui::EditorTheme pTheme; + ra::services::ServiceLocator::ServiceOverride pThemeOverride(&pTheme); + + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("0xH1234=5_0xH2345!=0"); + summary.AddHeaders(); + + Assert::AreEqual({ 3U }, summary.Clauses().Count()); + summary.AssertHeader(0, L"--- TRIGGER WHEN ---"); + summary.AssertClause(1, L"1", L"0x1234", L"is", L"5"); + summary.AssertClause(2, L"2", L"0x2345", L"is not", L"0"); + } + + TEST_METHOD(TestAddHeadersSimpleWithDelta) + { + ra::ui::EditorTheme pTheme; + ra::services::ServiceLocator::ServiceOverride pThemeOverride(&pTheme); + + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("0xH1234=5_0xH2345>d0xH2345"); + summary.AddHeaders(); + + Assert::AreEqual({ 4U }, summary.Clauses().Count()); + summary.AssertHeader(0, L"--- TRIGGER WHEN ---"); + summary.AssertClause(1, L"2", L"0x2345", L"increased", L""); + summary.AssertHeader(2, L"--- WHILE ---"); + summary.AssertClause(3, L"1", L"0x1234", L"is", L"5"); + } + + TEST_METHOD(TestAddHeadersHitTargetWithReset) + { + ra::ui::EditorTheme pTheme; + ra::services::ServiceLocator::ServiceOverride pThemeOverride(&pTheme); + + TriggerSummaryViewModelHarness summary; + summary.InitializeFrom("0xH1234=5_0xH2345=6.1._R:0x3456=8.3."); + summary.AddHeaders(); + + Assert::AreEqual({ 6U }, summary.Clauses().Count()); + summary.AssertHeader(0, L"--- TRIGGER WHEN ---"); + summary.AssertClause(1, L"1", L"0x1234", L"is", L"5"); + summary.AssertHeader(2, L"--- STARTING WHEN ---"); + summary.AssertClause(3, L"2", L"0x2345", L"is", L"6"); + summary.AssertHeader(4, L"--- FAILING WHEN ---"); + summary.AssertClause(5, L"3", L"0x3456", L"is", L"8", L"for 3 frames"); + } }; } // namespace tests From 65a2ed68733cc0e1dc8e4ca53b2679eec1483943 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Wed, 7 Jan 2026 05:55:47 -0700 Subject: [PATCH 10/15] handle change to/from specific values --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 76 ++++++++++++++----- src/ui/viewmodels/TriggerSummaryViewModel.hh | 4 + .../TriggerSummaryViewModel_Tests.cpp | 22 ++++++ 3 files changed, 82 insertions(+), 20 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index e8b0ea6cc..daf0fddfb 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -171,6 +171,60 @@ bool TriggerSummaryViewModel::MergeClauses(TriggerSummaryViewModel::TriggerClaus return true; } +bool TriggerSummaryViewModel::MergeChangedToFrom( + TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, + TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, + gsl::index nIndex1, gsl::index nIndex2) +{ + if (pClause1.pCondition->operand1.size >= RC_MEMSIZE_BIT_0 && + pClause1.pCondition->operand1.size <= RC_MEMSIZE_BIT_7) + { + // differing bit values is just a toggle + if (pClause1.pCondition->operand2.type == RC_OPERAND_CONST && + pClause2.pCondition->operand2.type == RC_OPERAND_CONST && + pClause1.pCondition->operand2.value.num != pClause2.pCondition->operand2.value.num) + { + if (pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + // a == n && da == ~n + return MergeClauses(pClause1, pClause2, nIndex2, TriggerClauseType::ChangedTo, L"changed to"); + } + else if (pClause2.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + // da == ~n && a == n + return MergeClauses(pClause2, pClause1, nIndex1, TriggerClauseType::ChangedTo, L"changed to"); + } + + return false; + } + } + + // differing non-bit values have to report both the before and after expectations + if (pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + pClause1.nType = TriggerClauseType::ChangedTo; + pClause1.SetOperation(L"changed to"); + } + else + { + pClause1.nType = TriggerClauseType::ChangedFrom; + pClause1.SetOperation(L"changed from"); + } + + if (pClause2.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) + { + pClause2.nType = TriggerClauseType::ChangedTo; + pClause2.SetOperation(L"changed to"); + } + else + { + pClause2.nType = TriggerClauseType::ChangedFrom; + pClause2.SetOperation(L"changed from"); + } + + return false; +} + bool TriggerSummaryViewModel::MergeClauses( TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, @@ -217,27 +271,9 @@ bool TriggerSummaryViewModel::MergeClauses( } } } - else if (pClause2.nType == TriggerClauseType::Is && - pClause1.pCondition->operand1.size >= RC_MEMSIZE_BIT_0 && - pClause1.pCondition->operand1.size <= RC_MEMSIZE_BIT_7) + else if (pClause2.nType == TriggerClauseType::Is) { - if (pClause1.pCondition->operand2.type == RC_OPERAND_CONST && - pClause2.pCondition->operand2.type == RC_OPERAND_CONST && - pClause1.pCondition->operand2.value.num != pClause2.pCondition->operand2.value.num) - { - if (pClause1.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) - { - // a == n && da == ~n - return MergeClauses(pClause1, pClause2, nIndex2, TriggerClauseType::ChangedTo, L"changed to"); - } - else if(pClause2.pCondition->operand1.memref_access_type == RC_OPERAND_ADDRESS) - { - // da == ~n && a == n - return MergeClauses(pClause2, pClause1, nIndex1, TriggerClauseType::ChangedTo, L"changed to"); - } - - return false; - } + return MergeChangedToFrom(pClause1, pClause2, nIndex1, nIndex2); } } else if (pClause2.nType == TriggerClauseType::Is) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index b916a28d4..6680a96c4 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -68,6 +68,10 @@ private: TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, gsl::index nIndex1, gsl::index nIndex2); + bool MergeChangedToFrom( + TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, + TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, + gsl::index nIndex1, gsl::index nIndex2); bool MergeClauses(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, gsl::index nDiscardIndex, TriggerClauseViewModel::TriggerClauseType nNewType, const std::wstring& sNewOperation); diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index 1107ef04b..d4df80a36 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -219,6 +219,28 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) summary.AssertClause(0, L"1-2", L"World", L"changed to", L"0"); } + TEST_METHOD(TestBitChangedToFromExplicit) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("0xH1234=1_d0xH1234=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"changed to", L"1"); + summary.AssertClause(1, L"2", L"World", L"changed from", L"0"); + } + + TEST_METHOD(TestBitChangedToFromExplicitDeltaFirst) + { + TriggerSummaryViewModelHarness summary; + summary.mockGameContext.SetCodeNote({ 0x1234U }, L"World"); + summary.InitializeFrom("d0xH1234=1_0xH1234=0"); + + Assert::AreEqual({ 2U }, summary.Clauses().Count()); + summary.AssertClause(0, L"1", L"World", L"changed from", L"1"); + summary.AssertClause(1, L"2", L"World", L"changed to", L"0"); + } + TEST_METHOD(TestIncreasedTo) { TriggerSummaryViewModelHarness summary; From 6616f88be6b48f3b9f832752aea6dd4b2fb9676f Mon Sep 17 00:00:00 2001 From: Jamiras Date: Wed, 7 Jan 2026 07:45:22 -0700 Subject: [PATCH 11/15] fix issue where entire note is enum --- src/data/models/CodeNoteModel.cpp | 9 ++++++--- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 5 +++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/data/models/CodeNoteModel.cpp b/src/data/models/CodeNoteModel.cpp index 0a9972825..7f26df46a 100644 --- a/src/data/models/CodeNoteModel.cpp +++ b/src/data/models/CodeNoteModel.cpp @@ -1492,10 +1492,13 @@ std::wstring CodeNoteModel::GetSummary() const { auto nIndex = svNote.find(svValues); - // ignore bracket and whitespace - --nIndex; - while (nIndex > 0 && isspace(svNote.at(nIndex - 1))) + if (nIndex > 0) + { + // ignore bracket and whitespace between summary and enum values --nIndex; + while (nIndex > 0 && isspace(svNote.at(nIndex - 1))) + --nIndex; + } svNote = svNote.substr(0, nIndex); } diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index daf0fddfb..75ab0f11e 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -528,9 +528,14 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) pNote = pCodeNotes->FindCodeNoteModel(pCondition->operand1.value.memref->address); if (pNote) + { + // TODO: handle subnotes (bit3=x) pClause.SetReference(pNote->GetSummary()); + } else + { pClause.SetReference(OperandToString(pCondition->operand1)); + } HandleOperation(pClause, pCondition->oper); From 71c92e79811f061220b70de8c9b95360950252a6 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Fri, 1 May 2026 21:20:04 -0600 Subject: [PATCH 12/15] add colors specific to explain dialog --- src/ui/EditorTheme.hh | 18 +++++++++++++++ src/ui/viewmodels/TriggerSummaryViewModel.cpp | 23 +++++++++++-------- src/ui/win32/TriggerSummaryDialog.cpp | 4 ++-- .../TriggerSummaryViewModel_Tests.cpp | 2 +- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/ui/EditorTheme.hh b/src/ui/EditorTheme.hh index d58943ffe..e178415ba 100644 --- a/src/ui/EditorTheme.hh +++ b/src/ui/EditorTheme.hh @@ -48,6 +48,16 @@ public: Color ColorTriggerResetTrue() const noexcept { return m_colorTriggerResetTrue; } Color ColorTriggerPauseTrue() const noexcept { return m_colorTriggerPauseTrue; } + // ===== explain ===== + + Color ColorExplainConflicting() const noexcept { return m_colorExplainConflicting; } + Color ColorExplainTriggerWhen() const noexcept { return m_colorExplainTriggerWhen; } + Color ColorExplainWhile() const noexcept { return m_colorExplainWhile; } + Color ColorExplainUnless() const noexcept { return m_colorExplainUnless; } + Color ColorExplainStartingWhen() const noexcept { return m_colorExplainStartingWhen; } + Color ColorExplainFailingWhen() const noexcept { return m_colorExplainFailingWhen; } + Color ColorExplainImpotent() const noexcept { return m_colorExplainImpotent; } + // ===== methods ===== void LoadFromFile(); @@ -76,6 +86,14 @@ private: Color m_colorTriggerBecomingTrue{ 255, 192, 255, 255 }; Color m_colorTriggerResetTrue{ 255, 255, 255, 192 }; Color m_colorTriggerPauseTrue{ 255, 255, 192, 192 }; + + Color m_colorExplainConflicting{ 255, 255, 192, 192 }; // red + Color m_colorExplainTriggerWhen{ 255, 192, 255, 192 }; // green + Color m_colorExplainWhile{ 255, 192, 192, 255 }; // blue + Color m_colorExplainUnless{ 255, 255, 192, 100 }; // orange + Color m_colorExplainStartingWhen{ 255, 255, 232, 128 }; // yellow + Color m_colorExplainFailingWhen{ 255, 255, 192, 192 }; // red + Color m_colorExplainImpotent{ 255, 192, 192, 192 }; // gray }; } // namespace ui diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index 423a1a68a..beac11828 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -532,8 +532,11 @@ void TriggerSummaryViewModel::InitializeFrom(const rc_condset_t& pCondSet) if (pNote) { - // TODO: handle subnotes (bit3=x) - pClause.SetReference(pNote->GetSummary()); + const auto pSubNote = pNote->GetSubNote(ra::data::Memory::SizeFromRcheevosSize(pCondition->operand1.size)); + if (!pSubNote.empty()) + pClause.SetReference(EnumValueFromText(pSubNote)); + else + pClause.SetReference(pNote->GetSummary()); } else { @@ -695,32 +698,32 @@ void TriggerSummaryViewModel::AddHeaders() } }; - fBuildGroup(TriggerClauseBucket::Conflicting, L"--- CONFLICTING ---", pTheme.ColorTriggerPauseTrue()); + fBuildGroup(TriggerClauseBucket::Conflicting, L"--- CONFLICTING ---", pTheme.ColorExplainConflicting()); if (!vBuckets.at(ra::etoi(TriggerClauseBucket::Trigger)).empty()) { - fBuildGroup(TriggerClauseBucket::Trigger, L"--- TRIGGER WHEN ---", pTheme.ColorTriggerBecomingTrue()); - fBuildGroup(TriggerClauseBucket::Ongoing, L"--- WHILE ---", pTheme.ColorTriggerIsTrue()); + fBuildGroup(TriggerClauseBucket::Trigger, L"--- TRIGGER WHEN ---", pTheme.ColorExplainTriggerWhen()); + fBuildGroup(TriggerClauseBucket::Ongoing, L"--- WHILE ---", pTheme.ColorExplainWhile()); } else { // No trigger clauses. Promote the Ongoing clauses to trigger clauses - fBuildGroup(TriggerClauseBucket::Ongoing, L"--- TRIGGER WHEN ---", pTheme.ColorTriggerBecomingTrue()); + fBuildGroup(TriggerClauseBucket::Ongoing, L"--- TRIGGER WHEN ---", pTheme.ColorExplainTriggerWhen()); } const auto vUnlessItems = vBuckets.at(ra::etoi(TriggerClauseBucket::Unless)); if (!vUnlessItems.empty()) { - fBuildGroup(TriggerClauseBucket::Unless, vUnlessItems.size() > 1 ? L"--- UNLESS ANY ---" : L"--- UNLESS ---", pTheme.ColorTriggerPauseTrue()); + fBuildGroup(TriggerClauseBucket::Unless, vUnlessItems.size() > 1 ? L"--- UNLESS ANY ---" : L"--- UNLESS ---", pTheme.ColorExplainUnless()); } - fBuildGroup(TriggerClauseBucket::Start, L"--- STARTING WHEN ---", pTheme.ColorTriggerWasTrue()); + fBuildGroup(TriggerClauseBucket::Start, L"--- STARTING WHEN ---", pTheme.ColorExplainStartingWhen()); const auto vRestartItems = vBuckets.at(ra::etoi(TriggerClauseBucket::Restart)); if (!vRestartItems.empty()) { - fBuildGroup(TriggerClauseBucket::Restart, vRestartItems.size() > 1 ? L"--- FAILING WHEN ANY ---" : L"--- FAILING WHEN ---", pTheme.ColorTriggerResetTrue()); + fBuildGroup(TriggerClauseBucket::Restart, vRestartItems.size() > 1 ? L"--- FAILING WHEN ANY ---" : L"--- FAILING WHEN ---", pTheme.ColorExplainFailingWhen()); } - fBuildGroup(TriggerClauseBucket::Unimportant, L"--- IMPOTENT ---", pTheme.ColorTriggerIsTrue()); + fBuildGroup(TriggerClauseBucket::Unimportant, L"--- IMPOTENT ---", pTheme.ColorExplainImpotent()); } } // namespace viewmodels diff --git a/src/ui/win32/TriggerSummaryDialog.cpp b/src/ui/win32/TriggerSummaryDialog.cpp index 734da35c6..08b85b394 100644 --- a/src/ui/win32/TriggerSummaryDialog.cpp +++ b/src/ui/win32/TriggerSummaryDialog.cpp @@ -68,7 +68,7 @@ TriggerSummaryDialog::TriggerSummaryDialog(TriggerSummaryViewModel& vmTriggerSum auto pOperationColumn = std::make_unique( TriggerSummaryViewModel::TriggerClauseViewModel::OperationProperty); pOperationColumn->SetHeader(L"Operation"); - pOperationColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 120); + pOperationColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 140); m_bindClauses.BindColumn(2, std::move(pOperationColumn)); auto pTargetColumn = std::make_unique( @@ -81,7 +81,7 @@ TriggerSummaryDialog::TriggerSummaryDialog(TriggerSummaryViewModel& vmTriggerSum auto pTallyColumn = std::make_unique( TriggerSummaryViewModel::TriggerClauseViewModel::TallyProperty); pTallyColumn->SetHeader(L"Tally"); - pTallyColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 80); + pTallyColumn->SetWidth(GridColumnBinding::WidthType::Pixels, 60); m_bindClauses.BindColumn(4, std::move(pTallyColumn)); m_bindClauses.BindRowColor(TriggerSummaryViewModel::TriggerClauseViewModel::ColorProperty); diff --git a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp index 6f3de9994..1f06e3f3d 100644 --- a/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerSummaryViewModel_Tests.cpp @@ -194,7 +194,7 @@ TEST_CLASS(TriggerSummaryViewModel_Tests) TEST_METHOD(TestBitChangedTo) { TriggerSummaryViewModelHarness summary; - summary.mockGameContext.SetNote({ 0x1234U }, L"World"); + summary.mockGameContext.SetNote({ 0x1234U }, L"b1:Town\r\nb2:World"); summary.InitializeFrom("0xO1234=1_d0xO1234=0"); Assert::AreEqual({ 1U }, summary.Clauses().Count()); From d1b26ad23562e480d17239f0eff244a22f62add0 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Fri, 1 May 2026 21:26:34 -0600 Subject: [PATCH 13/15] hide button in release build --- src/ui/win32/AssetEditorDialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ui/win32/AssetEditorDialog.cpp b/src/ui/win32/AssetEditorDialog.cpp index 6e319798e..76def23a8 100644 --- a/src/ui/win32/AssetEditorDialog.cpp +++ b/src/ui/win32/AssetEditorDialog.cpp @@ -1092,6 +1092,10 @@ BOOL AssetEditorDialog::OnInitDialog() SendMessage(::GetDlgItem(GetHWND(), IDC_RA_TYPE), CB_SETDROPPEDWIDTH, 70, 0); SendMessage(::GetDlgItem(GetHWND(), IDC_RA_FORMAT), CB_SETDROPPEDWIDTH, 136, 0); +#ifndef _DEBUG + ShowWindow(::GetDlgItem(GetHWND(), IDC_RA_VIEW_DETAIL), SW_HIDE); +#endif + return DialogBase::OnInitDialog(); } From 42a4cc842ad0b006182e2c8d194f0c85f18c73f6 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Mon, 4 May 2026 07:49:31 -0600 Subject: [PATCH 14/15] address analysis warnings --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 6 +++--- src/ui/viewmodels/TriggerSummaryViewModel.hh | 6 ++---- src/ui/viewmodels/TriggerViewModel.cpp | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index beac11828..cd3e49c72 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -56,7 +56,7 @@ static constexpr bool IsChangeType(TriggerClauseType nType) } } -static bool IsSameMemoryReference(const rc_operand_t& pOperand1, const rc_operand_t& pOperand2) +static bool IsSameMemoryReference(const rc_operand_t& pOperand1, const rc_operand_t& pOperand2) noexcept { switch (pOperand1.type) { case RC_OPERAND_CONST: @@ -89,7 +89,7 @@ static constexpr uint32_t ParseUInt32(std::wstring_view sValue) static void ParseRanges(std::vector>& vRanges, const std::wstring& sIndices) { - std::wstring_view sRemaining = sIndices; + const std::wstring_view sRemaining = sIndices; size_t nIndex; do { @@ -111,7 +111,7 @@ static void ParseRanges(std::vector>& vRanges, con } while (nIndex < sRemaining.length()); } -static void MergeIndices(TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, TriggerSummaryViewModel::TriggerClauseViewModel& pClause2) +static void MergeIndices(TriggerSummaryViewModel::TriggerClauseViewModel& pClause1, const TriggerSummaryViewModel::TriggerClauseViewModel& pClause2) { std::vector> vRanges; ParseRanges(vRanges, pClause1.GetIndices()); diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index 6680a96c4..2c994b49a 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -53,15 +53,13 @@ public: Color GetColor() const { return Color(ra::to_unsigned(GetValue(ColorProperty))); } void SetColor(Color value) { SetValue(ColorProperty, ra::to_signed(value.ARGB)); } - std::wstring GetTooltip(const StringModelProperty& nProperty) const; - const rc_condition_t* pCondition = nullptr; enum TriggerClauseType : int; TriggerClauseType nType = ra::itoe(0); }; - ViewModelCollection& Clauses() { return m_vClauses; } - const ViewModelCollection& Clauses() const { return m_vClauses; } + ViewModelCollection& Clauses() noexcept { return m_vClauses; } + const ViewModelCollection& Clauses() const noexcept { return m_vClauses; } private: bool MergeClauses( diff --git a/src/ui/viewmodels/TriggerViewModel.cpp b/src/ui/viewmodels/TriggerViewModel.cpp index 46525e1a6..b2fc4eaa4 100644 --- a/src/ui/viewmodels/TriggerViewModel.cpp +++ b/src/ui/viewmodels/TriggerViewModel.cpp @@ -945,7 +945,7 @@ void TriggerViewModel::Summarize() if (!pGroup) return; - auto* pCondSet = pGroup->GetConditionSet(IsValue()); + const auto* pCondSet = pGroup->GetConditionSet(IsValue()); if (!pCondSet) return; From b6b2dc8bd622c6db0fb9e191850fc99e2e54b801 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Mon, 4 May 2026 07:55:55 -0600 Subject: [PATCH 15/15] address analysis warnings --- src/ui/viewmodels/TriggerSummaryViewModel.cpp | 2 +- src/ui/viewmodels/TriggerSummaryViewModel.hh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.cpp b/src/ui/viewmodels/TriggerSummaryViewModel.cpp index cd3e49c72..536bd1f4e 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.cpp +++ b/src/ui/viewmodels/TriggerSummaryViewModel.cpp @@ -161,7 +161,7 @@ static void MergeIndices(TriggerSummaryViewModel::TriggerClauseViewModel& pClaus } bool TriggerSummaryViewModel::MergeClauses(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, - TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, + const TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, gsl::index nDiscardIndex, TriggerClauseType nNewType, const std::wstring& sNewOperation) { pClause.SetOperation(sNewOperation); diff --git a/src/ui/viewmodels/TriggerSummaryViewModel.hh b/src/ui/viewmodels/TriggerSummaryViewModel.hh index 2c994b49a..02db00856 100644 --- a/src/ui/viewmodels/TriggerSummaryViewModel.hh +++ b/src/ui/viewmodels/TriggerSummaryViewModel.hh @@ -71,7 +71,7 @@ private: TriggerSummaryViewModel::TriggerClauseViewModel& pClause2, gsl::index nIndex1, gsl::index nIndex2); bool MergeClauses(TriggerSummaryViewModel::TriggerClauseViewModel& pClause, - TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, + const TriggerSummaryViewModel::TriggerClauseViewModel& pDiscardClause, gsl::index nDiscardIndex, TriggerClauseViewModel::TriggerClauseType nNewType, const std::wstring& sNewOperation); ViewModelCollection m_vClauses;