Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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. // //[....] //----------------------------------------------------------------------------- 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
- OpenTypeLayoutCache.cs
- UrlMappingCollection.cs
- CompilationSection.cs
- MultiSelector.cs
- FileReservationCollection.cs
- LogReserveAndAppendState.cs
- ReachFixedPageSerializerAsync.cs
- ContainerControl.cs
- FixedTextSelectionProcessor.cs
- NeedSkipTokenVisitor.cs
- ApplicationActivator.cs
- PTProvider.cs
- CallSite.cs
- MessageQueueAccessControlEntry.cs
- ComAdminWrapper.cs
- ImageDrawing.cs
- TransactionScope.cs
- PageThemeParser.cs
- EndpointAddressAugust2004.cs
- Soap12ServerProtocol.cs
- DataGridViewCellStyleConverter.cs
- ListViewGroupItemCollection.cs
- RequestValidator.cs
- FileAuthorizationModule.cs
- DecimalAnimationUsingKeyFrames.cs
- EvidenceBase.cs
- ChildTable.cs
- TimeSpanSecondsConverter.cs
- ResourceDictionaryCollection.cs
- KnownTypes.cs
- DataRelationCollection.cs
- RegexCapture.cs
- NamedElement.cs
- ToolStripItem.cs
- CodeMemberField.cs
- FrameworkContentElement.cs
- DataTransferEventArgs.cs
- SelectionManager.cs
- CultureInfoConverter.cs
- MetadataProperty.cs
- DBConnectionString.cs
- DesignerActionListCollection.cs
- StatusBar.cs
- DBCSCodePageEncoding.cs
- FontDriver.cs
- PaintEvent.cs
- HttpListenerContext.cs
- TemplatingOptionsDialog.cs
- Calendar.cs
- GridViewDeleteEventArgs.cs
- FullTextBreakpoint.cs
- GridItemProviderWrapper.cs
- MatrixTransform3D.cs
- SafeHandle.cs
- EdmType.cs
- MultiDataTrigger.cs
- TagMapCollection.cs
- MimeFormatter.cs
- hwndwrapper.cs
- CodeExporter.cs
- PropertyChangedEventArgs.cs
- HttpListenerContext.cs
- ElementUtil.cs
- TagPrefixCollection.cs
- BaseAddressPrefixFilterElementCollection.cs
- BindStream.cs
- CodeGenerator.cs
- CharacterMetrics.cs
- AccessKeyManager.cs
- RemoteHelper.cs
- ServiceOperationWrapper.cs
- EnumerableRowCollection.cs
- ChameleonKey.cs
- ClientBuildManagerCallback.cs
- DesignerActionListCollection.cs
- StaticSiteMapProvider.cs
- Keyboard.cs
- Gdiplus.cs
- SimpleType.cs
- AuthorizationRuleCollection.cs
- LineServicesCallbacks.cs
- ZipIOExtraFieldPaddingElement.cs
- PropertiesTab.cs
- LogRestartAreaEnumerator.cs
- ContractType.cs
- FileDetails.cs
- CustomAttributeBuilder.cs
- MultiPropertyDescriptorGridEntry.cs
- HttpServerUtilityBase.cs
- OleDbRowUpdatingEvent.cs
- ValueTypeIndexerReference.cs
- DocumentEventArgs.cs
- XamlWrappingReader.cs
- CollectionView.cs
- ObjectListDesigner.cs
- FlowDocumentPage.cs
- LicFileLicenseProvider.cs
- WebEvents.cs
- TreeChangeInfo.cs
- Application.cs