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
- ConfigurationValue.cs
- UndoEngine.cs
- NativeRecognizer.cs
- ResourceManagerWrapper.cs
- WinEventQueueItem.cs
- BitmapCacheBrush.cs
- HandledMouseEvent.cs
- RankException.cs
- HTTPNotFoundHandler.cs
- ObjectConverter.cs
- _UncName.cs
- ApplicationServiceHelper.cs
- ContentElement.cs
- CharacterMetricsDictionary.cs
- WebPartPersonalization.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- XmlnsCache.cs
- SemanticKeyElement.cs
- ActiveXContainer.cs
- BinaryObjectInfo.cs
- XmlSchemaChoice.cs
- ImageKeyConverter.cs
- SplitterPanel.cs
- GPRECT.cs
- SmtpReplyReaderFactory.cs
- PasswordBox.cs
- HwndSubclass.cs
- FtpWebRequest.cs
- ViewManager.cs
- RadioButtonRenderer.cs
- ComplexObject.cs
- UserControl.cs
- QuotedPrintableStream.cs
- SvcMapFile.cs
- XmlAnyAttributeAttribute.cs
- AuthenticationModulesSection.cs
- StateChangeEvent.cs
- TextTreeTextBlock.cs
- BitmapPalettes.cs
- TransactionFlowOption.cs
- Transform3DGroup.cs
- ObjectListComponentEditor.cs
- OdbcInfoMessageEvent.cs
- HtmlContainerControl.cs
- PackageDigitalSignatureManager.cs
- SamlAssertion.cs
- SoapEnvelopeProcessingElement.cs
- XmlSerializerSection.cs
- SortedDictionary.cs
- ListItemParagraph.cs
- Menu.cs
- Sentence.cs
- TimersDescriptionAttribute.cs
- AssemblyInfo.cs
- LockCookie.cs
- IISUnsafeMethods.cs
- TextRangeBase.cs
- DbDataReader.cs
- Rfc4050KeyFormatter.cs
- Stacktrace.cs
- FileNameEditor.cs
- WsdlBuildProvider.cs
- ProxySimple.cs
- HeaderUtility.cs
- MessageSecurityVersionConverter.cs
- ResourcePermissionBase.cs
- UpDownBase.cs
- SelfSignedCertificate.cs
- PageRequestManager.cs
- Token.cs
- OLEDB_Enum.cs
- DelegateBodyWriter.cs
- ByValueEqualityComparer.cs
- MetadataItemEmitter.cs
- OdbcUtils.cs
- EndpointAddress.cs
- Attributes.cs
- ScriptingScriptResourceHandlerSection.cs
- WebServiceHandler.cs
- HeaderLabel.cs
- StatusBarItem.cs
- SocketStream.cs
- ReadOnlyCollectionBase.cs
- ToolZone.cs
- XmlSchemaAppInfo.cs
- CodeDOMProvider.cs
- WebSysDescriptionAttribute.cs
- StorageRoot.cs
- CodeFieldReferenceExpression.cs
- CopyNamespacesAction.cs
- ProtocolReflector.cs
- IsolatedStorageFileStream.cs
- Policy.cs
- BinaryObjectWriter.cs
- BufferAllocator.cs
- DataControlButton.cs
- XmlSchemaType.cs
- TextElementCollection.cs
- HttpContext.cs