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
- DbProviderFactories.cs
- RequestTimeoutManager.cs
- LinkConverter.cs
- KnownTypeAttribute.cs
- ObjectDisposedException.cs
- MultiSelectRootGridEntry.cs
- SmiRequestExecutor.cs
- PlacementWorkspace.cs
- Point3D.cs
- OptimizedTemplateContentHelper.cs
- MultiView.cs
- RefExpr.cs
- APCustomTypeDescriptor.cs
- TreeNode.cs
- MarkupCompiler.cs
- SafeFreeMibTable.cs
- ToolStripOverflowButton.cs
- UInt16.cs
- CustomGrammar.cs
- DomainLiteralReader.cs
- XmlSchemas.cs
- GenericTypeParameterBuilder.cs
- SafeThemeHandle.cs
- IisTraceWebEventProvider.cs
- XmlMtomReader.cs
- CompiledAction.cs
- CompositeActivityCodeGenerator.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- Oid.cs
- RunClient.cs
- WebException.cs
- InheritanceAttribute.cs
- ChtmlCommandAdapter.cs
- BitmapPalette.cs
- Keyboard.cs
- KoreanCalendar.cs
- Dispatcher.cs
- ReflectTypeDescriptionProvider.cs
- HybridDictionary.cs
- Events.cs
- BindingSource.cs
- IItemProperties.cs
- NativeRecognizer.cs
- DataService.cs
- UnhandledExceptionEventArgs.cs
- ParallelEnumerableWrapper.cs
- TypeTypeConverter.cs
- SwitchAttribute.cs
- RectAnimationUsingKeyFrames.cs
- OpenTypeLayout.cs
- ProtocolViolationException.cs
- SourceFilter.cs
- ActivationWorker.cs
- SplineKeyFrames.cs
- MethodCallTranslator.cs
- AssemblyResolver.cs
- MethodRental.cs
- _KerberosClient.cs
- Regex.cs
- CodeMemberEvent.cs
- SpeechSeg.cs
- AssemblyBuilder.cs
- ContentPlaceHolderDesigner.cs
- LinkButton.cs
- filewebrequest.cs
- Rect.cs
- Ipv6Element.cs
- AspCompat.cs
- followingquery.cs
- ContextInformation.cs
- VisualStyleElement.cs
- Currency.cs
- FixedDocumentSequencePaginator.cs
- BamlLocalizabilityResolver.cs
- XmlArrayAttribute.cs
- ProgressiveCrcCalculatingStream.cs
- InstanceNotReadyException.cs
- CollectionsUtil.cs
- XmlTypeMapping.cs
- webproxy.cs
- ValidationRule.cs
- Expression.cs
- Cursor.cs
- SecureEnvironment.cs
- AnonymousIdentificationSection.cs
- ClientRoleProvider.cs
- DataControlFieldHeaderCell.cs
- XPathEmptyIterator.cs
- XmlSchemaGroup.cs
- AsyncPostBackTrigger.cs
- RouteParser.cs
- GridView.cs
- MobileControlsSection.cs
- ProfileModule.cs
- Table.cs
- ResourceAttributes.cs
- Rectangle.cs
- RowsCopiedEventArgs.cs
- HostProtectionPermission.cs
- Stylus.cs