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
- ProvidersHelper.cs
- IPCCacheManager.cs
- PeerContact.cs
- ListViewDeletedEventArgs.cs
- XmlComment.cs
- EntityDataSourceSelectingEventArgs.cs
- FrameworkElementFactory.cs
- Assembly.cs
- XmlNotation.cs
- OutputScope.cs
- AsymmetricAlgorithm.cs
- QueuePathEditor.cs
- Win32MouseDevice.cs
- RouteParameter.cs
- QilFactory.cs
- coordinator.cs
- StatusBarDesigner.cs
- XmlILAnnotation.cs
- GlyphsSerializer.cs
- ListDataHelper.cs
- TreeNodeSelectionProcessor.cs
- SendMailErrorEventArgs.cs
- Configuration.cs
- RemotingAttributes.cs
- TrustLevelCollection.cs
- ToolStripOverflowButton.cs
- TransformerConfigurationWizardBase.cs
- SimpleMailWebEventProvider.cs
- DCSafeHandle.cs
- DependencySource.cs
- ValueUtilsSmi.cs
- EntryIndex.cs
- CroppedBitmap.cs
- XmlSchemaSimpleContent.cs
- DataGridViewCellConverter.cs
- adornercollection.cs
- XmlSerializationWriter.cs
- Encoding.cs
- ClientCultureInfo.cs
- RightsManagementLicense.cs
- BlobPersonalizationState.cs
- RichTextBoxConstants.cs
- EncoderFallback.cs
- MetadataCacheItem.cs
- RefType.cs
- NativeMethodsCLR.cs
- SchemaMapping.cs
- PrintingPermission.cs
- TemplateBamlTreeBuilder.cs
- Sentence.cs
- WindowShowOrOpenTracker.cs
- InvokeProviderWrapper.cs
- XmlSerializerVersionAttribute.cs
- Span.cs
- XmlConvert.cs
- prefixendpointaddressmessagefilter.cs
- ResourceDescriptionAttribute.cs
- _SafeNetHandles.cs
- ReachDocumentReferenceCollectionSerializer.cs
- SendKeys.cs
- CurrentChangingEventArgs.cs
- Quad.cs
- ClientSideQueueItem.cs
- TypeUtil.cs
- Helper.cs
- TranslateTransform3D.cs
- Lease.cs
- HttpResponse.cs
- FormsIdentity.cs
- GridViewUpdateEventArgs.cs
- BitmapSource.cs
- GACMembershipCondition.cs
- TrimSurroundingWhitespaceAttribute.cs
- PropertyDescriptorGridEntry.cs
- ArrayConverter.cs
- FormViewCommandEventArgs.cs
- MergeFilterQuery.cs
- RegexTree.cs
- GPRECTF.cs
- PointConverter.cs
- InputReport.cs
- PinnedBufferMemoryStream.cs
- SqlProcedureAttribute.cs
- BufferedStream.cs
- PngBitmapDecoder.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- UIElementParaClient.cs
- OlePropertyStructs.cs
- METAHEADER.cs
- KnownColorTable.cs
- ClassHandlersStore.cs
- MemoryFailPoint.cs
- Brush.cs
- NotFiniteNumberException.cs
- XmlAtomicValue.cs
- HtmlInputSubmit.cs
- XmlEncodedRawTextWriter.cs
- Event.cs
- HwndHostAutomationPeer.cs
- ResourceProviderFactory.cs