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
- TableCell.cs
- EmptyControlCollection.cs
- KeyEvent.cs
- ValidationHelpers.cs
- WebPartDisplayModeEventArgs.cs
- NestedContainer.cs
- RequestCacheValidator.cs
- ProgressBar.cs
- PipelineModuleStepContainer.cs
- TextAdaptor.cs
- GroupItemAutomationPeer.cs
- SetUserLanguageRequest.cs
- CompiledAction.cs
- DateTimeValueSerializerContext.cs
- GridViewSortEventArgs.cs
- ComponentChangingEvent.cs
- Empty.cs
- DragStartedEventArgs.cs
- RenderOptions.cs
- WindowsRegion.cs
- PreservationFileReader.cs
- Lasso.cs
- AssemblyAssociatedContentFileAttribute.cs
- CdpEqualityComparer.cs
- EnvelopedPkcs7.cs
- WindowsTitleBar.cs
- State.cs
- NullableFloatAverageAggregationOperator.cs
- AppSettingsSection.cs
- ShaperBuffers.cs
- InkCanvasAutomationPeer.cs
- ExpressionPrefixAttribute.cs
- DecoderBestFitFallback.cs
- WebPartEditorCancelVerb.cs
- AttributeCollection.cs
- XmlSchemaDatatype.cs
- TemplatedAdorner.cs
- ListenerElementsCollection.cs
- ApplicationSecurityInfo.cs
- MinMaxParagraphWidth.cs
- OracleDataAdapter.cs
- NCryptNative.cs
- xmlfixedPageInfo.cs
- FamilyTypefaceCollection.cs
- AbsoluteQuery.cs
- CompositionTarget.cs
- XmlDomTextWriter.cs
- FormatPage.cs
- CodePageEncoding.cs
- ViewUtilities.cs
- TextEncodedRawTextWriter.cs
- HeaderLabel.cs
- WinCategoryAttribute.cs
- Menu.cs
- Shared.cs
- HtmlDocument.cs
- CommandExpr.cs
- ButtonChrome.cs
- StrokeRenderer.cs
- LabelLiteral.cs
- RefreshResponseInfo.cs
- MemberCollection.cs
- X509Certificate2Collection.cs
- KeyConverter.cs
- QilCloneVisitor.cs
- ImageSource.cs
- Image.cs
- ColumnProvider.cs
- FormsIdentity.cs
- Sentence.cs
- XmlMapping.cs
- AssemblyLoader.cs
- EnvironmentPermission.cs
- SymbolEqualComparer.cs
- DataViewManager.cs
- PenContext.cs
- XmlExtensionFunction.cs
- ExtenderProvidedPropertyAttribute.cs
- DataSetMappper.cs
- ConfigXmlSignificantWhitespace.cs
- BasicCellRelation.cs
- RewritingSimplifier.cs
- SecurityCookieModeValidator.cs
- InstanceKeyView.cs
- WebPartConnection.cs
- TableItemProviderWrapper.cs
- altserialization.cs
- IntegrationExceptionEventArgs.cs
- InvokeGenerator.cs
- HttpConfigurationSystem.cs
- NamedPipeProcessProtocolHandler.cs
- VideoDrawing.cs
- ContainerUIElement3D.cs
- XmlDataDocument.cs
- OrderedDictionaryStateHelper.cs
- DataBoundLiteralControl.cs
- AxImporter.cs
- ReferenceSchema.cs
- BamlLocalizabilityResolver.cs
- XmlWellformedWriterHelpers.cs