Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / Internal / NumberFunctions.cs / 1 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ImageButton.cs
- Int32CollectionValueSerializer.cs
- BackgroundFormatInfo.cs
- IntSecurity.cs
- PropertyTab.cs
- GuidConverter.cs
- OperandQuery.cs
- BindingContext.cs
- mediaeventargs.cs
- UiaCoreApi.cs
- TabOrder.cs
- SqlBooleanMismatchVisitor.cs
- HtmlFormWrapper.cs
- AutomationProperties.cs
- DataObjectAttribute.cs
- Grid.cs
- XmlSchemaDatatype.cs
- XmlDocumentSerializer.cs
- HttpStreams.cs
- EventSourceCreationData.cs
- TrustManagerMoreInformation.cs
- ElementProxy.cs
- SettingsPropertyNotFoundException.cs
- AlternationConverter.cs
- IntPtr.cs
- SpecialFolderEnumConverter.cs
- BooleanProjectedSlot.cs
- ItemMap.cs
- ImageClickEventArgs.cs
- DefinitionUpdate.cs
- XmlSecureResolver.cs
- MatrixAnimationUsingPath.cs
- _NestedSingleAsyncResult.cs
- ValidationResults.cs
- DoubleLink.cs
- OdbcParameterCollection.cs
- SiteMembershipCondition.cs
- TogglePattern.cs
- DataRecordInternal.cs
- EditableTreeList.cs
- _UriSyntax.cs
- ProfileGroupSettingsCollection.cs
- PieceDirectory.cs
- WebPartCatalogAddVerb.cs
- TreeNode.cs
- UnorderedHashRepartitionStream.cs
- BitmapEffectDrawingContent.cs
- XmlSchemaComplexContentExtension.cs
- DodSequenceMerge.cs
- safesecurityhelperavalon.cs
- wgx_render.cs
- Point3DCollectionConverter.cs
- RTTrackingProfile.cs
- PaperSize.cs
- sqlcontext.cs
- ColorAnimationBase.cs
- RegexStringValidatorAttribute.cs
- ImpersonationContext.cs
- LineBreak.cs
- TreeNodeBinding.cs
- SafeRightsManagementPubHandle.cs
- SerializationInfo.cs
- VisualProxy.cs
- ObjectCacheHost.cs
- DataPagerFieldItem.cs
- followingsibling.cs
- DescendantQuery.cs
- RelatedCurrencyManager.cs
- SecurityHeaderTokenResolver.cs
- AnnotationObservableCollection.cs
- ReferenceTypeElement.cs
- DomainConstraint.cs
- UIElement.cs
- DynamicHyperLink.cs
- JsonQueryStringConverter.cs
- NGCSerializer.cs
- UpDownBase.cs
- TableLayoutSettingsTypeConverter.cs
- TimeoutException.cs
- DataTable.cs
- RawTextInputReport.cs
- ServiceModelPerformanceCounters.cs
- SiteIdentityPermission.cs
- Internal.cs
- ButtonChrome.cs
- SqlNotificationRequest.cs
- SplitterDesigner.cs
- PropertyMetadata.cs
- Brush.cs
- PanelStyle.cs
- ClientRuntimeConfig.cs
- Component.cs
- RenderTargetBitmap.cs
- DbConnectionClosed.cs
- XamlHostingConfiguration.cs
- DataGridViewSelectedRowCollection.cs
- AutoGeneratedFieldProperties.cs
- CornerRadius.cs
- WsrmMessageInfo.cs
- BitmapEffectGroup.cs