Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HelpEvent.cs
- ConnectionPoint.cs
- LinkTarget.cs
- DataGridViewLayoutData.cs
- WindowsSysHeader.cs
- ReplyChannelBinder.cs
- TypeConverter.cs
- BindingManagerDataErrorEventArgs.cs
- DataComponentGenerator.cs
- DbConnectionPoolGroupProviderInfo.cs
- sqlser.cs
- HttpRuntime.cs
- DbXmlEnabledProviderManifest.cs
- ByeOperation11AsyncResult.cs
- Suspend.cs
- TypedReference.cs
- Certificate.cs
- AutomationPropertyChangedEventArgs.cs
- SecurityPolicySection.cs
- SqlDataSourceEnumerator.cs
- InfoCardRSACryptoProvider.cs
- Funcletizer.cs
- TextTreeInsertUndoUnit.cs
- TransformPatternIdentifiers.cs
- safemediahandle.cs
- XPathNodeInfoAtom.cs
- MatrixTransform.cs
- SuppressMessageAttribute.cs
- TextModifier.cs
- ToolStripRenderEventArgs.cs
- DataGridViewToolTip.cs
- ToolStripStatusLabel.cs
- ComplexPropertyEntry.cs
- AstNode.cs
- LinkLabelLinkClickedEvent.cs
- PersonalizationAdministration.cs
- PhysicalAddress.cs
- ProxyAttribute.cs
- SafeTokenHandle.cs
- SmiEventSink_DeferedProcessing.cs
- TextTreeInsertUndoUnit.cs
- Type.cs
- KeyPullup.cs
- AttributeCollection.cs
- PolicyLevel.cs
- GenericAuthenticationEventArgs.cs
- ApplicationId.cs
- ExpressionEvaluator.cs
- ExceptionUtil.cs
- XmlIlGenerator.cs
- ComplexObject.cs
- WindowShowOrOpenTracker.cs
- SqlTriggerContext.cs
- UriScheme.cs
- DataListItem.cs
- XPathDocumentNavigator.cs
- MarkupObject.cs
- ToolConsole.cs
- OracleInfoMessageEventArgs.cs
- UnsafeNativeMethodsTablet.cs
- Vector3dCollection.cs
- LinqDataSourceSelectEventArgs.cs
- ApplicationId.cs
- OrderingInfo.cs
- WindowsScrollBarBits.cs
- HttpWriter.cs
- ConnectionProviderAttribute.cs
- SinglePageViewer.cs
- DataSourceXmlAttributeAttribute.cs
- assertwrapper.cs
- EventHandlersDesigner.cs
- XmlElementList.cs
- SqlHelper.cs
- PointAnimationUsingPath.cs
- _AutoWebProxyScriptHelper.cs
- SerializationException.cs
- PinProtectionHelper.cs
- KnownTypeDataContractResolver.cs
- WebServiceErrorEvent.cs
- CryptoApi.cs
- SystemIPInterfaceProperties.cs
- Privilege.cs
- EncodingDataItem.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- LayoutSettings.cs
- KeyedHashAlgorithm.cs
- Preprocessor.cs
- DataSourceHelper.cs
- EdmScalarPropertyAttribute.cs
- TransactionInformation.cs
- PermissionToken.cs
- QueueProcessor.cs
- EventSchemaTraceListener.cs
- Crypto.cs
- DesignerEditorPartChrome.cs
- DbConnectionPoolCounters.cs
- DataViewManagerListItemTypeDescriptor.cs
- CroppedBitmap.cs
- SuppressIldasmAttribute.cs
- SslStream.cs