Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / Internal / NumericExpr.cs / 1 / NumericExpr.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace MS.Internal.Xml.XPath {
using System;
using System.Xml;
using System.Xml.XPath;
using System.Diagnostics;
using System.Globalization;
using System.Xml.Xsl;
internal sealed class NumericExpr : ValueQuery {
private Operator.Op op;
private Query opnd1;
private Query opnd2;
public NumericExpr(Operator.Op op, Query opnd1, Query opnd2) {
Debug.Assert(
op == Operator.Op.PLUS || op == Operator.Op.MINUS ||
op == Operator.Op.MUL || op == Operator.Op.DIV ||
op == Operator.Op.MOD
);
Debug.Assert(opnd1 != null && opnd2 != null);
if (opnd1.StaticType != XPathResultType.Number) {
opnd1 = new NumberFunctions(Function.FunctionType.FuncNumber, opnd1);
}
if (opnd2.StaticType != XPathResultType.Number) {
opnd2 = new NumberFunctions(Function.FunctionType.FuncNumber, opnd2);
}
this.op = op;
this.opnd1 = opnd1;
this.opnd2 = opnd2;
}
private NumericExpr(NumericExpr other) : base(other) {
this.op = other.op;
this.opnd1 = Clone(other.opnd1);
this.opnd2 = Clone(other.opnd2);
}
public override void SetXsltContext(XsltContext context){
opnd1.SetXsltContext(context);
opnd2.SetXsltContext(context);
}
public override object Evaluate(XPathNodeIterator nodeIterator) {
return GetValue(this.op,
XmlConvert.ToXPathDouble(opnd1.Evaluate(nodeIterator)),
XmlConvert.ToXPathDouble(opnd2.Evaluate(nodeIterator))
);
}
private static double GetValue(Operator.Op op, double n1, double n2) {
Debug.Assert(op == Operator.Op.PLUS || op == Operator.Op.MINUS || op == Operator.Op.MOD || op == Operator.Op.DIV || op == Operator.Op.MUL);
switch (op) {
case Operator.Op.PLUS : return n1 + n2;
case Operator.Op.MINUS : return n1 - n2;
case Operator.Op.MOD : return n1 % n2;
case Operator.Op.DIV : return n1 / n2;
case Operator.Op.MUL : return n1 * n2;
}
return 0;
}
public override XPathResultType StaticType { get { return XPathResultType.Number; } }
public override XPathNodeIterator Clone() { return new NumericExpr(this); }
public override void PrintQuery(XmlWriter w) {
w.WriteStartElement(this.GetType().Name);
w.WriteAttributeString("op", op.ToString());
opnd1.PrintQuery(w);
opnd2.PrintQuery(w);
w.WriteEndElement();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MeasureItemEvent.cs
- FixedTextView.cs
- DynamicDocumentPaginator.cs
- HttpResponseInternalWrapper.cs
- RuleSetDialog.Designer.cs
- ModelPropertyCollectionImpl.cs
- DbParameterCollectionHelper.cs
- XmlDataSource.cs
- BroadcastEventHelper.cs
- BuildProviderCollection.cs
- MemberHolder.cs
- Number.cs
- TemplateInstanceAttribute.cs
- ListCollectionView.cs
- WMIGenerator.cs
- DbConnectionPoolGroup.cs
- BamlResourceDeserializer.cs
- ScrollViewerAutomationPeer.cs
- Path.cs
- CheckableControlBaseAdapter.cs
- X509ChainPolicy.cs
- BitmapSizeOptions.cs
- EventLogInformation.cs
- HostProtectionPermission.cs
- SqlTypeConverter.cs
- XsdBuilder.cs
- _SslSessionsCache.cs
- DbConnectionPoolIdentity.cs
- _FixedSizeReader.cs
- LocalizableAttribute.cs
- ClientProxyGenerator.cs
- OfTypeExpression.cs
- RadioButton.cs
- keycontainerpermission.cs
- TemplateAction.cs
- DeploymentSectionCache.cs
- FileCodeGroup.cs
- TimeSpanValidator.cs
- ServiceDebugElement.cs
- FrameAutomationPeer.cs
- QueryParameter.cs
- TryExpression.cs
- SmiConnection.cs
- TextRangeEdit.cs
- InstanceCompleteException.cs
- AppLevelCompilationSectionCache.cs
- RootBrowserWindow.cs
- RenderContext.cs
- BrowserDefinitionCollection.cs
- ServiceOperation.cs
- ObjectReferenceStack.cs
- RequestTimeoutManager.cs
- BamlTreeUpdater.cs
- RenameRuleObjectDialog.cs
- XamlPathDataSerializer.cs
- ChtmlTextWriter.cs
- SocketInformation.cs
- LayoutTableCell.cs
- SystemResourceHost.cs
- WhitespaceRule.cs
- AdornerHitTestResult.cs
- DynamicScriptObject.cs
- HMACSHA512.cs
- DragAssistanceManager.cs
- ComEventsHelper.cs
- SectionInformation.cs
- StreamUpgradeBindingElement.cs
- SoapHttpTransportImporter.cs
- ResourceExpressionEditor.cs
- ToolStripCodeDomSerializer.cs
- ReceiveActivityValidator.cs
- MobileTextWriter.cs
- Itemizer.cs
- LinqDataSourceInsertEventArgs.cs
- DynamicEndpoint.cs
- GuidelineCollection.cs
- ForwardPositionQuery.cs
- ListControl.cs
- EndpointAddress.cs
- WebPartTransformerCollection.cs
- CompositeFontFamily.cs
- ServiceOperationUIEditor.cs
- OdbcInfoMessageEvent.cs
- HelpInfo.cs
- MediaTimeline.cs
- BadImageFormatException.cs
- FamilyMapCollection.cs
- MachineKeyConverter.cs
- ReachPrintTicketSerializerAsync.cs
- ReferencedType.cs
- SqlClientWrapperSmiStreamChars.cs
- TraceUtility.cs
- EncoderNLS.cs
- MenuCommandsChangedEventArgs.cs
- RadioButton.cs
- DeviceContext2.cs
- ValueTypeFixupInfo.cs
- ColorConverter.cs
- SessionStateUtil.cs
- StaticFileHandler.cs