コード例 #1
0
ファイル: cdiroutl.cpp プロジェクト: stievie/Martis
//---------------------------------------------------------------------------
void __fastcall TCDirectoryOutline::BuildSubTree(long RootItem)
{
    BuildOneLevel(RootItem);
    TOutlineNode *RootNode = Items[RootItem];

    for (long TempRoot = RootNode->getFirstChild();
            TempRoot != InvalidIndex; 
            TempRoot = RootNode->GetNextChild(TempRoot))
        BuildSubTree(TempRoot);
}
コード例 #2
0
ファイル: Parser.cpp プロジェクト: stumpOS/Calculator
float Parser::BuildSubTree(ExpressionInterval expression, int delimiter)
{
	int k = expression._start;
	bool isFound = false;
	float lhs = 0, rhs = 0, result = 0;

	if(delimiter < _operators.size() && (expression._end < strlen(_inputString) && expression._start <= expression._end))
	{
		while(k <= expression._end && isFound == false)
		{
			if(StrCompare(_inputString+k, _operators[delimiter]->_symbol,1))
			{
				switch(_operators[delimiter]->_arity)
				{
					case 2:
						lhs = BuildSubTree(ExpressionInterval(expression._start,k-1),delimiter+1);
						break;

					case 1:
					default:
						break;
				}
				rhs = BuildSubTree(ExpressionInterval(k+1,expression._end),0);
				isFound = true;
			}
			k++;
		}
		if(!isFound)
		{
			result = BuildSubTree(expression,delimiter+1);
		}
		else
		{
			result = _operators[delimiter]->Fire(lhs,rhs);
		}
	}
	else
	{
		result = Leaf(expression);
	}
	return result;
}
コード例 #3
0
ファイル: Parser.cpp プロジェクト: stumpOS/Calculator
float Parser::ParseInput(char *in)
{
	NewInput(in);

	unsigned len = strlen(in);

	float solution;
	if(len>1)
	{
		solution = BuildSubTree(ExpressionInterval(0,len-1),0);
	}
	else if(len == 1)
	{
		solution = Leaf(ExpressionInterval(0,0));
	}
	
	return solution;
}