Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (C) 1996-1999 Microsoft Corporation
Module Name:
stepper.cpp
Abstract:
Implements time keeping and display in the graph window.
--*/
#include "polyline.h"
CStepper::CStepper() { m_iPos = 0; m_iStepNum = 0; m_iStepCnt = 1; }
void CStepper::Init(INT iLength, INT iStepCnt) { m_iStepCnt = iStepCnt ? iStepCnt : 1; m_iStepSize = iLength / m_iStepCnt; m_iRemainder = iLength - m_iStepCnt * m_iStepSize;
m_iState = m_iStepCnt; m_iPos = 0; m_iStepNum = 0; }
void CStepper::Reset() { m_iPos = 0; m_iStepNum = 0; m_iState = m_iStepCnt; }
INT CStepper::NextPosition() { m_iPos += m_iStepSize;
m_iState -= m_iRemainder;
if (m_iState <= 0) { m_iState += m_iStepCnt; m_iPos++; }
m_iStepNum++;
return m_iPos; }
INT CStepper::PrevPosition() { m_iPos -= m_iStepSize;
m_iState += m_iRemainder;
if (m_iState > m_iStepCnt) { m_iState -= m_iStepCnt; m_iPos--; }
m_iStepNum--;
return m_iPos; }
INT CStepper::StepTo(INT nSteps) { INT iDiff;
iDiff = (nSteps * m_iRemainder) / m_iStepCnt; m_iState = (iDiff + 1) * m_iStepCnt - (nSteps * m_iRemainder);
m_iPos = (nSteps * m_iStepSize) + iDiff;
m_iStepNum = nSteps;
return m_iPos; }
INT CStepper::PrevStepNum( INT iPosition ) { INT iStepNum = -1; INT iLength;
// Floating point conversion to integer truncates,
// so this method returns the step previous to the position.
iLength = m_iStepCnt * m_iStepSize + m_iRemainder;
if ( iPosition <= iLength ) { // Calculation is (iPosition/iLength) * m_iStepCnt.
iStepNum = iPosition * m_iStepCnt; iStepNum = iStepNum / iLength; }
return iStepNum; }
|