BOOL CInputDeviceState::Rest(CInputDevice* pcDevice) { int i; CInputSourceDesc* pcSourceDesc; SInputSourceState* psSourceState; SSetIterator sIter; mpcDevice = pcDevice; macSourceStates.Kill(); macSourceStates.Allocate(&gcSystemAllocator, pcDevice->GetDesc()->NumInputs()); pcSourceDesc = pcDevice->GetDesc()->StartInputsIteration(&sIter); i = 0; while (pcSourceDesc) { psSourceState = macSourceStates.Get(i); psSourceState->pcDesc = pcSourceDesc; if (psSourceState->pcDesc->HasRestValue()) { psSourceState->iFlags = SOURCE_STATE_RESTING | SOURCE_STATE_VALID; psSourceState->fValue = pcSourceDesc->GetRestValue(); } else { psSourceState->iFlags = 0; psSourceState->fValue = 0.0f; } if (pcSourceDesc->GetStateIndex() != i) { return FALSE; } pcSourceDesc = pcDevice->GetDesc()->IterateInputs(&sIter); i++; } return TRUE; }
void CInputDeviceDesc::CopySources(CInputDeviceCopyContext* pcContext) { CInputSourceDesc* pcInputSourceDesc; CInputSourceDesc* pcInputDestDesc; int iNumInputs; SSetIterator sIter; iNumInputs = mlcInputs.NumElements(); pcInputSourceDesc = pcContext->mpcSourceDeviceDesc->mlcInputs.StartIteration(&sIter); while (pcInputSourceDesc) { pcInputDestDesc = mlcInputs.Add(); pcInputDestDesc->Init(this, pcInputSourceDesc->GetType(), pcInputSourceDesc->GetFriendlyName(), pcInputSourceDesc->GetStateIndex() + iNumInputs); pcInputDestDesc->SetRest(pcInputSourceDesc->GetRestValue(), pcInputSourceDesc->GetEmitRestEvent(), pcInputSourceDesc->HasRestValue()); pcInputDestDesc->CopyValues(pcInputSourceDesc); pcInputDestDesc->CopyActions(pcInputSourceDesc); pcContext->mmppSources.Put(pcInputSourceDesc, pcInputDestDesc); pcInputSourceDesc = pcContext->mpcSourceDeviceDesc->mlcInputs.Iterate(&sIter); } }