Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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
- InstanceHandleReference.cs
- _ListenerAsyncResult.cs
- AxParameterData.cs
- AsyncResult.cs
- DataGridViewColumn.cs
- InternalConfigHost.cs
- Material.cs
- ActivityTypeDesigner.xaml.cs
- dtdvalidator.cs
- mansign.cs
- DocumentApplicationJournalEntry.cs
- DesignTimeValidationFeature.cs
- PathGeometry.cs
- NumberFunctions.cs
- InstanceDataCollection.cs
- CharacterMetricsDictionary.cs
- FixedSOMTableRow.cs
- SrgsRuleRef.cs
- StyleXamlParser.cs
- ProfileParameter.cs
- CompositeFontFamily.cs
- DuplicateWaitObjectException.cs
- LinkButton.cs
- EntityContainerEntitySet.cs
- ExpressionQuoter.cs
- SqlDataSourceCustomCommandPanel.cs
- ControlParameter.cs
- OperatorExpressions.cs
- ScrollEvent.cs
- RegisteredExpandoAttribute.cs
- MetadataArtifactLoaderCompositeFile.cs
- StringKeyFrameCollection.cs
- EmptyControlCollection.cs
- AudioFormatConverter.cs
- SoundPlayerAction.cs
- LocalizableResourceBuilder.cs
- QueryOperationResponseOfT.cs
- SqlDataReaderSmi.cs
- ApplicationSettingsBase.cs
- PassportPrincipal.cs
- BaseDataListActionList.cs
- ScaleTransform.cs
- Asn1IntegerConverter.cs
- COM2ComponentEditor.cs
- CustomWebEventKey.cs
- PagedDataSource.cs
- Line.cs
- NotConverter.cs
- BamlResourceContent.cs
- BooleanFunctions.cs
- EntityTypeEmitter.cs
- MetaForeignKeyColumn.cs
- WebPartCollection.cs
- OverlappedAsyncResult.cs
- DetailsViewPagerRow.cs
- Scripts.cs
- GregorianCalendarHelper.cs
- TextAnchor.cs
- SQLDateTime.cs
- TemplatePagerField.cs
- XamlToRtfWriter.cs
- EntityDataSourceState.cs
- WebBrowserContainer.cs
- FactorySettingsElement.cs
- MimeReflector.cs
- StrokeRenderer.cs
- SQLMoney.cs
- SQLStringStorage.cs
- SelectorItemAutomationPeer.cs
- Pkcs9Attribute.cs
- HitTestResult.cs
- PixelFormat.cs
- DesignerActionUI.cs
- DictionaryEntry.cs
- HtmlInputPassword.cs
- ObjectTag.cs
- WorkflowRuntime.cs
- Stack.cs
- Renderer.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- ComponentSerializationService.cs
- CrossAppDomainChannel.cs
- sqlser.cs
- ControlParameter.cs
- JournalEntryStack.cs
- DataGridHelper.cs
- EmbossBitmapEffect.cs
- DataTableCollection.cs
- AnimatedTypeHelpers.cs
- DateTimeFormatInfoScanner.cs
- DescendentsWalker.cs
- NumericUpDownAccelerationCollection.cs
- VirtualPath.cs
- HttpServerVarsCollection.cs
- ConstraintStruct.cs
- DataColumn.cs
- HwndSourceParameters.cs
- Logging.cs
- TextBounds.cs
- Hyperlink.cs