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
- OracleBFile.cs
- Merger.cs
- ReadOnlyDictionary.cs
- ReverseInheritProperty.cs
- XmlParserContext.cs
- XmlDataSourceView.cs
- IODescriptionAttribute.cs
- EmptyQuery.cs
- BitmapEffectGroup.cs
- selecteditemcollection.cs
- IntSecurity.cs
- ReferenceEqualityComparer.cs
- EventData.cs
- Token.cs
- StringValidator.cs
- TraceHandlerErrorFormatter.cs
- SoapCommonClasses.cs
- CheckBoxField.cs
- KeysConverter.cs
- XmlSchemaCompilationSettings.cs
- WmfPlaceableFileHeader.cs
- CheckBox.cs
- Camera.cs
- OutputCacheSection.cs
- Privilege.cs
- FunctionQuery.cs
- DataReceivedEventArgs.cs
- SectionXmlInfo.cs
- ILGenerator.cs
- EditorZoneBase.cs
- RowVisual.cs
- ResumeStoryboard.cs
- coordinatorscratchpad.cs
- FrameworkReadOnlyPropertyMetadata.cs
- SizeConverter.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- KeyValueConfigurationCollection.cs
- DataRecordInternal.cs
- CachedBitmap.cs
- UnmanagedMemoryStream.cs
- KeyGesture.cs
- XmlnsDefinitionAttribute.cs
- LineServicesCallbacks.cs
- ButtonField.cs
- StackOverflowException.cs
- Stylesheet.cs
- ConfigXmlElement.cs
- DbDataAdapter.cs
- MarkupWriter.cs
- mda.cs
- DataGridViewTopLeftHeaderCell.cs
- HttpContextBase.cs
- ControlBuilderAttribute.cs
- Clock.cs
- ZoomPercentageConverter.cs
- DiscoveryServerProtocol.cs
- XmlSubtreeReader.cs
- DataColumnPropertyDescriptor.cs
- Pts.cs
- WebPartMinimizeVerb.cs
- EdmMember.cs
- DelegateBodyWriter.cs
- EditingMode.cs
- OleTxTransaction.cs
- LocatorManager.cs
- OneWayElement.cs
- DBSqlParserTable.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- TextDecoration.cs
- RuleValidation.cs
- DelegateBodyWriter.cs
- BuilderPropertyEntry.cs
- PropertyReferenceExtension.cs
- GridViewCellAutomationPeer.cs
- WindowsGrip.cs
- NamespaceExpr.cs
- EUCJPEncoding.cs
- TextLineResult.cs
- ActivityExecutor.cs
- DataRowView.cs
- FileDialog_Vista.cs
- RenderDataDrawingContext.cs
- CodeMemberProperty.cs
- XmlDigitalSignatureProcessor.cs
- ObjectIDGenerator.cs
- GlobalAllocSafeHandle.cs
- ApplicationFileCodeDomTreeGenerator.cs
- TextBox.cs
- JsonFormatWriterGenerator.cs
- ConnectionInterfaceCollection.cs
- ApplicationSettingsBase.cs
- XmlSchemaAnyAttribute.cs
- EntityDataSourceEntityTypeFilterItem.cs
- CacheDict.cs
- DataGridViewToolTip.cs
- RequestReplyCorrelator.cs
- SecurityPolicySection.cs
- DomainUpDown.cs
- ReferentialConstraint.cs
- Calendar.cs