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
- RC2CryptoServiceProvider.cs
- TreeNodeSelectionProcessor.cs
- ToolStripCustomTypeDescriptor.cs
- RevocationPoint.cs
- StructureChangedEventArgs.cs
- DataGridViewRowStateChangedEventArgs.cs
- WebBrowser.cs
- Parser.cs
- IndexerNameAttribute.cs
- LinqDataSourceUpdateEventArgs.cs
- DBSqlParserTable.cs
- WebPartCatalogCloseVerb.cs
- RichListBox.cs
- LogicalChannelCollection.cs
- UnsafeNativeMethods.cs
- RequestQueue.cs
- ArraySegment.cs
- RegexGroupCollection.cs
- AttributeQuery.cs
- Marshal.cs
- ModelPropertyCollectionImpl.cs
- StreamInfo.cs
- SqlInternalConnectionSmi.cs
- OperationCanceledException.cs
- RegexMatchCollection.cs
- UnknownWrapper.cs
- Context.cs
- RealProxy.cs
- TypeForwardedToAttribute.cs
- CultureInfo.cs
- WebPartMenu.cs
- OleDbError.cs
- XmlDesigner.cs
- LocatorGroup.cs
- MailSettingsSection.cs
- PeerObject.cs
- RegistryConfigurationProvider.cs
- BaseValidator.cs
- ProfileService.cs
- TabPage.cs
- precedingquery.cs
- ParameterInfo.cs
- DataPointer.cs
- ComponentManagerBroker.cs
- BufferBuilder.cs
- Color.cs
- WhitespaceRuleLookup.cs
- DataDocumentXPathNavigator.cs
- ReflectionHelper.cs
- BitmapCodecInfo.cs
- LogicalExpressionEditor.cs
- RegexCapture.cs
- HttpException.cs
- StyleConverter.cs
- ResXFileRef.cs
- handlecollector.cs
- RawTextInputReport.cs
- PrinterResolution.cs
- Block.cs
- BaseParagraph.cs
- CodeThrowExceptionStatement.cs
- ExtensibleClassFactory.cs
- Sql8ConformanceChecker.cs
- DoubleUtil.cs
- VisualTarget.cs
- SamlDelegatingWriter.cs
- cookiecollection.cs
- NamedPipeConnectionPoolSettingsElement.cs
- DesignerAutoFormatCollection.cs
- EnumBuilder.cs
- ISAPIApplicationHost.cs
- RNGCryptoServiceProvider.cs
- ToolStripDropDownClosedEventArgs.cs
- Hashtable.cs
- StorageEntityTypeMapping.cs
- ValidatingReaderNodeData.cs
- QuaternionConverter.cs
- SharedPerformanceCounter.cs
- DataSetViewSchema.cs
- SvcMapFile.cs
- __ComObject.cs
- WinEventWrap.cs
- ServiceNameCollection.cs
- CharEntityEncoderFallback.cs
- ResourceType.cs
- TextServicesDisplayAttribute.cs
- RulePatternOps.cs
- ToolStripDropDownMenu.cs
- Internal.cs
- WbmpConverter.cs
- PointKeyFrameCollection.cs
- ObjectHelper.cs
- ExpressionDumper.cs
- ConstraintConverter.cs
- XmlSerializerAssemblyAttribute.cs
- XamlToRtfWriter.cs
- StrokeNodeData.cs
- Update.cs
- DataGridPagingPage.cs
- PropertiesTab.cs