crashanalysercmd/PerfToolsSharedLibraries/Engine/SymBuildParsingLib/Parser/Framework/Nodes/SymNodeConditionalExpression.cs
author Matti Laitinen <matti.t.laitinen@nokia.com>
Thu, 11 Feb 2010 15:50:58 +0200
changeset 0 818e61de6cd1
permissions -rw-r--r--
Add initial version of Crash Analyser cmdline under EPL

/*
* Copyright (c) 2004-2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/

using System;
using SymBuildParsingLib.Tree;
using SymBuildParsingLib.Token;
using SymbianTree;

#region Example layout
//
// SymNodeConditionalExpression
//     |
//     +----- [if] SymNodeCondition [neg]
//     +---------- { 
//     +---------- do something
//     +---------- [if] SymNodeCondition [pos, but inherits neg]
//     +--------------- { 
//     +--------------- do something else
//     +--------------- } 
//     +---------- } 
//     |
//     +----- [else if] SymNodeCondition [neg]
//     +---------- { 
//     +---------- do something else
//     +---------- } 
//     |
//     +----- [else if] SymNodeCondition [pos]
//     +---------- { 
//     +---------- do something else
//     +---------- } 
//     |
//     +----- [else] SymNodeCondition [neg]
//     +---------- { 
//     +---------- do something else
//     +---------- } 
//
#endregion

namespace SymBuildParsingLib.Parser.Framework.Nodes
{
	public class SymNodeConditionalExpression : SymNodeToken
	{
		#region Constructors & destructor
		public SymNodeConditionalExpression( SymToken aType )
			: base( aType )
		{
		}
		#endregion

		#region Properties
		public bool InheritedValue
		{
			get { return iInheritedValue; }
			set { iInheritedValue = value; }
		}

		public bool HasPositiveBranch
		{
			get
			{
				bool found = ( PositiveBranch != null );
				return found;
			}
		}

		public SymNodeCondition PositiveBranch
		{
			get
			{
				SymNodeCondition found = null;
				//
				foreach( SymNode c in this )
				{
					if	( c is SymNodeCondition )
					{
						SymNodeCondition cond = (SymNodeCondition) c;
						if	( cond.IsEvaluated && cond.EvaluationResult == true )
						{
							found = cond;
							break;
						}
					}
				}
				//
				return found;
			}
		}

		public bool HasCondition
		{
			get
			{
				int count = ChildCountByType( typeof(SymNodeCondition) );
				return count > 0;
			}
		}

		public SymNodeCondition CurrentCondition
		{
			get
			{
				SymNodeCondition ret = (SymNodeCondition) LastChild;
				return ret;
			}
		}
		#endregion

		#region Data members
		private bool iInheritedValue;
		#endregion
	}
}