CInputVirtualDevice* CInputDevice::CreateVariableVirtualDeviceFromThis(CInputActions* pcInputActions)
{
	CInputVirtualDevice*	pcVirtual;
	CInputSourceDesc*		pcSource;
	CInputDevices*			pcInputDevices;
	CChars					szTemp;
	CArrayIntAndPointer			apcSourceDescs;
	int						i;

	pcInputDevices = GetInputDevices();

	szTemp.Init(mszFriendlyName.Text());
	szTemp.Append(" Variable");
	pcVirtual = pcInputDevices->CreateVirtualDevice(szTemp.Text());
	szTemp.Kill();

	mcVariables.SetChords(pcVirtual->GetChords());

	apcSourceDescs.Init(8);
	mpcDesc->GetVariableChordDescs()->GetInputSourceDescs(&apcSourceDescs, mpcDesc);
	for (i = 0; i < apcSourceDescs.NumElements(); i++)
	{
		pcSource = (CInputSourceDesc*)apcSourceDescs.GetPtr(i);
		pcVirtual->AddSource(this, pcSource);
	}
	apcSourceDescs.Kill();
	pcVirtual->DoneAddingSources();
	GetInputDevices()->AddChords(pcVirtual, mpcDesc->GetVariableChordDescs(), this);
	pcInputDevices->UpdateCommonality();
	pcVirtual->Unstoppable();
	return pcVirtual;
}
Exemple #2
0
BOOL CLogFile::FindHoles(CArrayIntAndPointer* papvOverlapping, filePos iPosition, filePos iLength)
{
	CArrayIntAndPointer				apvOverlappingSorted;
	int							i;
	CLogFileCommandWrite*	psWrite;
	int							eCommand;
	BOOL						bHoles;
	filePos						iEnd;

	if (iLength == 0)
	{
		return FALSE;
	}
	if (papvOverlapping->NumElements() == 0)
	{
		return FALSE;
	}

	apvOverlappingSorted.Init(1);
	apvOverlappingSorted.Copy(papvOverlapping);
	apvOverlappingSorted.QuickSort(CompareLogFileWrite);

	apvOverlappingSorted.Get(0, (void**)&psWrite, &eCommand);
	if (psWrite->iPosition > iPosition)
	{
		apvOverlappingSorted.Kill();
		return TRUE;
	}
	else
	{
		iEnd = psWrite->iPosition + psWrite->iSize -1;
	}

	bHoles = FALSE;
	for (i = 1; i < apvOverlappingSorted.NumElements(); i++)
	{
		apvOverlappingSorted.Get(i, (void**)&psWrite, &eCommand);
		if (psWrite->iPosition > (iEnd+1))
		{
			bHoles = TRUE;
			break;
		}
		iEnd = psWrite->iPosition + psWrite->iSize -1;
		if (iEnd >= (iPosition + iLength-1))
		{
			break;
		}
	}

	if (iEnd < (iPosition + iLength-1))
	{
		bHoles = TRUE;
	}

	apvOverlappingSorted.Kill();
	return bHoles;
}
BOOL CCalculator::Expression(CCalcExpression** ppcExpression)
{
	BOOL				bOperator;
	BOOL				bOperand;
	BOOL				bFirst;
	CArrayIntAndPointer		cArray;
	CCalcOperator*		pcOperator;
	CCalcExpression*	pcOperand;

	cArray.Init(16);
	bFirst = TRUE;
	for (;;)
	{
		for (;;)
		{
			bOperator = Operator(&pcOperator);
			if (!bOperator)
			{
				break;
			}
			cArray.Add(pcOperator, 0);
		}

		bOperand = Operand(&pcOperand);
		if (!bOperand && !bOperator)
		{
			if (bFirst)
			{
				cArray.Kill();
				return FALSE;
			}
			else
			{
				BuildExpression(ppcExpression, &cArray);

				cArray.Kill();

				if (*ppcExpression == NULL)
				{
					return FALSE;
				}
				else
				{
					return TRUE;
				}
			}
		}
		cArray.Add(pcOperand, 0);
		bFirst = FALSE;
	}
}