Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- MouseButton.cs
- DataGridBoolColumn.cs
- DispatcherProcessingDisabled.cs
- ProtocolElement.cs
- Attributes.cs
- CellParagraph.cs
- SchemaImporterExtension.cs
- DocumentPageHost.cs
- GenericsInstances.cs
- FileDataSourceCache.cs
- CharStorage.cs
- RelativeSource.cs
- UnmanagedHandle.cs
- DNS.cs
- LayoutManager.cs
- BasePropertyDescriptor.cs
- WebPartConnectionsDisconnectVerb.cs
- AsyncResult.cs
- WebPartMovingEventArgs.cs
- EditorZoneBase.cs
- OutputCacheSettingsSection.cs
- MembershipPasswordException.cs
- HtmlInputRadioButton.cs
- PrimitiveXmlSerializers.cs
- SpotLight.cs
- PixelFormatConverter.cs
- PointHitTestParameters.cs
- __TransparentProxy.cs
- GridItemCollection.cs
- AspProxy.cs
- AuthenticateEventArgs.cs
- MeasureItemEvent.cs
- DataGridViewTopRowAccessibleObject.cs
- DataServiceKeyAttribute.cs
- DateTimeFormat.cs
- HMAC.cs
- RelativeSource.cs
- NativeMethods.cs
- PeerInvitationResponse.cs
- Vector3DCollectionConverter.cs
- OdbcFactory.cs
- FrameworkContentElement.cs
- FormCollection.cs
- CharKeyFrameCollection.cs
- Rijndael.cs
- GPStream.cs
- TableLayoutRowStyleCollection.cs
- DefaultBindingPropertyAttribute.cs
- XmlAutoDetectWriter.cs
- DataSvcMapFileSerializer.cs
- ConsoleTraceListener.cs
- URLString.cs
- COM2ExtendedTypeConverter.cs
- CommandBinding.cs
- StateChangeEvent.cs
- StatusBarAutomationPeer.cs
- StaticResourceExtension.cs
- LinkClickEvent.cs
- CommittableTransaction.cs
- CommandConverter.cs
- ProtocolProfile.cs
- XPathBinder.cs
- SafeProcessHandle.cs
- CopyCodeAction.cs
- MetadataItemEmitter.cs
- HttpListenerContext.cs
- HttpCachePolicyWrapper.cs
- COAUTHINFO.cs
- SessionEndingCancelEventArgs.cs
- DropShadowBitmapEffect.cs
- SelectedDatesCollection.cs
- XmlSerializer.cs
- Clock.cs
- ExistsInCollection.cs
- PropertyGridEditorPart.cs
- ColorConvertedBitmapExtension.cs
- TextPatternIdentifiers.cs
- SqlException.cs
- ContextMenuStrip.cs
- SoundPlayer.cs
- DropShadowBitmapEffect.cs
- OleDbStruct.cs
- PrePrepareMethodAttribute.cs
- EpmCustomContentSerializer.cs
- SafeProcessHandle.cs
- ActivationServices.cs
- GeneralTransformGroup.cs
- SerialPinChanges.cs
- AtomServiceDocumentSerializer.cs
- ProxyWebPart.cs
- XmlSchemaNotation.cs
- SoapInteropTypes.cs
- SystemWebCachingSectionGroup.cs
- DataServiceKeyAttribute.cs
- CharacterMetrics.cs
- ImageDrawing.cs
- InputScopeNameConverter.cs
- StrokeCollectionConverter.cs
- glyphs.cs
- TextServicesCompartmentContext.cs