Merge pull request #23 from lioncash/iter

CResourceIterator: Cleanup and undefined behavior prevention
This commit is contained in:
LC 2020-06-11 10:52:41 -04:00 committed by GitHub
commit 9c2b7e4c95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,6 +20,8 @@ public:
Next(); Next();
} }
virtual ~CResourceIterator() = default;
virtual CResourceEntry* Next() virtual CResourceEntry* Next()
{ {
do do
@ -27,7 +29,7 @@ public:
if (mIter != mpkStore->mResourceEntries.end()) if (mIter != mpkStore->mResourceEntries.end())
{ {
mpCurEntry = mIter->second; mpCurEntry = mIter->second;
mIter++; ++mIter;
} }
else mpCurEntry = nullptr; else mpCurEntry = nullptr;
} }
@ -36,33 +38,33 @@ public:
return mpCurEntry; return mpCurEntry;
} }
inline bool DoneIterating() const bool DoneIterating() const
{ {
return mpCurEntry == nullptr; return mpCurEntry == nullptr;
} }
inline operator bool() const explicit operator bool() const
{ {
return !DoneIterating(); return !DoneIterating();
} }
inline CResourceEntry* operator*() const CResourceEntry* operator*() const
{ {
return mpCurEntry; return mpCurEntry;
} }
inline CResourceEntry* operator->() const CResourceEntry* operator->() const
{ {
return mpCurEntry; return mpCurEntry;
} }
inline CResourceIterator& operator++() CResourceIterator& operator++()
{ {
Next(); Next();
return *this; return *this;
} }
inline CResourceIterator operator++(int) CResourceIterator operator++(int)
{ {
CResourceIterator Copy = *this; CResourceIterator Copy = *this;
Next(); Next();
@ -81,7 +83,7 @@ public:
Next(); Next();
} }
virtual CResourceEntry* Next() CResourceEntry* Next() override
{ {
do { do {
CResourceIterator::Next(); CResourceIterator::Next();