Code:
/ FX-1434 / FX-1434 / 1.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
- KeyboardDevice.cs
- PolicyReader.cs
- CodeAttachEventStatement.cs
- SizeAnimationClockResource.cs
- MediaElementAutomationPeer.cs
- PartialCachingControl.cs
- TableLayoutCellPaintEventArgs.cs
- CustomTypeDescriptor.cs
- FixedSOMElement.cs
- _AutoWebProxyScriptEngine.cs
- QueryContinueDragEventArgs.cs
- HwndProxyElementProvider.cs
- SessionEndedEventArgs.cs
- ComponentCommands.cs
- UnsafeNativeMethodsTablet.cs
- XmlHierarchyData.cs
- ToolStripContentPanel.cs
- WebPartDescription.cs
- SocketPermission.cs
- AudioBase.cs
- UnsafeNetInfoNativeMethods.cs
- ConnectionInterfaceCollection.cs
- StringBuilder.cs
- ConnectorDragDropGlyph.cs
- StringComparer.cs
- IDictionary.cs
- SmiConnection.cs
- BaseDataList.cs
- WindowsFont.cs
- HtmlControlPersistable.cs
- ObjectToIdCache.cs
- ValueType.cs
- UserThread.cs
- Semaphore.cs
- ServicesUtilities.cs
- RemoteAsymmetricSignatureFormatter.cs
- CellCreator.cs
- ZipIOCentralDirectoryFileHeader.cs
- ErrorFormatter.cs
- Number.cs
- PrincipalPermission.cs
- GeneralTransform3D.cs
- ThreadStartException.cs
- DbConnectionPoolOptions.cs
- ConnectorDragDropGlyph.cs
- UpdatePanelControlTrigger.cs
- FileAuthorizationModule.cs
- AttributeCollection.cs
- ErrorTableItemStyle.cs
- Compiler.cs
- WindowsUpDown.cs
- PackageDocument.cs
- DataGridPagerStyle.cs
- MediaScriptCommandRoutedEventArgs.cs
- ConstructorNeedsTagAttribute.cs
- ForeignKeyFactory.cs
- ConstantCheck.cs
- ErrorEventArgs.cs
- PerformanceCounterManager.cs
- Margins.cs
- AttributeAction.cs
- SelectedGridItemChangedEvent.cs
- xmlglyphRunInfo.cs
- ForwardPositionQuery.cs
- SafeEventLogReadHandle.cs
- DateTimeOffset.cs
- EntityContainer.cs
- GraphicsContainer.cs
- AspNetCompatibilityRequirementsMode.cs
- ContainerUtilities.cs
- EntityModelBuildProvider.cs
- TextParagraphProperties.cs
- VersionPair.cs
- StringInfo.cs
- FaultHandlingFilter.cs
- ListDictionaryInternal.cs
- ScrollItemPatternIdentifiers.cs
- UnknownBitmapEncoder.cs
- StateBag.cs
- DeviceContexts.cs
- KnownTypes.cs
- ImageAnimator.cs
- RoutingUtilities.cs
- RenderingBiasValidation.cs
- DataAdapter.cs
- CollectionViewGroupRoot.cs
- BuildManagerHost.cs
- TemplateControlBuildProvider.cs
- TrustManagerPromptUI.cs
- HandlerBase.cs
- GradientSpreadMethodValidation.cs
- WebPartPersonalization.cs
- ArrangedElement.cs
- WpfGeneratedKnownTypes.cs
- ClientSettingsProvider.cs
- EventLogPermissionAttribute.cs
- EntityContainerEntitySet.cs
- TypeDescriptor.cs
- HtmlTableRowCollection.cs
- AnnotationDocumentPaginator.cs