Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / NumericExpr.cs / 1305376 / 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. // //[....] //----------------------------------------------------------------------------- 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GenericNameHandler.cs
- RectangleConverter.cs
- DbConvert.cs
- WindowsTab.cs
- Point4D.cs
- SizeAnimation.cs
- ListViewInsertionMark.cs
- ClientScriptManager.cs
- Module.cs
- SessionPageStatePersister.cs
- MSHTMLHostUtil.cs
- Assembly.cs
- AuthorizationRule.cs
- SoapSchemaMember.cs
- DataGridViewRowPrePaintEventArgs.cs
- RotationValidation.cs
- ResXResourceSet.cs
- AnimationStorage.cs
- ServiceModelSecurityTokenTypes.cs
- WebPartTransformerAttribute.cs
- RemoteWebConfigurationHostStream.cs
- AutoGeneratedFieldProperties.cs
- HwndHost.cs
- TextLineResult.cs
- SqlDataSourceCommandEventArgs.cs
- URLAttribute.cs
- PackageRelationshipCollection.cs
- Activator.cs
- WebPartDisplayModeCollection.cs
- LayoutUtils.cs
- KnownTypesHelper.cs
- XamlTemplateSerializer.cs
- PolyLineSegmentFigureLogic.cs
- ParseHttpDate.cs
- TemplateBindingExtension.cs
- SecurityPolicySection.cs
- FontResourceCache.cs
- HttpResponseBase.cs
- IdentityHolder.cs
- SocketManager.cs
- BinHexDecoder.cs
- Binding.cs
- UIElement3D.cs
- DBSchemaTable.cs
- XmlSchemaSubstitutionGroup.cs
- SymDocumentType.cs
- EnumerableWrapperWeakToStrong.cs
- SettingsProperty.cs
- DirectoryNotFoundException.cs
- FacetDescription.cs
- ShadowGlyph.cs
- TemplateBaseAction.cs
- RSAPKCS1SignatureDeformatter.cs
- StylusTouchDevice.cs
- CodeObjectCreateExpression.cs
- NewArrayExpression.cs
- DateTimeConstantAttribute.cs
- DataGridViewRowPostPaintEventArgs.cs
- ToolStripContentPanel.cs
- DelegatedStream.cs
- NameTable.cs
- TextContainerChangeEventArgs.cs
- MultiAsyncResult.cs
- Vertex.cs
- cryptoapiTransform.cs
- FileDialog.cs
- ObjectQuery.cs
- HashCodeCombiner.cs
- TabControlEvent.cs
- _HeaderInfoTable.cs
- PlainXmlWriter.cs
- EntityDataSourceWizardForm.cs
- _NestedSingleAsyncResult.cs
- NameService.cs
- XsdBuildProvider.cs
- DocumentPaginator.cs
- WindowsToolbar.cs
- CharEntityEncoderFallback.cs
- RuntimeHandles.cs
- HtmlLink.cs
- BooleanFunctions.cs
- FlowDocumentPage.cs
- TdsValueSetter.cs
- BindingExpressionBase.cs
- ConfigXmlWhitespace.cs
- LinearGradientBrush.cs
- EffectiveValueEntry.cs
- EndSelectCardRequest.cs
- DbSetClause.cs
- SingleTagSectionHandler.cs
- XmlElementList.cs
- SetterBase.cs
- StandardBindingImporter.cs
- TypeSystemProvider.cs
- EventArgs.cs
- Module.cs
- MappingModelBuildProvider.cs
- TemplatedWizardStep.cs
- PartialCachingControl.cs
- CaretElement.cs