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
- XmlSchemaAnnotation.cs
- KeyManager.cs
- XmlRawWriterWrapper.cs
- PartManifestEntry.cs
- XmlSchemaComplexContentExtension.cs
- DataRecordInfo.cs
- PerformanceCounterNameAttribute.cs
- BorderGapMaskConverter.cs
- dsa.cs
- ApplicationServiceManager.cs
- ThicknessAnimation.cs
- TcpClientChannel.cs
- AccessText.cs
- JavaScriptObjectDeserializer.cs
- FlowDocument.cs
- IpcChannel.cs
- InitializerFacet.cs
- ServiceModelConfigurationSectionCollection.cs
- CodeDirectoryCompiler.cs
- UserNameSecurityToken.cs
- X509ChainPolicy.cs
- SafeFileMapViewHandle.cs
- ValidationErrorEventArgs.cs
- ResetableIterator.cs
- VerificationException.cs
- ValidationErrorCollection.cs
- SimpleTextLine.cs
- EdmEntityTypeAttribute.cs
- ReaderOutput.cs
- OdbcConnectionStringbuilder.cs
- HexParser.cs
- WebPartDisplayModeCancelEventArgs.cs
- RtfToXamlLexer.cs
- QilInvokeEarlyBound.cs
- ZipIOLocalFileBlock.cs
- ThemeableAttribute.cs
- DataGridViewRowStateChangedEventArgs.cs
- InternalBufferManager.cs
- StrongBox.cs
- KnownTypeAttribute.cs
- DataGrid.cs
- CrossAppDomainChannel.cs
- ToolStripContentPanelRenderEventArgs.cs
- XsdDateTime.cs
- PasswordBox.cs
- OdbcParameterCollection.cs
- TextEditorCharacters.cs
- DrawingCollection.cs
- PropertyStore.cs
- BuildProviderAppliesToAttribute.cs
- XmlBinaryWriter.cs
- AutomationElement.cs
- HandlerFactoryCache.cs
- PropertyCollection.cs
- TabControlEvent.cs
- NamedPermissionSet.cs
- XmlSchemas.cs
- RelOps.cs
- GroupDescription.cs
- TextFindEngine.cs
- DesignerForm.cs
- TargetConverter.cs
- SortKey.cs
- AnimationClock.cs
- ToolZone.cs
- EpmSyndicationContentDeSerializer.cs
- Pair.cs
- ObjectComplexPropertyMapping.cs
- COM2PictureConverter.cs
- DefaultEvaluationContext.cs
- ObjectNotFoundException.cs
- ModuleBuilder.cs
- ResourcePermissionBase.cs
- AssociationTypeEmitter.cs
- UIElement3D.cs
- RowSpanVector.cs
- DataViewSettingCollection.cs
- DynamicMethod.cs
- InkCanvas.cs
- InputBuffer.cs
- HttpRuntimeSection.cs
- MetadataArtifactLoader.cs
- DebugInfoGenerator.cs
- DoubleLinkListEnumerator.cs
- SafeFileMappingHandle.cs
- SqlResolver.cs
- ProvideValueServiceProvider.cs
- StylusPointProperty.cs
- EdmMember.cs
- MetadataException.cs
- TreeIterator.cs
- EnterpriseServicesHelper.cs
- ImageConverter.cs
- OracleParameterCollection.cs
- EventWaitHandleSecurity.cs
- NullPackagingPolicy.cs
- TextRenderer.cs
- Column.cs
- NodeFunctions.cs
- ListViewPagedDataSource.cs