Skip to content

Commit

Permalink
Move JudgedRows to Player header
Browse files Browse the repository at this point in the history
  • Loading branch information
poco0317 committed Nov 1, 2019
1 parent 4180ff7 commit 78e8b4f
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 50 deletions.
50 changes: 0 additions & 50 deletions src/Etterna/Actor/Gameplay/Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,56 +45,6 @@ TimingWindowSecondsInit(size_t /*TimingWindow*/ i,
std::string& sNameOut,
float& defaultValueOut);

/**
* @brief Helper class to ensure that each row is only judged once without
* taking too much memory.
*/
class JudgedRows
{
vector<bool> m_vRows;
int m_iStart{ 0 };
int m_iOffset{ 0 };

void Resize(size_t iMin)
{
size_t iNewSize = max(2 * m_vRows.size(), iMin);
vector<bool> vNewRows(m_vRows.begin() + m_iOffset, m_vRows.end());
vNewRows.reserve(iNewSize);
vNewRows.insert(
vNewRows.end(), m_vRows.begin(), m_vRows.begin() + m_iOffset);
vNewRows.resize(iNewSize, false);
m_vRows.swap(vNewRows);
m_iOffset = 0;
}

public:
JudgedRows() { Resize(32); }
// Returns true if the row has already been judged.
bool JudgeRow(int iRow)
{
if (iRow < m_iStart)
return true;
if (iRow >= m_iStart + static_cast<int>(m_vRows.size()))
Resize(iRow + 1 - m_iStart);
const int iIndex = (iRow - m_iStart + m_iOffset) % m_vRows.size();
const bool ret = m_vRows[iIndex];
m_vRows[iIndex] = true;
while (m_vRows[m_iOffset]) {
m_vRows[m_iOffset] = false;
++m_iStart;
if (++m_iOffset >= static_cast<int>(m_vRows.size()))
m_iOffset -= m_vRows.size();
}
return ret;
}
void Reset(int iStart)
{
m_iStart = iStart;
m_iOffset = 0;
m_vRows.assign(m_vRows.size(), false);
}
};

void
TimingWindowSecondsInit(size_t /*TimingWindow*/ i,
RString& sNameOut,
Expand Down
50 changes: 50 additions & 0 deletions src/Etterna/Actor/Gameplay/Player.h
Original file line number Diff line number Diff line change
Expand Up @@ -319,4 +319,54 @@ class Player : public ActorFrame
bool m_drawing_notefield_board;
};

/**
* @brief Helper class to ensure that each row is only judged once without
* taking too much memory.
*/
class JudgedRows
{
vector<bool> m_vRows;
int m_iStart{ 0 };
int m_iOffset{ 0 };

void Resize(size_t iMin)
{
size_t iNewSize = max(2 * m_vRows.size(), iMin);
vector<bool> vNewRows(m_vRows.begin() + m_iOffset, m_vRows.end());
vNewRows.reserve(iNewSize);
vNewRows.insert(
vNewRows.end(), m_vRows.begin(), m_vRows.begin() + m_iOffset);
vNewRows.resize(iNewSize, false);
m_vRows.swap(vNewRows);
m_iOffset = 0;
}

public:
JudgedRows() { Resize(32); }
// Returns true if the row has already been judged.
bool JudgeRow(int iRow)
{
if (iRow < m_iStart)
return true;
if (iRow >= m_iStart + static_cast<int>(m_vRows.size()))
Resize(iRow + 1 - m_iStart);
const int iIndex = (iRow - m_iStart + m_iOffset) % m_vRows.size();
const bool ret = m_vRows[iIndex];
m_vRows[iIndex] = true;
while (m_vRows[m_iOffset]) {
m_vRows[m_iOffset] = false;
++m_iStart;
if (++m_iOffset >= static_cast<int>(m_vRows.size()))
m_iOffset -= m_vRows.size();
}
return ret;
}
void Reset(int iStart)
{
m_iStart = iStart;
m_iOffset = 0;
m_vRows.assign(m_vRows.size(), false);
}
};

#endif

0 comments on commit 78e8b4f

Please sign in to comment.