Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- BitmapEffectDrawingContextWalker.cs
- DefaultProxySection.cs
- ErrorWebPart.cs
- StackOverflowException.cs
- SecurityElement.cs
- AppModelKnownContentFactory.cs
- _CacheStreams.cs
- CqlParserHelpers.cs
- CompensateDesigner.cs
- EqualityComparer.cs
- SourceItem.cs
- RequiredFieldValidator.cs
- NetworkInterface.cs
- Floater.cs
- TreeViewHitTestInfo.cs
- CancellationState.cs
- DependencyPropertyValueSerializer.cs
- UInt32Converter.cs
- XmlArrayItemAttribute.cs
- Point.cs
- Soap.cs
- EnvironmentPermission.cs
- WindowsRichEdit.cs
- TypedDataSourceCodeGenerator.cs
- DataControlFieldCollection.cs
- XmlDictionary.cs
- XmlDataSource.cs
- AddInAdapter.cs
- UniformGrid.cs
- SqlErrorCollection.cs
- SqlFacetAttribute.cs
- UnicodeEncoding.cs
- SortExpressionBuilder.cs
- RootProjectionNode.cs
- DBNull.cs
- MetadataUtilsSmi.cs
- validationstate.cs
- AnnouncementDispatcherAsyncResult.cs
- PolicyStatement.cs
- SizeAnimationBase.cs
- FilterQuery.cs
- RelationshipNavigation.cs
- EditorPartChrome.cs
- indexingfiltermarshaler.cs
- OledbConnectionStringbuilder.cs
- PageTheme.cs
- ValueProviderWrapper.cs
- TreePrinter.cs
- mongolianshape.cs
- ConsoleEntryPoint.cs
- DataSourceProvider.cs
- HighlightComponent.cs
- AttachedAnnotation.cs
- PermissionSetEnumerator.cs
- IsolatedStorage.cs
- Accessible.cs
- MetadataArtifactLoader.cs
- SQLInt16.cs
- EntityContainer.cs
- ServiceModelTimeSpanValidator.cs
- SemanticAnalyzer.cs
- XDRSchema.cs
- InputLanguageCollection.cs
- PostBackTrigger.cs
- TrustManager.cs
- UnmanagedMemoryAccessor.cs
- Configuration.cs
- XmlSerializableWriter.cs
- TextDecoration.cs
- PriorityBinding.cs
- TypeConstant.cs
- DatatypeImplementation.cs
- SkipQueryOptionExpression.cs
- FocusTracker.cs
- TreeNodeCollection.cs
- Vector3DCollectionValueSerializer.cs
- Error.cs
- UnsafeNativeMethods.cs
- ExportFileRequest.cs
- DayRenderEvent.cs
- FontFamily.cs
- Focus.cs
- DrawListViewSubItemEventArgs.cs
- SqlUnionizer.cs
- GenericPrincipal.cs
- TextServicesCompartment.cs
- SerializationInfoEnumerator.cs
- GridViewRowEventArgs.cs
- DataGridCaption.cs
- DependencyObjectProvider.cs
- Cursor.cs
- Encoder.cs
- AccessibleObject.cs
- ProfileProvider.cs
- Query.cs
- SpanIndex.cs
- FunctionDescription.cs
- ZoomingMessageFilter.cs
- KeyedHashAlgorithm.cs
- StylusCollection.cs