Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / Internal / NumericExpr.cs / 1 / NumericExpr.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;
internal sealed class NumericExpr : ValueQuery {
private Operator.Op op;
private Query opnd1;
private Query opnd2;
public NumericExpr(Operator.Op op, Query opnd1, Query opnd2) {
Debug.Assert(
op == Operator.Op.PLUS || op == Operator.Op.MINUS ||
op == Operator.Op.MUL || op == Operator.Op.DIV ||
op == Operator.Op.MOD
);
Debug.Assert(opnd1 != null && opnd2 != null);
if (opnd1.StaticType != XPathResultType.Number) {
opnd1 = new NumberFunctions(Function.FunctionType.FuncNumber, opnd1);
}
if (opnd2.StaticType != XPathResultType.Number) {
opnd2 = new NumberFunctions(Function.FunctionType.FuncNumber, opnd2);
}
this.op = op;
this.opnd1 = opnd1;
this.opnd2 = opnd2;
}
private NumericExpr(NumericExpr other) : base(other) {
this.op = other.op;
this.opnd1 = Clone(other.opnd1);
this.opnd2 = Clone(other.opnd2);
}
public override void SetXsltContext(XsltContext context){
opnd1.SetXsltContext(context);
opnd2.SetXsltContext(context);
}
public override object Evaluate(XPathNodeIterator nodeIterator) {
return GetValue(this.op,
XmlConvert.ToXPathDouble(opnd1.Evaluate(nodeIterator)),
XmlConvert.ToXPathDouble(opnd2.Evaluate(nodeIterator))
);
}
private static double GetValue(Operator.Op op, double n1, double n2) {
Debug.Assert(op == Operator.Op.PLUS || op == Operator.Op.MINUS || op == Operator.Op.MOD || op == Operator.Op.DIV || op == Operator.Op.MUL);
switch (op) {
case Operator.Op.PLUS : return n1 + n2;
case Operator.Op.MINUS : return n1 - n2;
case Operator.Op.MOD : return n1 % n2;
case Operator.Op.DIV : return n1 / n2;
case Operator.Op.MUL : return n1 * n2;
}
return 0;
}
public override XPathResultType StaticType { get { return XPathResultType.Number; } }
public override XPathNodeIterator Clone() { return new NumericExpr(this); }
public override void PrintQuery(XmlWriter w) {
w.WriteStartElement(this.GetType().Name);
w.WriteAttributeString("op", op.ToString());
opnd1.PrintQuery(w);
opnd2.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
- ScriptReferenceBase.cs
- PagesSection.cs
- ReadOnlyNameValueCollection.cs
- CachedFontFace.cs
- DataGridItemEventArgs.cs
- XMLDiffLoader.cs
- SqlBuffer.cs
- GeneralTransform2DTo3DTo2D.cs
- WebSysDescriptionAttribute.cs
- DataMemberListEditor.cs
- Point4D.cs
- CqlParserHelpers.cs
- PropertyPathConverter.cs
- RtfToken.cs
- CodeTypeReferenceExpression.cs
- MetadataSerializer.cs
- RectAnimationBase.cs
- PersonalizationDictionary.cs
- HotSpot.cs
- ContractHandle.cs
- HierarchicalDataBoundControl.cs
- ElementInit.cs
- OneOfElement.cs
- DbInsertCommandTree.cs
- DesignParameter.cs
- Visitor.cs
- AnimationStorage.cs
- ComponentResourceKey.cs
- exports.cs
- SmiEventStream.cs
- BrushMappingModeValidation.cs
- HttpProfileGroupBase.cs
- EntityDataSourceQueryBuilder.cs
- DocumentApplicationJournalEntry.cs
- InArgument.cs
- DbConnectionInternal.cs
- WebBaseEventKeyComparer.cs
- WebPartDisplayMode.cs
- SplitterDesigner.cs
- XmlQueryOutput.cs
- EventRecord.cs
- GACMembershipCondition.cs
- ExtendedProtectionPolicyElement.cs
- BitArray.cs
- ParseChildrenAsPropertiesAttribute.cs
- DataSetUtil.cs
- WindowsFormsSectionHandler.cs
- DataPagerFieldItem.cs
- ImageFormat.cs
- Ref.cs
- DuplexChannelBinder.cs
- ValueUtilsSmi.cs
- HttpContextServiceHost.cs
- TransformedBitmap.cs
- Header.cs
- StreamingContext.cs
- MachineKeySection.cs
- GenericPrincipal.cs
- Trustee.cs
- XmlComplianceUtil.cs
- ColumnHeader.cs
- DragEventArgs.cs
- HttpHandlerActionCollection.cs
- ServiceMemoryGates.cs
- DictionarySurrogate.cs
- ServiceXNameTypeConverter.cs
- CultureTable.cs
- BufferModeSettings.cs
- BufferModeSettings.cs
- StateManagedCollection.cs
- Script.cs
- TransformValueSerializer.cs
- EmptyEnumerator.cs
- ProxySimple.cs
- SchemaEntity.cs
- DocumentScope.cs
- SystemIcmpV4Statistics.cs
- BufferedGraphics.cs
- TraceUtils.cs
- AudioBase.cs
- SafeThreadHandle.cs
- MasterPageBuildProvider.cs
- EventWaitHandleSecurity.cs
- ShutDownListener.cs
- TableItemPatternIdentifiers.cs
- ToolStripSettings.cs
- Ops.cs
- ProfileParameter.cs
- BitStack.cs
- SqlNodeAnnotation.cs
- WeakHashtable.cs
- Control.cs
- PropertyRef.cs
- BoundsDrawingContextWalker.cs
- NameValuePair.cs
- SpotLight.cs
- TreeViewImageKeyConverter.cs
- SolidBrush.cs
- LayoutTable.cs
- NameValuePermission.cs