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
- VarInfo.cs
- FlowNode.cs
- MenuItem.cs
- EmptyControlCollection.cs
- SortedSetDebugView.cs
- FastPropertyAccessor.cs
- CompModSwitches.cs
- TimerElapsedEvenArgs.cs
- SynthesizerStateChangedEventArgs.cs
- Size.cs
- Scripts.cs
- InvocationExpression.cs
- OleDbTransaction.cs
- DataBindingExpressionBuilder.cs
- MouseCaptureWithinProperty.cs
- EventLevel.cs
- DrawListViewSubItemEventArgs.cs
- StrokeNodeEnumerator.cs
- SafeSerializationManager.cs
- URLMembershipCondition.cs
- DoubleAnimation.cs
- ReaderWriterLockWrapper.cs
- WindowsContainer.cs
- InputScope.cs
- PersonalizationState.cs
- PerformanceCounterPermissionEntryCollection.cs
- ScriptControl.cs
- GridViewDeleteEventArgs.cs
- AnonymousIdentificationModule.cs
- WrappedReader.cs
- ComponentDispatcher.cs
- ListSourceHelper.cs
- FixedSOMGroup.cs
- EntityDataSourceViewSchema.cs
- VisualTransition.cs
- ExpressionBindingCollection.cs
- SemaphoreSecurity.cs
- TemplateBamlTreeBuilder.cs
- PanelStyle.cs
- LoopExpression.cs
- DocumentApplicationJournalEntry.cs
- SQLDouble.cs
- FacetEnabledSchemaElement.cs
- GeometryHitTestResult.cs
- DummyDataSource.cs
- Matrix3DConverter.cs
- GridViewDeleteEventArgs.cs
- TypeConverterHelper.cs
- AutoGeneratedField.cs
- ResumeStoryboard.cs
- CodeGen.cs
- LambdaCompiler.Address.cs
- InstanceDescriptor.cs
- CheckBox.cs
- RequestBringIntoViewEventArgs.cs
- ObjectDataSourceChooseMethodsPanel.cs
- HierarchicalDataSourceControl.cs
- XMLSchema.cs
- RectAnimationClockResource.cs
- InvariantComparer.cs
- AppliedDeviceFiltersEditor.cs
- UriTemplateDispatchFormatter.cs
- OleDbRowUpdatingEvent.cs
- BridgeDataReader.cs
- ProfileManager.cs
- AnonymousIdentificationSection.cs
- ServiceOperation.cs
- RichTextBox.cs
- SaveFileDialog.cs
- SqlCommandAsyncResult.cs
- SqlNotificationEventArgs.cs
- OneOfScalarConst.cs
- DataPointer.cs
- TypeTypeConverter.cs
- SafeNativeMethods.cs
- DecoderBestFitFallback.cs
- WindowsFormsSynchronizationContext.cs
- CustomErrorsSection.cs
- Page.cs
- DirectionalLight.cs
- WebBrowser.cs
- Vector3dCollection.cs
- NetworkInterface.cs
- AbstractDataSvcMapFileLoader.cs
- Monitor.cs
- DateTimeFormatInfoScanner.cs
- ISFTagAndGuidCache.cs
- ExportOptions.cs
- ShaderEffect.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- SymbolEqualComparer.cs
- DependentList.cs
- Size.cs
- LexicalChunk.cs
- PropertyTab.cs
- UserUseLicenseDictionaryLoader.cs
- ManagedCodeMarkers.cs
- FontDialog.cs
- XDeferredAxisSource.cs
- CodeGroup.cs