Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / NumericExpr.cs / 1305376 / 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.
//
// [....]
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ClientBuildManager.cs
- ValueTable.cs
- XmlQueryOutput.cs
- FileDialogCustomPlace.cs
- RoleGroup.cs
- CursorConverter.cs
- TimelineGroup.cs
- SettingsPropertyCollection.cs
- TemplatingOptionsDialog.cs
- MenuRendererStandards.cs
- HandlerMappingMemo.cs
- TileBrush.cs
- RectAnimationBase.cs
- ObjectListFieldsPage.cs
- SqlDataSourceEnumerator.cs
- SimplePropertyEntry.cs
- Image.cs
- SoapElementAttribute.cs
- NetDataContractSerializer.cs
- CompilationPass2Task.cs
- PersonalizationStateQuery.cs
- PasswordPropertyTextAttribute.cs
- EndpointAddress.cs
- SmiEventSink_Default.cs
- DataSourceSelectArguments.cs
- Classification.cs
- IListConverters.cs
- InputDevice.cs
- CollectionConverter.cs
- initElementDictionary.cs
- CodeBlockBuilder.cs
- HttpCapabilitiesBase.cs
- XmlSchemaSet.cs
- ProfileManager.cs
- TreeNodeClickEventArgs.cs
- XslCompiledTransform.cs
- ServiceAuthorizationManager.cs
- Mappings.cs
- WorkflowQueueInfo.cs
- BrowserDefinitionCollection.cs
- ManipulationLogic.cs
- MSG.cs
- FunctionNode.cs
- ToolStripContainer.cs
- TextContainer.cs
- DrawingBrush.cs
- ReaderContextStackData.cs
- MetadataPropertyCollection.cs
- ValidationManager.cs
- IconConverter.cs
- SafeNativeMethodsMilCoreApi.cs
- ClientRuntimeConfig.cs
- OutputCacheEntry.cs
- ShadowGlyph.cs
- PropertyValueUIItem.cs
- QualificationDataAttribute.cs
- RowToFieldTransformer.cs
- ResourcesBuildProvider.cs
- HandleCollector.cs
- DefaultCommandConverter.cs
- SiteIdentityPermission.cs
- DelimitedListTraceListener.cs
- PropertyTabAttribute.cs
- TextTreeTextElementNode.cs
- EntityParameter.cs
- PathFigureCollectionValueSerializer.cs
- WriterOutput.cs
- PropertyPathWorker.cs
- KoreanCalendar.cs
- EdmSchemaError.cs
- TabControlToolboxItem.cs
- Keywords.cs
- UIElement3DAutomationPeer.cs
- FileDialogCustomPlacesCollection.cs
- DataBoundControlHelper.cs
- Geometry3D.cs
- WebBrowser.cs
- MenuCommands.cs
- TimelineGroup.cs
- EdmSchemaAttribute.cs
- ScrollData.cs
- DocumentViewerBase.cs
- DynamicMethod.cs
- CategoryNameCollection.cs
- InfocardExtendedInformationCollection.cs
- AuthorizationContext.cs
- XpsFilter.cs
- WebPartHelpVerb.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- UnsafeNativeMethodsMilCoreApi.cs
- HwndSourceParameters.cs
- filewebresponse.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- NumericUpDownAccelerationCollection.cs
- DialogResultConverter.cs
- CompoundFileIOPermission.cs
- CodeCompileUnit.cs
- CompoundFileReference.cs
- MouseWheelEventArgs.cs
- DbParameterHelper.cs