Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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
- SqlRowUpdatingEvent.cs
- XmlIgnoreAttribute.cs
- BufferedGraphicsManager.cs
- DataGridItem.cs
- ServiceDebugBehavior.cs
- SourceFileBuildProvider.cs
- DataGridViewElement.cs
- TrackingLocation.cs
- PointUtil.cs
- InsufficientMemoryException.cs
- RenderData.cs
- LoginCancelEventArgs.cs
- Rotation3D.cs
- InsufficientMemoryException.cs
- PropertyTabAttribute.cs
- SelectionEditor.cs
- SqlWorkflowPersistenceService.cs
- ContentPresenter.cs
- ObjectViewFactory.cs
- DropShadowBitmapEffect.cs
- CompiledAction.cs
- SourceElementsCollection.cs
- AnnotationAdorner.cs
- EditorPartCollection.cs
- SectionInput.cs
- ValidatorCompatibilityHelper.cs
- SqlDataSourceFilteringEventArgs.cs
- BitmapImage.cs
- TextWriterTraceListener.cs
- XmlReflectionMember.cs
- MessageDecoder.cs
- Win32MouseDevice.cs
- FtpWebResponse.cs
- ISAPIRuntime.cs
- SHA384Managed.cs
- ChangeInterceptorAttribute.cs
- RegexFCD.cs
- SplineKeyFrames.cs
- DSACryptoServiceProvider.cs
- SHA384.cs
- InputLanguage.cs
- RijndaelManaged.cs
- WebPartsSection.cs
- CoTaskMemUnicodeSafeHandle.cs
- AuthenticationModuleElement.cs
- NotifyIcon.cs
- ManualResetEvent.cs
- VariableAction.cs
- StylusShape.cs
- WindowsToolbarItemAsMenuItem.cs
- TimeoutStream.cs
- MachineKeyValidationConverter.cs
- DrawingCollection.cs
- MasterPageBuildProvider.cs
- MatrixUtil.cs
- FixedTextView.cs
- AdornerLayer.cs
- BaseCodeDomTreeGenerator.cs
- WebBrowserProgressChangedEventHandler.cs
- FormsAuthenticationEventArgs.cs
- DotExpr.cs
- DBDataPermissionAttribute.cs
- SymbolUsageManager.cs
- StrongNameKeyPair.cs
- SerializationStore.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- SafeHGlobalHandleCritical.cs
- SafeNativeMethods.cs
- ContainsSearchOperator.cs
- ConvertersCollection.cs
- Parameter.cs
- PenLineCapValidation.cs
- TouchesOverProperty.cs
- ViewService.cs
- ServiceParser.cs
- MarginCollapsingState.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- SymbolPair.cs
- SmiContextFactory.cs
- FacetDescriptionElement.cs
- OraclePermissionAttribute.cs
- TogglePatternIdentifiers.cs
- RecommendedAsConfigurableAttribute.cs
- __ComObject.cs
- _DisconnectOverlappedAsyncResult.cs
- SecurityUtils.cs
- ConfigXmlDocument.cs
- SafeNativeMethods.cs
- DocumentEventArgs.cs
- File.cs
- SymmetricAlgorithm.cs
- RadioButtonStandardAdapter.cs
- pingexception.cs
- InstallerTypeAttribute.cs
- TransformerInfoCollection.cs
- MinMaxParagraphWidth.cs
- _NegoStream.cs
- ManagedCodeMarkers.cs
- InfoCardUIAgent.cs
- ObjectKeyFrameCollection.cs