crashanalysercmd/PerfToolsSharedLibraries/Engine/SymBuildParsingLib/Parser/Framework/Nodes/SymNodeConditionalExpression.cs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymBuildParsingLib/Parser/Framework/Nodes/SymNodeConditionalExpression.cs Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,126 @@
+/*
+* 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
+ }
+}