Code:
/ FX-1434 / FX-1434 / 1.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
- initElementDictionary.cs
- PassportPrincipal.cs
- WebPartVerbCollection.cs
- CheckableControlBaseAdapter.cs
- COMException.cs
- MetadataArtifactLoaderResource.cs
- WindowsFormsHostAutomationPeer.cs
- ItemList.cs
- TextEffectResolver.cs
- PlainXmlSerializer.cs
- SessionIDManager.cs
- Converter.cs
- DataGridViewComboBoxEditingControl.cs
- InputLanguage.cs
- MsmqOutputMessage.cs
- ReversePositionQuery.cs
- ToolStripItemTextRenderEventArgs.cs
- TraceHandlerErrorFormatter.cs
- configsystem.cs
- EditingScope.cs
- NetTcpSecurityElement.cs
- DataGridTextBoxColumn.cs
- DefaultValueConverter.cs
- SegmentInfo.cs
- BooleanStorage.cs
- AddInToken.cs
- DebugView.cs
- CmsUtils.cs
- TransformPatternIdentifiers.cs
- ColumnHeaderConverter.cs
- XMLDiffLoader.cs
- MatrixTransform.cs
- SRDisplayNameAttribute.cs
- IriParsingElement.cs
- WebExceptionStatus.cs
- WmlFormAdapter.cs
- BaseAsyncResult.cs
- MSAAWinEventWrap.cs
- MiniConstructorInfo.cs
- ClientRuntimeConfig.cs
- JsonDataContract.cs
- TraceHandlerErrorFormatter.cs
- EndpointDispatcherTable.cs
- QueryStringHandler.cs
- DataBindingExpressionBuilder.cs
- CFGGrammar.cs
- DataGridPreparingCellForEditEventArgs.cs
- X509Certificate2.cs
- ProxyManager.cs
- MultiByteCodec.cs
- DataBindingExpressionBuilder.cs
- SettingsPropertyValue.cs
- LogReserveAndAppendState.cs
- ControlPaint.cs
- String.cs
- TextAutomationPeer.cs
- RowUpdatedEventArgs.cs
- webbrowsersite.cs
- CriticalHandle.cs
- ExpressionContext.cs
- XmlEncodedRawTextWriter.cs
- XmlResolver.cs
- SqlGenericUtil.cs
- FixedSOMLineCollection.cs
- VectorCollectionConverter.cs
- RawUIStateInputReport.cs
- Control.cs
- QueueProcessor.cs
- WinInet.cs
- ScaleTransform.cs
- StorageMappingItemLoader.cs
- Registry.cs
- DetailsViewInsertEventArgs.cs
- InvokePatternIdentifiers.cs
- TemplateControlParser.cs
- DictionaryTraceRecord.cs
- ClientConvert.cs
- JsonCollectionDataContract.cs
- ExceptionUtil.cs
- DashStyle.cs
- EntityViewContainer.cs
- HtmlPanelAdapter.cs
- DataGridViewIntLinkedList.cs
- SiteOfOriginContainer.cs
- DtdParser.cs
- BuildProviderCollection.cs
- querybuilder.cs
- TextEditorParagraphs.cs
- NetNamedPipeBindingCollectionElement.cs
- MsmqHostedTransportManager.cs
- ServicePerformanceCounters.cs
- WindowsRichEdit.cs
- ClonableStack.cs
- WmlValidatorAdapter.cs
- UInt64Storage.cs
- AccessDataSourceWizardForm.cs
- SettingsPropertyValue.cs
- DispatcherObject.cs
- NonSerializedAttribute.cs
- EditorServiceContext.cs