summaryrefslogtreecommitdiff
path: root/Source/Core/Common
diff options
context:
space:
mode:
authorTilka <tilkax@gmail.com>2022-05-29 00:57:43 +0100
committerGitHub <noreply@github.com>2022-05-29 00:57:43 +0100
commite17a4f49f5bb2fd3ca4322db82c100206e00cc15 (patch)
tree3c71b494b3f9b9a5db726b80caf6f0f6944d34db /Source/Core/Common
parent3dbc18060bc6f15eeaa3c0e4de907f8a06efa2bf (diff)
parentc8e20c569b7deae97b411a6eea5c846f342bbf17 (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.h85
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);