Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StringFormat.cs
- PhoneCall.cs
- HostedTcpTransportManager.cs
- Msmq4SubqueuePoisonHandler.cs
- DesignerView.cs
- TextParagraphView.cs
- FusionWrap.cs
- ModelTreeManager.cs
- CheckoutException.cs
- OpenFileDialog.cs
- AutomationElementCollection.cs
- SoapSchemaMember.cs
- SimpleType.cs
- DataBindingCollection.cs
- XmlSchemaInferenceException.cs
- VisualStyleInformation.cs
- TypeInfo.cs
- ObjectAssociationEndMapping.cs
- TypefaceMetricsCache.cs
- Win32KeyboardDevice.cs
- CustomValidator.cs
- DesignerVerbCollection.cs
- ComponentDispatcher.cs
- ButtonBaseAdapter.cs
- Viewport3DAutomationPeer.cs
- SerializationSectionGroup.cs
- LostFocusEventManager.cs
- BitmapEffectCollection.cs
- EncryptedReference.cs
- Currency.cs
- ContextActivityUtils.cs
- ListBox.cs
- WorkflowServiceOperationListItem.cs
- Visitor.cs
- ServerReliableChannelBinder.cs
- ConnectionPointCookie.cs
- GridViewHeaderRowPresenter.cs
- versioninfo.cs
- PageAdapter.cs
- MsmqIntegrationProcessProtocolHandler.cs
- ReadOnlyKeyedCollection.cs
- Application.cs
- ViewKeyConstraint.cs
- VectorAnimationUsingKeyFrames.cs
- FormsAuthenticationTicket.cs
- ResourceSet.cs
- Timer.cs
- WmlFormAdapter.cs
- IndependentlyAnimatedPropertyMetadata.cs
- SelfIssuedAuthRSAPKCS1SignatureDeformatter.cs
- ProxyFragment.cs
- VersionPair.cs
- Util.cs
- XmlMapping.cs
- ToolBarButton.cs
- CacheVirtualItemsEvent.cs
- GridEntryCollection.cs
- HeaderPanel.cs
- WebCategoryAttribute.cs
- RuleRefElement.cs
- XmlSchemaAll.cs
- XmlDataCollection.cs
- CFStream.cs
- MasterPage.cs
- WebBrowserBase.cs
- SiteMapNode.cs
- RequestCachingSection.cs
- BitmapEffectInputData.cs
- WinFormsSecurity.cs
- ReflectionPermission.cs
- NoResizeSelectionBorderGlyph.cs
- BaseCollection.cs
- CacheForPrimitiveTypes.cs
- DeflateInput.cs
- ToolStripHighContrastRenderer.cs
- unsafenativemethodsother.cs
- TypeLoadException.cs
- Function.cs
- RelationshipEndCollection.cs
- CodeSnippetCompileUnit.cs
- CFStream.cs
- RegionIterator.cs
- ItemsControlAutomationPeer.cs
- XXXOnTypeBuilderInstantiation.cs
- RefreshEventArgs.cs
- UInt32Converter.cs
- CollaborationHelperFunctions.cs
- ProgressBar.cs
- CacheForPrimitiveTypes.cs
- ZipIOExtraField.cs
- DataBindingValueUIHandler.cs
- LineServicesRun.cs
- StateMachineSubscription.cs
- XslException.cs
- DynamicILGenerator.cs
- DesignTimeXamlWriter.cs
- UIPropertyMetadata.cs
- GPStream.cs
- XmlObjectSerializerReadContextComplexJson.cs
- DataReceivedEventArgs.cs