Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- SelectedDatesCollection.cs
- SqlTypesSchemaImporter.cs
- DataGridSortingEventArgs.cs
- PointLightBase.cs
- dsa.cs
- AdPostCacheSubstitution.cs
- BitmapEffectInput.cs
- StringUtil.cs
- DefaultExpression.cs
- DesignerWidgets.cs
- DataGridViewCellValidatingEventArgs.cs
- PersianCalendar.cs
- AssemblySettingAttributes.cs
- DesignSurfaceCollection.cs
- Blend.cs
- OdbcConnectionFactory.cs
- HtmlToClrEventProxy.cs
- SqlInternalConnectionSmi.cs
- PropertyToken.cs
- DataGridViewCellValueEventArgs.cs
- AvtEvent.cs
- TraceLevelStore.cs
- HttpInputStream.cs
- DocobjHost.cs
- ConfigurationPropertyCollection.cs
- GridView.cs
- MinMaxParagraphWidth.cs
- QueuePathDialog.cs
- ItemsControl.cs
- LineGeometry.cs
- DocumentEventArgs.cs
- ArglessEventHandlerProxy.cs
- GeometryModel3D.cs
- TileBrush.cs
- Renderer.cs
- MetadataArtifactLoaderCompositeFile.cs
- Dispatcher.cs
- DataGridViewCellStyleConverter.cs
- StateDesigner.cs
- Operand.cs
- BitmapEffect.cs
- CodeIdentifier.cs
- CodeSnippetCompileUnit.cs
- TableLayoutRowStyleCollection.cs
- Rethrow.cs
- EventLogPermissionAttribute.cs
- MetaDataInfo.cs
- DataStreamFromComStream.cs
- GACIdentityPermission.cs
- OLEDB_Util.cs
- MexBindingElement.cs
- ExtentKey.cs
- BaseProcessor.cs
- PersonalizationState.cs
- XmlReaderSettings.cs
- WindowsListViewGroupSubsetLink.cs
- FieldDescriptor.cs
- CustomError.cs
- FtpWebRequest.cs
- StringFormat.cs
- CustomAttributeBuilder.cs
- ConnectionManagementElementCollection.cs
- ParallelQuery.cs
- InputMethodStateChangeEventArgs.cs
- FileVersionInfo.cs
- ToolStripItemRenderEventArgs.cs
- SafeFileMappingHandle.cs
- GetWinFXPath.cs
- CrossContextChannel.cs
- BitmapFrame.cs
- NoneExcludedImageIndexConverter.cs
- DbConnectionHelper.cs
- indexingfiltermarshaler.cs
- ProgressBarHighlightConverter.cs
- CheckedListBox.cs
- HttpCookieCollection.cs
- ImageListUtils.cs
- SecurityAlgorithmSuite.cs
- AutomationPeer.cs
- UniqueConstraint.cs
- BatchParser.cs
- DBParameter.cs
- dbdatarecord.cs
- LinqDataSourceView.cs
- RoleService.cs
- ObjectDataSourceDisposingEventArgs.cs
- BufferBuilder.cs
- WsdlExporter.cs
- PropertyDescriptor.cs
- PriorityBindingExpression.cs
- DiscoveryInnerClientAdhoc11.cs
- HyperLinkField.cs
- Models.cs
- StylusPointProperty.cs
- CursorConverter.cs
- AutomationEvent.cs
- TreeNodeCollection.cs
- DateTimeStorage.cs
- VerifyHashRequest.cs
- MergeEnumerator.cs