Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ //// 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
- CryptoConfig.cs
- ISessionStateStore.cs
- StatusInfoItem.cs
- RootProfilePropertySettingsCollection.cs
- AxHost.cs
- DateTimeValueSerializerContext.cs
- WebChannelFactory.cs
- Stack.cs
- RequestQueue.cs
- FileDetails.cs
- DrawingGroup.cs
- DataGridView.cs
- StorageEntityTypeMapping.cs
- FrameworkElementFactory.cs
- ToolBarPanel.cs
- UnsafeNativeMethodsPenimc.cs
- AssemblyResourceLoader.cs
- DynamicILGenerator.cs
- GeneralTransform3DTo2DTo3D.cs
- Point3DCollectionValueSerializer.cs
- Group.cs
- EditCommandColumn.cs
- FacetDescriptionElement.cs
- ScriptingAuthenticationServiceSection.cs
- RegexBoyerMoore.cs
- GenericRootAutomationPeer.cs
- Calendar.cs
- CommandPlan.cs
- RIPEMD160.cs
- IgnoreSection.cs
- DateTimeStorage.cs
- BitmapFrameDecode.cs
- DataGridColumnDropSeparator.cs
- WizardDesigner.cs
- OdbcUtils.cs
- Point3D.cs
- SoapTypeAttribute.cs
- ParameterModifier.cs
- SettingsBindableAttribute.cs
- Scheduler.cs
- TabItemWrapperAutomationPeer.cs
- WindowsAuthenticationEventArgs.cs
- WindowInteropHelper.cs
- QueryAccessibilityHelpEvent.cs
- BinaryNode.cs
- TreeNodeMouseHoverEvent.cs
- OdbcConnectionPoolProviderInfo.cs
- CanonicalizationDriver.cs
- PasswordTextNavigator.cs
- FileUtil.cs
- ToolStripArrowRenderEventArgs.cs
- BitVector32.cs
- PrtTicket_Editor.cs
- Quaternion.cs
- ShowExpandedMultiValueConverter.cs
- ResponseBodyWriter.cs
- CqlBlock.cs
- MeshGeometry3D.cs
- HttpProfileBase.cs
- SortQuery.cs
- DataGridClipboardCellContent.cs
- printdlgexmarshaler.cs
- SoapElementAttribute.cs
- BaseHashHelper.cs
- ProcessHost.cs
- GlyphTypeface.cs
- ServiceBuildProvider.cs
- TextEditorTables.cs
- PenContexts.cs
- DataSourceControlBuilder.cs
- ProfileParameter.cs
- RetrieveVirtualItemEventArgs.cs
- UnsafeNetInfoNativeMethods.cs
- uribuilder.cs
- PageAsyncTaskManager.cs
- HttpFormatExtensions.cs
- MenuItemBindingCollection.cs
- _AutoWebProxyScriptEngine.cs
- EncodingDataItem.cs
- DependencyPropertyConverter.cs
- HashLookup.cs
- DictionaryEntry.cs
- IIS7WorkerRequest.cs
- ProfileModule.cs
- CodeGeneratorOptions.cs
- Point4D.cs
- ControllableStoryboardAction.cs
- ResourcePool.cs
- CacheHelper.cs
- SpellCheck.cs
- TranslateTransform.cs
- CompiledXpathExpr.cs
- SqlCrossApplyToCrossJoin.cs
- PeerApplication.cs
- WindowHideOrCloseTracker.cs
- SafeIUnknown.cs
- PathParser.cs
- ClusterUtils.cs
- VirtualDirectoryMappingCollection.cs
- TreeNodeConverter.cs