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
- ProxyManager.cs
- ObjectDataSourceStatusEventArgs.cs
- ScrollBar.cs
- AppDomainCompilerProxy.cs
- rsa.cs
- StringCollection.cs
- LogLogRecordEnumerator.cs
- WebResourceAttribute.cs
- PropertyItemInternal.cs
- ObjectContextServiceProvider.cs
- OleDbPermission.cs
- Span.cs
- UiaCoreTypesApi.cs
- Soap.cs
- GC.cs
- CommonDialog.cs
- __TransparentProxy.cs
- WebPartUserCapability.cs
- PersistenceException.cs
- WhitespaceSignificantCollectionAttribute.cs
- ActiveXHelper.cs
- HighlightComponent.cs
- DispatcherTimer.cs
- SqlGenericUtil.cs
- Clock.cs
- AdPostCacheSubstitution.cs
- DataGridViewCellLinkedList.cs
- BindingGroup.cs
- Base64Decoder.cs
- XPathNodePointer.cs
- DrawListViewItemEventArgs.cs
- TextElement.cs
- CompilationRelaxations.cs
- ExtensionFile.cs
- ScopeElementCollection.cs
- DbProviderSpecificTypePropertyAttribute.cs
- ServicePointManagerElement.cs
- WebPartCatalogCloseVerb.cs
- EventSetter.cs
- RewritingSimplifier.cs
- CollectionViewGroup.cs
- HtmlInputControl.cs
- Array.cs
- ChannelServices.cs
- StateChangeEvent.cs
- PerformanceCounterPermissionEntry.cs
- _TLSstream.cs
- IdentityModelStringsVersion1.cs
- QueryContinueDragEvent.cs
- WinCategoryAttribute.cs
- ContextBase.cs
- SimpleTypeResolver.cs
- DataGridViewSelectedCellCollection.cs
- UniqueContractNameValidationBehavior.cs
- XmlSiteMapProvider.cs
- DataSourceHelper.cs
- TreeNodeEventArgs.cs
- ComplexBindingPropertiesAttribute.cs
- DataGridViewCheckBoxColumn.cs
- ToolStripPanelRow.cs
- AsyncPostBackTrigger.cs
- WindowsListViewItemCheckBox.cs
- DateTimeParse.cs
- ReachNamespaceInfo.cs
- DataMisalignedException.cs
- MetadataItemEmitter.cs
- ConfigViewGenerator.cs
- StringFreezingAttribute.cs
- GeneralTransform3DCollection.cs
- DrawingContextWalker.cs
- FormsAuthentication.cs
- Triangle.cs
- Utils.cs
- DrawingBrush.cs
- Debug.cs
- LineBreak.cs
- ForwardPositionQuery.cs
- StringDictionaryWithComparer.cs
- WebPartEditorCancelVerb.cs
- TargetInvocationException.cs
- DateTimeHelper.cs
- Int16Storage.cs
- CodeCompiler.cs
- DataKey.cs
- EntityPropertyMappingAttribute.cs
- ToolZone.cs
- EncoderExceptionFallback.cs
- ButtonAutomationPeer.cs
- BCryptNative.cs
- CodeCommentStatement.cs
- AuthenticatedStream.cs
- SafeWaitHandle.cs
- InputReport.cs
- WebPartCancelEventArgs.cs
- OAVariantLib.cs
- X509CertificateInitiatorClientCredential.cs
- DrawingVisual.cs
- SHA384.cs
- MgmtConfigurationRecord.cs
- ColorInterpolationModeValidation.cs