Code:
/ DotNET / DotNET / 8.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
- StrongNamePublicKeyBlob.cs
- MonthChangedEventArgs.cs
- RetrieveVirtualItemEventArgs.cs
- DialogResultConverter.cs
- Condition.cs
- DataSetMappper.cs
- StatusStrip.cs
- CacheVirtualItemsEvent.cs
- DynamicPropertyReader.cs
- DateTimeFormat.cs
- TextSpanModifier.cs
- Lock.cs
- AtomMaterializerLog.cs
- AVElementHelper.cs
- Constants.cs
- UserUseLicenseDictionaryLoader.cs
- AttributeData.cs
- StrokeNode.cs
- NetworkInterface.cs
- BehaviorEditorPart.cs
- TypeConverters.cs
- CodeDesigner.cs
- SqlRewriteScalarSubqueries.cs
- IntegerFacetDescriptionElement.cs
- AssignDesigner.xaml.cs
- BaseCodePageEncoding.cs
- HttpCapabilitiesSectionHandler.cs
- LinkedResourceCollection.cs
- SocketInformation.cs
- TimeoutValidationAttribute.cs
- TdsParserStaticMethods.cs
- TemplateManager.cs
- HandleRef.cs
- XmlDictionaryReaderQuotasElement.cs
- AdjustableArrowCap.cs
- WebPartVerbCollection.cs
- BufferAllocator.cs
- PagesSection.cs
- SoapAttributeOverrides.cs
- FullTextState.cs
- CatalogPart.cs
- FieldToken.cs
- CheckPair.cs
- BuiltInExpr.cs
- Positioning.cs
- EnumConverter.cs
- SessionEndingCancelEventArgs.cs
- dbenumerator.cs
- LocationSectionRecord.cs
- InvalidDataException.cs
- ProcessModuleCollection.cs
- WebContentFormatHelper.cs
- ToolStripButton.cs
- DataServiceResponse.cs
- ErrorProvider.cs
- LineUtil.cs
- RegisteredArrayDeclaration.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- XmlValidatingReaderImpl.cs
- SystemIPv6InterfaceProperties.cs
- KeysConverter.cs
- AssemblyAttributes.cs
- SignatureGenerator.cs
- XmlnsCompatibleWithAttribute.cs
- XmlLanguage.cs
- Byte.cs
- Vector3D.cs
- EventBookmark.cs
- PropertyMapper.cs
- GridSplitter.cs
- TypeConverterMarkupExtension.cs
- ProxyWebPartConnectionCollection.cs
- uribuilder.cs
- ProfileService.cs
- LinkedResourceCollection.cs
- _OSSOCK.cs
- ContextMenuAutomationPeer.cs
- UserControl.cs
- GridLength.cs
- DataServiceQueryException.cs
- ObjectSerializerFactory.cs
- SoundPlayerAction.cs
- ClientApiGenerator.cs
- ValidatedControlConverter.cs
- MulticastNotSupportedException.cs
- ApplicationServicesHostFactory.cs
- XmlSchemaSequence.cs
- SqlTriggerAttribute.cs
- MultiAsyncResult.cs
- MatchAttribute.cs
- Int64Converter.cs
- Expression.cs
- Rfc2898DeriveBytes.cs
- TrackingServices.cs
- ReadOnlyCollectionBase.cs
- SplineKeyFrames.cs
- XXXInfos.cs
- ListControl.cs
- DataBindingHandlerAttribute.cs
- MediaContext.cs