Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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. // //[....] //----------------------------------------------------------------------------- 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
- ClickablePoint.cs
- CorrelationService.cs
- InkCanvasInnerCanvas.cs
- SoapExtensionReflector.cs
- JsonReader.cs
- ToolboxComponentsCreatingEventArgs.cs
- PerformanceCounter.cs
- StrongNameHelpers.cs
- ZipArchive.cs
- TemplateKey.cs
- Transform.cs
- WindowsHyperlink.cs
- Perspective.cs
- NotSupportedException.cs
- BitmapFrameEncode.cs
- Util.cs
- TextParentUndoUnit.cs
- ObjectSpanRewriter.cs
- QilPatternVisitor.cs
- HttpPostedFileWrapper.cs
- ACE.cs
- Drawing.cs
- TaskScheduler.cs
- SqlMethods.cs
- XmlSerializerSection.cs
- CharConverter.cs
- AxParameterData.cs
- Translator.cs
- ReversePositionQuery.cs
- BufferedGraphicsContext.cs
- ServicesUtilities.cs
- ImageAutomationPeer.cs
- ToolStripLabel.cs
- Int32CollectionValueSerializer.cs
- ErrorHandlerFaultInfo.cs
- FolderLevelBuildProvider.cs
- DockPatternIdentifiers.cs
- ReflectionUtil.cs
- ComponentConverter.cs
- ExpressionSelection.cs
- ComEventsHelper.cs
- BatchWriter.cs
- SqlProfileProvider.cs
- CodeDirectoryCompiler.cs
- PublishLicense.cs
- DataObject.cs
- GridToolTip.cs
- ListSortDescriptionCollection.cs
- BaseInfoTable.cs
- ObjectDataSourceEventArgs.cs
- PropertyDescriptorCollection.cs
- SqlNotificationEventArgs.cs
- EndpointNotFoundException.cs
- StrokeNode.cs
- WebBrowserContainer.cs
- DataGridView.cs
- QilInvokeLateBound.cs
- BamlCollectionHolder.cs
- FixedTextPointer.cs
- ListViewInsertEventArgs.cs
- PagesChangedEventArgs.cs
- Operator.cs
- IndependentAnimationStorage.cs
- SoapFormatterSinks.cs
- DictionarySurrogate.cs
- SchemaImporterExtensionElementCollection.cs
- SelectionRange.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- LocatorManager.cs
- CodeAccessSecurityEngine.cs
- SqlProvider.cs
- IgnoreFlushAndCloseStream.cs
- ErrorFormatter.cs
- ObfuscateAssemblyAttribute.cs
- TimeSpanStorage.cs
- MulticastIPAddressInformationCollection.cs
- XmlC14NWriter.cs
- DataServicePagingProviderWrapper.cs
- IdentityReference.cs
- ArgIterator.cs
- TextureBrush.cs
- XmlDigitalSignatureProcessor.cs
- RepeaterItem.cs
- KeyBinding.cs
- OutOfProcStateClientManager.cs
- BaseResourcesBuildProvider.cs
- NativeRightsManagementAPIsStructures.cs
- PolyBezierSegment.cs
- PathHelper.cs
- JsonObjectDataContract.cs
- DispatcherExceptionEventArgs.cs
- AesCryptoServiceProvider.cs
- ContextMenuStripActionList.cs
- MethodAccessException.cs
- CheckBoxList.cs
- FontInfo.cs
- KeySpline.cs
- HwndHostAutomationPeer.cs
- RayMeshGeometry3DHitTestResult.cs
- DefaultProxySection.cs