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
- AsynchronousChannel.cs
- GlobalEventManager.cs
- XmlSchemaAttributeGroup.cs
- RichTextBoxConstants.cs
- HostingEnvironmentSection.cs
- Token.cs
- ISSmlParser.cs
- PresentationAppDomainManager.cs
- CommonProperties.cs
- ObjectSet.cs
- TableParaClient.cs
- Internal.cs
- PassportAuthentication.cs
- HtmlInputImage.cs
- DataConnectionHelper.cs
- AtomEntry.cs
- ConnectionStringsExpressionBuilder.cs
- WebConvert.cs
- XmlDataSourceNodeDescriptor.cs
- SourceFileInfo.cs
- dataobject.cs
- ActivityAction.cs
- SoapSchemaImporter.cs
- MeasureItemEvent.cs
- ObjectRef.cs
- securitycriticaldata.cs
- ImageAnimator.cs
- EventLogEntryCollection.cs
- FileVersion.cs
- SpellerHighlightLayer.cs
- ChannelDispatcher.cs
- CompilerInfo.cs
- ParameterInfo.cs
- ObfuscationAttribute.cs
- HtmlEmptyTagControlBuilder.cs
- WorkflowServiceBehavior.cs
- TcpTransportElement.cs
- FactoryId.cs
- Preprocessor.cs
- StateManagedCollection.cs
- Queue.cs
- PeerNameRecordCollection.cs
- TableLayoutStyle.cs
- BaseCAMarshaler.cs
- ProtectedProviderSettings.cs
- DataListItem.cs
- CodeTypeConstructor.cs
- HotCommands.cs
- ClientUtils.cs
- Roles.cs
- BitmapMetadataBlob.cs
- TraceUtility.cs
- DataDocumentXPathNavigator.cs
- CaseStatement.cs
- propertytag.cs
- IFormattable.cs
- CustomErrorsSection.cs
- StyleSelector.cs
- DynamicEndpoint.cs
- XmlSchemaAnyAttribute.cs
- PagerStyle.cs
- PassportAuthenticationEventArgs.cs
- ImageListUtils.cs
- Enum.cs
- SID.cs
- HostUtils.cs
- RSAOAEPKeyExchangeFormatter.cs
- TableLayoutColumnStyleCollection.cs
- DoubleLinkList.cs
- ImageIndexConverter.cs
- IQueryable.cs
- XmlNavigatorStack.cs
- JournalEntryListConverter.cs
- PrintDialogDesigner.cs
- GlyphCache.cs
- WorkflowMessageEventArgs.cs
- EmissiveMaterial.cs
- PerformanceCounterLib.cs
- TrackBar.cs
- MemberMemberBinding.cs
- ConfigXmlSignificantWhitespace.cs
- MDIClient.cs
- Highlights.cs
- BrushMappingModeValidation.cs
- ServiceChannelFactory.cs
- Composition.cs
- BitmapEffectInputData.cs
- HwndPanningFeedback.cs
- DataGridViewColumnEventArgs.cs
- TaiwanLunisolarCalendar.cs
- _UncName.cs
- QuaternionAnimation.cs
- ProcessProtocolHandler.cs
- TemporaryBitmapFile.cs
- Pts.cs
- ProvidePropertyAttribute.cs
- altserialization.cs
- DataGridViewRowConverter.cs
- FilterElement.cs
- RightsManagementInformation.cs