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
- SchemaTableColumn.cs
- GeneralTransform3DTo2D.cs
- DataGridViewComboBoxCell.cs
- AssemblyResolver.cs
- Timer.cs
- GenericIdentity.cs
- DocumentAutomationPeer.cs
- AnimationClockResource.cs
- TextDpi.cs
- Task.cs
- CqlLexerHelpers.cs
- SingleObjectCollection.cs
- DataConnectionHelper.cs
- X500Name.cs
- ImageEditor.cs
- DocumentCollection.cs
- GeometryHitTestParameters.cs
- ReliableDuplexSessionChannel.cs
- ErrorRuntimeConfig.cs
- DocumentGrid.cs
- DataGridViewTopRowAccessibleObject.cs
- login.cs
- sqlpipe.cs
- ValidationHelper.cs
- WebPartDisplayModeEventArgs.cs
- DataSource.cs
- WebPartConnectionsConnectVerb.cs
- HandlerMappingMemo.cs
- InvokeSchedule.cs
- TokenBasedSet.cs
- SmiEventSink_Default.cs
- DetailsViewDeleteEventArgs.cs
- DbProviderFactories.cs
- LoadWorkflowAsyncResult.cs
- ComAdminInterfaces.cs
- ObjectItemAttributeAssemblyLoader.cs
- CounterCreationDataConverter.cs
- EventRoute.cs
- unsafenativemethodsother.cs
- ConstraintEnumerator.cs
- IDQuery.cs
- GridItemCollection.cs
- UIAgentAsyncBeginRequest.cs
- LocalizeDesigner.cs
- AsymmetricKeyExchangeFormatter.cs
- LassoSelectionBehavior.cs
- Panel.cs
- SocketAddress.cs
- HtmlInputText.cs
- DataColumnMapping.cs
- XmlSchemaCollection.cs
- GZipStream.cs
- ResourceCategoryAttribute.cs
- MarshalByValueComponent.cs
- MenuItemCollection.cs
- UnaryNode.cs
- URLString.cs
- AlternateView.cs
- RefExpr.cs
- DataGridToolTip.cs
- TimeoutException.cs
- KerberosTicketHashIdentifierClause.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- TreeViewEvent.cs
- ServiceProviders.cs
- CodeGen.cs
- FormViewInsertEventArgs.cs
- SqlClientPermission.cs
- TextFindEngine.cs
- Util.cs
- PolyQuadraticBezierSegment.cs
- SiteMapDataSourceView.cs
- CssClassPropertyAttribute.cs
- PersistenceProviderDirectory.cs
- ContextStack.cs
- DoubleLinkList.cs
- UrlMapping.cs
- TranslateTransform.cs
- ResourcesBuildProvider.cs
- CustomAttributeFormatException.cs
- SoapParser.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- JoinCqlBlock.cs
- SplashScreenNativeMethods.cs
- BuiltInExpr.cs
- SymbolUsageManager.cs
- Compiler.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- GregorianCalendar.cs
- ServicesUtilities.cs
- BatchStream.cs
- PresentationUIStyleResources.cs
- ScrollPattern.cs
- SplineKeyFrames.cs
- ListItemDetailViewAttribute.cs
- SerializationEventsCache.cs
- ValidationErrorCollection.cs
- MetadataItemSerializer.cs
- InvalidPrinterException.cs
- EnumBuilder.cs