Listing 2: Partial listing of delta.cpp
DeltaControl::DeltaControl() { static deltacontrol d = {0,0,0,0}; m_Major = d; m_Minor = d; m_ErrorTerm = 0; } void DeltaControl::SetFrom(int Major, int Minor) { m_Major.current = Major; m_Minor.current = Minor; } void DeltaControl::SetTo(int Major, int Minor) { SetTo(Major, &m_Major); SetTo(Minor, &m_Minor); m_ErrorTerm = m_Major.len / 2; m_MinorLast = TRUE; } BOOL DeltaControl::Next() { if (m_MinorLast) m_MinorLast = FALSE; else { m_ErrorTerm += m_Minor.len; if (m_ErrorTerm > m_Major.len && m_Minor.togo) { m_Minor.current += m_Minor.delta; OnMinorChange(m_Minor.current); m_ErrorTerm -= m_Major.len; m_Minor.togo--; m_MinorLast = TRUE; return TRUE; } } if (!m_Major.togo) return FALSE; m_Major.current += m_Major.delta; m_Major.togo--; OnMajorChange(m_Major.current); return TRUE; } void DeltaControl::SetTo(int In, deltacontrol *Out) { int i = In - Out->current; Out->delta = (i < 0) ? -1 : 1; Out->togo = Out->len = abs(i); } End of Listing