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
- DataGridViewTextBoxEditingControl.cs
- Peer.cs
- CodeDirectionExpression.cs
- VerifyHashRequest.cs
- ConfigurationPermission.cs
- ObjectResult.cs
- VariableAction.cs
- MimeTypeMapper.cs
- ResourceDictionary.cs
- ExternalException.cs
- MarginCollapsingState.cs
- FloaterBaseParaClient.cs
- BaseConfigurationRecord.cs
- Encoding.cs
- _NestedMultipleAsyncResult.cs
- DataGridHelper.cs
- DataGridViewColumnStateChangedEventArgs.cs
- DataPointer.cs
- XmlDictionaryReaderQuotasElement.cs
- XmlnsDictionary.cs
- LineServicesRun.cs
- WebServiceHost.cs
- SerializationSectionGroup.cs
- RuntimeIdentifierPropertyAttribute.cs
- Imaging.cs
- DocumentCollection.cs
- DynamicILGenerator.cs
- LogicalTreeHelper.cs
- PageCodeDomTreeGenerator.cs
- StringValueSerializer.cs
- Directory.cs
- ColumnHeader.cs
- ReleaseInstanceMode.cs
- WindowsListViewGroupHelper.cs
- SamlAuthorizationDecisionClaimResource.cs
- ProtocolElementCollection.cs
- LinqDataSourceDeleteEventArgs.cs
- wmiutil.cs
- DependencyPropertyKey.cs
- diagnosticsswitches.cs
- UIElementHelper.cs
- XmlSchemaElement.cs
- AddInPipelineAttributes.cs
- CapacityStreamGeometryContext.cs
- Pen.cs
- PlatformNotSupportedException.cs
- GreenMethods.cs
- SafeTokenHandle.cs
- MailAddress.cs
- TransformerConfigurationWizardBase.cs
- CssTextWriter.cs
- ForeignKeyConstraint.cs
- TargetConverter.cs
- ColorConvertedBitmap.cs
- ValidationError.cs
- BaseServiceProvider.cs
- UnSafeCharBuffer.cs
- CodePageUtils.cs
- WindowsGraphics2.cs
- UnconditionalPolicy.cs
- ReferencedType.cs
- RectangleConverter.cs
- Thread.cs
- CompilerScopeManager.cs
- HealthMonitoringSection.cs
- DataBoundControlHelper.cs
- HttpResponseInternalWrapper.cs
- HttpRequestWrapper.cs
- BitmapEffectRenderDataResource.cs
- RTLAwareMessageBox.cs
- FigureParagraph.cs
- FamilyTypefaceCollection.cs
- SettingsProviderCollection.cs
- ResourceManagerWrapper.cs
- TextTrailingCharacterEllipsis.cs
- WindowsMenu.cs
- CharStorage.cs
- XmlProcessingInstruction.cs
- CompositionTarget.cs
- NotFiniteNumberException.cs
- IdleTimeoutMonitor.cs
- UnrecognizedAssertionsBindingElement.cs
- ToolStripRenderEventArgs.cs
- ProfileGroupSettings.cs
- MethodExpr.cs
- HostingEnvironmentException.cs
- ZipIOCentralDirectoryBlock.cs
- CallId.cs
- InternalConfigHost.cs
- SingleTagSectionHandler.cs
- ListViewDesigner.cs
- PrinterSettings.cs
- MessageContractMemberAttribute.cs
- DependencyPropertyKind.cs
- BufferedReceiveManager.cs
- CodeCompileUnit.cs
- StringResourceManager.cs
- ResourceType.cs
- CustomErrorsSection.cs
- XsdCachingReader.cs