Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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
- DataControlField.cs
- ReadOnlyHierarchicalDataSource.cs
- MembershipUser.cs
- CookieProtection.cs
- ISessionStateStore.cs
- X509ChainPolicy.cs
- _ChunkParse.cs
- TraceUtility.cs
- WindowsFormsHostAutomationPeer.cs
- Confirm.cs
- ListItemCollection.cs
- KeyValueSerializer.cs
- SponsorHelper.cs
- FieldAccessException.cs
- ServiceDescriptionContext.cs
- DoubleLink.cs
- ellipse.cs
- SubMenuStyle.cs
- Processor.cs
- TiffBitmapDecoder.cs
- BuilderInfo.cs
- KnownBoxes.cs
- SizeChangedEventArgs.cs
- WsatServiceAddress.cs
- AsymmetricKeyExchangeDeformatter.cs
- EntityContainerAssociationSet.cs
- LinkedResourceCollection.cs
- Configuration.cs
- SequentialUshortCollection.cs
- RegistryPermission.cs
- DateTimeFormatInfo.cs
- ErrorEventArgs.cs
- SqlProfileProvider.cs
- HashSet.cs
- MatrixKeyFrameCollection.cs
- IteratorDescriptor.cs
- ConnectionsZone.cs
- DBDataPermissionAttribute.cs
- ToolStripItemEventArgs.cs
- HandledEventArgs.cs
- LogSwitch.cs
- NonParentingControl.cs
- BuildResult.cs
- ClientBuildManagerCallback.cs
- BuildProvider.cs
- ProtocolsConfigurationEntry.cs
- Range.cs
- DataGridSortCommandEventArgs.cs
- WorkflowElementDialog.cs
- WindowsSysHeader.cs
- ResourceExpressionEditorSheet.cs
- DoubleAnimationUsingPath.cs
- TemplateKey.cs
- HashCryptoHandle.cs
- BrowserDefinition.cs
- FullTextLine.cs
- TextEditorMouse.cs
- DetailsViewAutoFormat.cs
- TextEffectCollection.cs
- WeakReadOnlyCollection.cs
- NavigationWindow.cs
- GridPattern.cs
- PathStreamGeometryContext.cs
- Pair.cs
- DataBoundControlHelper.cs
- ClockController.cs
- BitmapEffectDrawingContextWalker.cs
- WmlControlAdapter.cs
- PropertyMapper.cs
- CardSpacePolicyElement.cs
- _LazyAsyncResult.cs
- CodeDomDesignerLoader.cs
- NetTcpBindingElement.cs
- Security.cs
- ParserStreamGeometryContext.cs
- XmlDataImplementation.cs
- ObfuscationAttribute.cs
- MenuBase.cs
- SqlColumnizer.cs
- RefreshEventArgs.cs
- Style.cs
- MetadataItemEmitter.cs
- HttpServerVarsCollection.cs
- CodeBlockBuilder.cs
- TreeNode.cs
- ToolboxItemLoader.cs
- InfoCardCryptoHelper.cs
- BackgroundWorker.cs
- CompletedAsyncResult.cs
- FlowDocumentPageViewerAutomationPeer.cs
- DataGridViewColumnCollection.cs
- IODescriptionAttribute.cs
- PageParser.cs
- WindowsStatusBar.cs
- OdbcInfoMessageEvent.cs
- SamlSubjectStatement.cs
- TextSchema.cs
- RegexGroupCollection.cs
- Recipient.cs
- RemotingAttributes.cs