Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- EventEntry.cs
- BaseUriWithWildcard.cs
- mactripleDES.cs
- SoapClientMessage.cs
- FileDialogPermission.cs
- HiddenFieldPageStatePersister.cs
- LinqDataSourceContextEventArgs.cs
- Label.cs
- TextMessageEncoder.cs
- streamingZipPartStream.cs
- SchemaObjectWriter.cs
- MSHTMLHostUtil.cs
- WebUtil.cs
- CreateUserErrorEventArgs.cs
- SafeFindHandle.cs
- ListItem.cs
- WebPartDisplayMode.cs
- ADConnectionHelper.cs
- ParserStack.cs
- DescendantBaseQuery.cs
- OleDbErrorCollection.cs
- PolicyStatement.cs
- XmlUtil.cs
- ServerType.cs
- Tuple.cs
- PageWrapper.cs
- StoreContentChangedEventArgs.cs
- ToolStripDropDownClosedEventArgs.cs
- BinarySerializer.cs
- Label.cs
- AnnotationStore.cs
- XmlDataDocument.cs
- Animatable.cs
- CompiledXpathExpr.cs
- XmlTextEncoder.cs
- ExpressionsCollectionConverter.cs
- OleDbReferenceCollection.cs
- DeflateEmulationStream.cs
- TripleDESCryptoServiceProvider.cs
- DataObjectCopyingEventArgs.cs
- PrintEvent.cs
- FacetEnabledSchemaElement.cs
- CompositeControl.cs
- OutputCacheSection.cs
- isolationinterop.cs
- Function.cs
- RequestCacheManager.cs
- HttpStreamXmlDictionaryReader.cs
- ImpersonationOption.cs
- ActivationArguments.cs
- WrapPanel.cs
- SrgsElementList.cs
- TimeoutConverter.cs
- DelegatingConfigHost.cs
- PTConverter.cs
- BookmarkEventArgs.cs
- MatrixUtil.cs
- ObjectDataSourceFilteringEventArgs.cs
- WorkflowExecutor.cs
- ArrayExtension.cs
- Set.cs
- SponsorHelper.cs
- MissingSatelliteAssemblyException.cs
- ZipIORawDataFileBlock.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- HttpRequestTraceRecord.cs
- DiscoveryReference.cs
- BitmapInitialize.cs
- UserUseLicenseDictionaryLoader.cs
- ListManagerBindingsCollection.cs
- WmlPanelAdapter.cs
- BooleanExpr.cs
- ClientSettingsStore.cs
- RectangleGeometry.cs
- InkCanvasSelectionAdorner.cs
- DoubleKeyFrameCollection.cs
- ValueExpressions.cs
- FontStyles.cs
- metadatamappinghashervisitor.cs
- IndexOutOfRangeException.cs
- NameValueFileSectionHandler.cs
- GridItemProviderWrapper.cs
- EditorAttribute.cs
- XmlBaseWriter.cs
- WebPartDescriptionCollection.cs
- KeyboardDevice.cs
- PropertyGridCommands.cs
- TypeToArgumentTypeConverter.cs
- MobileListItemCollection.cs
- SerializableTypeCodeDomSerializer.cs
- AtomServiceDocumentSerializer.cs
- SmiXetterAccessMap.cs
- ToolZone.cs
- CaseInsensitiveHashCodeProvider.cs
- HtmlInputCheckBox.cs
- SmiContextFactory.cs
- MultipartIdentifier.cs
- JpegBitmapEncoder.cs
- AssemblyBuilderData.cs
- DataGridViewAccessibleObject.cs