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
- AuthenticationService.cs
- Knowncolors.cs
- DataPager.cs
- ControlAdapter.cs
- Rfc4050KeyFormatter.cs
- FirstMatchCodeGroup.cs
- DbResourceAllocator.cs
- ArrayElementGridEntry.cs
- TabletCollection.cs
- StickyNoteHelper.cs
- HtmlMeta.cs
- SectionXmlInfo.cs
- NativeMethods.cs
- BamlRecordWriter.cs
- ReadOnlyDictionary.cs
- WindowsEditBoxRange.cs
- PolyBezierSegment.cs
- RuleSettings.cs
- ServicesUtilities.cs
- Vector3DCollectionConverter.cs
- SchemaNotation.cs
- HtmlUtf8RawTextWriter.cs
- HTTPNotFoundHandler.cs
- WindowsHyperlink.cs
- UserControlParser.cs
- XmlSerializerFactory.cs
- SystemIPv4InterfaceProperties.cs
- SchemaImporter.cs
- DataRecordInfo.cs
- ObjectIDGenerator.cs
- FontStyleConverter.cs
- ActivityInterfaces.cs
- Codec.cs
- PolyLineSegmentFigureLogic.cs
- CubicEase.cs
- LoginView.cs
- StatusBarAutomationPeer.cs
- DeflateStream.cs
- ExceptionValidationRule.cs
- OSEnvironmentHelper.cs
- LinqDataSource.cs
- EncodingDataItem.cs
- ReflectionPermission.cs
- ObjectSecurityT.cs
- FormatConvertedBitmap.cs
- ObjectDataSourceView.cs
- AuditLogLocation.cs
- ProjectedWrapper.cs
- Literal.cs
- AppendHelper.cs
- Axis.cs
- RegexWriter.cs
- MemberCollection.cs
- SpellerStatusTable.cs
- ControlBindingsCollection.cs
- SafeLocalMemHandle.cs
- UIElement3D.cs
- ListMarkerLine.cs
- FormViewCommandEventArgs.cs
- TimelineGroup.cs
- StylusPointProperties.cs
- ClientBuildManager.cs
- KeyFrames.cs
- MouseActionConverter.cs
- SchemaTableOptionalColumn.cs
- CommonObjectSecurity.cs
- DesignBindingConverter.cs
- FunctionNode.cs
- SystemDropShadowChrome.cs
- versioninfo.cs
- ColorMap.cs
- HMACSHA384.cs
- SpellerHighlightLayer.cs
- ResourceExpressionBuilder.cs
- ArgumentNullException.cs
- RuleRefElement.cs
- BatchParser.cs
- FtpCachePolicyElement.cs
- TextTreeTextElementNode.cs
- DbConnectionFactory.cs
- ButtonRenderer.cs
- GridViewRowPresenterBase.cs
- OdbcTransaction.cs
- GridViewDeletedEventArgs.cs
- SessionEndingEventArgs.cs
- SqlDataSourceSummaryPanel.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- Menu.cs
- CharAnimationUsingKeyFrames.cs
- DbTransaction.cs
- ElementMarkupObject.cs
- XPathSelectionIterator.cs
- EntityDataSourceWrapperCollection.cs
- ConstraintEnumerator.cs
- AlignmentXValidation.cs
- ContainerControlDesigner.cs
- CoTaskMemHandle.cs
- XmlSerializableReader.cs
- TranslateTransform.cs
- IdentitySection.cs