Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / NumberFunctions.cs / 1305376 / NumberFunctions.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; using System.Text; using FT = MS.Internal.Xml.XPath.Function.FunctionType; internal sealed class NumberFunctions : ValueQuery { private Query arg = null; private FT ftype; public NumberFunctions(FT ftype, Query arg) { this.arg = arg; this.ftype = ftype; } private NumberFunctions(NumberFunctions other) : base(other) { this.arg = Clone(other.arg); this.ftype = other.ftype; } public override void SetXsltContext(XsltContext context) { if (arg != null) { arg.SetXsltContext(context); } } internal static double Number(bool arg) { return arg ? 1.0 : 0.0; } internal static double Number(string arg) { return XmlConvert.ToXPathDouble(arg); } public override object Evaluate(XPathNodeIterator nodeIterator) { switch (ftype) { case FT.FuncNumber : return Number (nodeIterator); case FT.FuncSum : return Sum (nodeIterator); case FT.FuncFloor : return Floor (nodeIterator); case FT.FuncCeiling : return Ceiling(nodeIterator); case FT.FuncRound : return Round (nodeIterator); } return null; } private double Number(XPathNodeIterator nodeIterator) { if (arg == null) { return XmlConvert.ToXPathDouble(nodeIterator.Current.Value); } object argVal = arg.Evaluate(nodeIterator); switch (GetXPathType(argVal)) { case XPathResultType.NodeSet : XPathNavigator value = arg.Advance(); if (value != null) { return Number(value.Value); } break; case XPathResultType.String : return Number((string)argVal); case XPathResultType.Boolean : return Number((bool) argVal); case XPathResultType.Number: return (double) argVal; case XPathResultType_Navigator: return Number(((XPathNavigator)argVal).Value); } return double.NaN; } private double Sum(XPathNodeIterator nodeIterator) { double sum = 0; arg.Evaluate(nodeIterator); XPathNavigator nav; while ((nav = arg.Advance()) != null) { sum += Number(nav.Value); } return sum; } private double Floor(XPathNodeIterator nodeIterator) { return Math.Floor((double) arg.Evaluate(nodeIterator)); } private double Ceiling(XPathNodeIterator nodeIterator) { return Math.Ceiling((double) arg.Evaluate(nodeIterator)); } private double Round(XPathNodeIterator nodeIterator) { double n = XmlConvert.ToXPathDouble(arg.Evaluate(nodeIterator)); return XmlConvert.XPathRound(n); } public override XPathResultType StaticType { get { return XPathResultType.Number; } } public override XPathNodeIterator Clone() { return new NumberFunctions(this); } public override void PrintQuery(XmlWriter w) { w.WriteStartElement(this.GetType().Name); w.WriteAttributeString("name", ftype.ToString()); if (arg != null) { arg.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; using System.Text; using FT = MS.Internal.Xml.XPath.Function.FunctionType; internal sealed class NumberFunctions : ValueQuery { private Query arg = null; private FT ftype; public NumberFunctions(FT ftype, Query arg) { this.arg = arg; this.ftype = ftype; } private NumberFunctions(NumberFunctions other) : base(other) { this.arg = Clone(other.arg); this.ftype = other.ftype; } public override void SetXsltContext(XsltContext context) { if (arg != null) { arg.SetXsltContext(context); } } internal static double Number(bool arg) { return arg ? 1.0 : 0.0; } internal static double Number(string arg) { return XmlConvert.ToXPathDouble(arg); } public override object Evaluate(XPathNodeIterator nodeIterator) { switch (ftype) { case FT.FuncNumber : return Number (nodeIterator); case FT.FuncSum : return Sum (nodeIterator); case FT.FuncFloor : return Floor (nodeIterator); case FT.FuncCeiling : return Ceiling(nodeIterator); case FT.FuncRound : return Round (nodeIterator); } return null; } private double Number(XPathNodeIterator nodeIterator) { if (arg == null) { return XmlConvert.ToXPathDouble(nodeIterator.Current.Value); } object argVal = arg.Evaluate(nodeIterator); switch (GetXPathType(argVal)) { case XPathResultType.NodeSet : XPathNavigator value = arg.Advance(); if (value != null) { return Number(value.Value); } break; case XPathResultType.String : return Number((string)argVal); case XPathResultType.Boolean : return Number((bool) argVal); case XPathResultType.Number: return (double) argVal; case XPathResultType_Navigator: return Number(((XPathNavigator)argVal).Value); } return double.NaN; } private double Sum(XPathNodeIterator nodeIterator) { double sum = 0; arg.Evaluate(nodeIterator); XPathNavigator nav; while ((nav = arg.Advance()) != null) { sum += Number(nav.Value); } return sum; } private double Floor(XPathNodeIterator nodeIterator) { return Math.Floor((double) arg.Evaluate(nodeIterator)); } private double Ceiling(XPathNodeIterator nodeIterator) { return Math.Ceiling((double) arg.Evaluate(nodeIterator)); } private double Round(XPathNodeIterator nodeIterator) { double n = XmlConvert.ToXPathDouble(arg.Evaluate(nodeIterator)); return XmlConvert.XPathRound(n); } public override XPathResultType StaticType { get { return XPathResultType.Number; } } public override XPathNodeIterator Clone() { return new NumberFunctions(this); } public override void PrintQuery(XmlWriter w) { w.WriteStartElement(this.GetType().Name); w.WriteAttributeString("name", ftype.ToString()); if (arg != null) { arg.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
- ObjectDataSourceEventArgs.cs
- BaseComponentEditor.cs
- PageCache.cs
- DeflateStreamAsyncResult.cs
- ValidationHelper.cs
- XPathEmptyIterator.cs
- PenThreadWorker.cs
- DataContractAttribute.cs
- QilParameter.cs
- XmlSchemaSet.cs
- CacheSection.cs
- InputLanguageManager.cs
- SafeFileHandle.cs
- RoutedEvent.cs
- Opcode.cs
- StringInfo.cs
- documentsequencetextcontainer.cs
- CharUnicodeInfo.cs
- Timer.cs
- WebBrowserHelper.cs
- UrlPath.cs
- IChannel.cs
- ResourceDescriptionAttribute.cs
- DateTimeUtil.cs
- PresentationTraceSources.cs
- SamlAssertion.cs
- ListenerElementsCollection.cs
- ProcessManager.cs
- ChannelSinkStacks.cs
- IsolatedStorageException.cs
- WhileDesigner.cs
- WindowsSolidBrush.cs
- ModuleBuilder.cs
- JoinCqlBlock.cs
- VerificationException.cs
- StringPropertyBuilder.cs
- PropertyGeneratedEventArgs.cs
- Int32Rect.cs
- SignatureDescription.cs
- _TransmitFileOverlappedAsyncResult.cs
- ContextInformation.cs
- PropertyPushdownHelper.cs
- CompensatableSequenceActivity.cs
- DesignerRegion.cs
- GeneralTransform.cs
- FrameworkElementAutomationPeer.cs
- RequestCache.cs
- RegistryHandle.cs
- HeaderCollection.cs
- querybuilder.cs
- PeerSecurityHelpers.cs
- WebPartTransformerAttribute.cs
- StringFunctions.cs
- SimpleHandlerBuildProvider.cs
- RegexGroupCollection.cs
- InsufficientMemoryException.cs
- StorageEndPropertyMapping.cs
- InputScopeAttribute.cs
- OdbcDataAdapter.cs
- EntityModelSchemaGenerator.cs
- DecimalAnimationBase.cs
- UrlPropertyAttribute.cs
- XPathConvert.cs
- TextTreeExtractElementUndoUnit.cs
- OleDbRowUpdatingEvent.cs
- SecurityImpersonationBehavior.cs
- CngProperty.cs
- OracleRowUpdatedEventArgs.cs
- TraceSection.cs
- OleDbPropertySetGuid.cs
- RegionIterator.cs
- Pens.cs
- TableLayoutCellPaintEventArgs.cs
- ObjectNotFoundException.cs
- OrderByQueryOptionExpression.cs
- EncryptedType.cs
- Style.cs
- InteropBitmapSource.cs
- HelloOperation11AsyncResult.cs
- DataGridViewColumnConverter.cs
- AuthenticationConfig.cs
- TextAutomationPeer.cs
- DateTimeFormatInfo.cs
- ChtmlCalendarAdapter.cs
- ReservationCollection.cs
- SystemIcmpV6Statistics.cs
- querybuilder.cs
- CodePrimitiveExpression.cs
- RTLAwareMessageBox.cs
- SharedPerformanceCounter.cs
- FunctionUpdateCommand.cs
- AssemblyBuilder.cs
- FormViewCommandEventArgs.cs
- XmlSerializerNamespaces.cs
- RtType.cs
- MemberRelationshipService.cs
- GiveFeedbackEventArgs.cs
- RtfControls.cs
- NamespaceInfo.cs
- ColumnMap.cs