diff options
| author | Tilka <tilkax@gmail.com> | 2022-05-29 00:57:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-29 00:57:43 +0100 |
| commit | e17a4f49f5bb2fd3ca4322db82c100206e00cc15 (patch) | |
| tree | 3c71b494b3f9b9a5db726b80caf6f0f6944d34db /Source/Core/Common | |
| parent | 3dbc18060bc6f15eeaa3c0e4de907f8a06efa2bf (diff) | |
| parent | c8e20c569b7deae97b411a6eea5c846f342bbf17 (diff) | |
Merge pull request #10668 from Dentomologist/convert_pointerwrap_mode_to_enum_class
Convert PointerWrap::Mode to enum class
Diffstat (limited to 'Source/Core/Common')
| -rw-r--r-- | Source/Core/Common/ChunkFile.h | 85 |
1 files changed, 45 insertions, 40 deletions
diff --git a/Source/Core/Common/ChunkFile.h b/Source/Core/Common/ChunkFile.h index 9fd785459e..5a9cf1823e 100644 --- a/Source/Core/Common/ChunkFile.h +++ b/Source/Core/Common/ChunkFile.h @@ -38,36 +38,41 @@ class PointerWrap { public: - enum Mode + enum class Mode { - MODE_READ = 1, // load - MODE_WRITE, // save - MODE_MEASURE, // calculate size - MODE_VERIFY, // compare + Read, + Write, + Measure, + Verify, }; private: u8** m_ptr_current; u8* m_ptr_end; - Mode mode; + Mode m_mode; public: - PointerWrap(u8** ptr, size_t size, Mode mode_) - : m_ptr_current(ptr), m_ptr_end(*ptr + size), mode(mode_) + PointerWrap(u8** ptr, size_t size, Mode mode) + : m_ptr_current(ptr), m_ptr_end(*ptr + size), m_mode(mode) { } - void SetMode(Mode mode_) { mode = mode_; } - Mode GetMode() const { return mode; } + void SetMeasureMode() { m_mode = Mode::Measure; } + void SetVerifyMode() { m_mode = Mode::Verify; } + bool IsReadMode() const { return m_mode == Mode::Read; } + bool IsWriteMode() const { return m_mode == Mode::Write; } + bool IsMeasureMode() const { return m_mode == Mode::Measure; } + bool IsVerifyMode() const { return m_mode == Mode::Verify; } + template <typename K, class V> void Do(std::map<K, V>& x) { u32 count = (u32)x.size(); Do(count); - switch (mode) + switch (m_mode) { - case MODE_READ: + case Mode::Read: for (x.clear(); count != 0; --count) { std::pair<K, V> pair; @@ -77,9 +82,9 @@ public: } break; - case MODE_WRITE: - case MODE_MEASURE: - case MODE_VERIFY: + case Mode::Write: + case Mode::Measure: + case Mode::Verify: for (auto& elem : x) { Do(elem.first); @@ -95,9 +100,9 @@ public: u32 count = (u32)x.size(); Do(count); - switch (mode) + switch (m_mode) { - case MODE_READ: + case Mode::Read: for (x.clear(); count != 0; --count) { V value; @@ -106,9 +111,9 @@ public: } break; - case MODE_WRITE: - case MODE_MEASURE: - case MODE_VERIFY: + case Mode::Write: + case Mode::Measure: + case Mode::Verify: for (const V& val : x) { Do(val); @@ -154,9 +159,9 @@ public: bool present = x.has_value(); Do(present); - switch (mode) + switch (m_mode) { - case MODE_READ: + case Mode::Read: if (present) { x = std::make_optional<T>(); @@ -168,9 +173,9 @@ public: } break; - case MODE_WRITE: - case MODE_MEASURE: - case MODE_VERIFY: + case Mode::Write: + case Mode::Measure: + case Mode::Verify: if (present) Do(x.value()); @@ -216,10 +221,10 @@ public: Do(count); u8* current = *m_ptr_current; *m_ptr_current += count; - if (mode != MODE_MEASURE && *m_ptr_current > m_ptr_end) + if (!IsMeasureMode() && *m_ptr_current > m_ptr_end) { // trying to read/write past the end of the buffer, prevent this - mode = MODE_MEASURE; + SetMeasureMode(); } return current; } @@ -228,7 +233,7 @@ public: { bool s = flag.IsSet(); Do(s); - if (mode == MODE_READ) + if (IsReadMode()) flag.Set(s); } @@ -237,7 +242,7 @@ public: { T temp = atomic.load(std::memory_order_relaxed); Do(temp); - if (mode == MODE_READ) + if (IsReadMode()) atomic.store(temp, std::memory_order_relaxed); } @@ -267,7 +272,7 @@ public: Do(stable); - if (mode == MODE_READ) + if (IsReadMode()) x = stable != 0; } @@ -278,7 +283,7 @@ public: // much range ptrdiff_t offset = x - base; Do(offset); - if (mode == MODE_READ) + if (IsReadMode()) { x = base + offset; } @@ -289,13 +294,13 @@ public: u32 cookie = arbitraryNumber; Do(cookie); - if (mode == PointerWrap::MODE_READ && cookie != arbitraryNumber) + if (IsReadMode() && cookie != arbitraryNumber) { PanicAlertFmtT( "Error: After \"{0}\", found {1} ({2:#x}) instead of save marker {3} ({4:#x}). Aborting " "savestate load...", prevName, cookie, cookie, arbitraryNumber, arbitraryNumber); - mode = PointerWrap::MODE_MEASURE; + SetMeasureMode(); } } @@ -330,26 +335,26 @@ private: DOLPHIN_FORCE_INLINE void DoVoid(void* data, u32 size) { - if (mode != MODE_MEASURE && (*m_ptr_current + size) > m_ptr_end) + if (!IsMeasureMode() && (*m_ptr_current + size) > m_ptr_end) { // trying to read/write past the end of the buffer, prevent this - mode = MODE_MEASURE; + SetMeasureMode(); } - switch (mode) + switch (m_mode) { - case MODE_READ: + case Mode::Read: memcpy(data, *m_ptr_current, size); break; - case MODE_WRITE: + case Mode::Write: memcpy(*m_ptr_current, data, size); break; - case MODE_MEASURE: + case Mode::Measure: break; - case MODE_VERIFY: + case Mode::Verify: DEBUG_ASSERT_MSG(COMMON, !memcmp(data, *m_ptr_current, size), "Savestate verification failure: buf {} != {} (size {}).\n", fmt::ptr(data), fmt::ptr(*m_ptr_current), size); |
