Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / XPath / Internal / XPathAncestorQuery.cs / 1 / XPathAncestorQuery.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.Collections.Generic;
internal sealed class XPathAncestorQuery : CacheAxisQuery {
private bool matchSelf;
public XPathAncestorQuery(Query qyInput, string name, string prefix, XPathNodeType typeTest, bool matchSelf) : base(qyInput, name, prefix, typeTest) {
this.matchSelf = matchSelf;
}
private XPathAncestorQuery(XPathAncestorQuery other) : base(other) {
this.matchSelf = other.matchSelf;
}
public override object Evaluate(XPathNodeIterator context) {
base.Evaluate(context);
XPathNavigator ancestor = null;
XPathNavigator input;
while ((input = qyInput.Advance()) != null) {
if (matchSelf) {
if (matches(input)) {
if (!Insert(outputBuffer, input)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
continue;
}
}
}
if (ancestor == null || ! ancestor.MoveTo(input)) {
ancestor = input.Clone();
}
while (ancestor.MoveToParent()) {
if (matches(ancestor)) {
if (!Insert(outputBuffer, ancestor)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
break;
}
}
}
}
return this;
}
public override XPathNodeIterator Clone() { return new XPathAncestorQuery(this); }
public override int CurrentPosition { get { return outputBuffer.Count - count + 1; } }
public override QueryProps Properties { get { return base.Properties | QueryProps.Reverse; } }
public override void PrintQuery(XmlWriter w) {
w.WriteStartElement(this.GetType().Name);
if (matchSelf) {
w.WriteAttributeString("self", "yes");
}
if (NameTest) {
w.WriteAttributeString("name", Prefix.Length != 0 ? Prefix + ':' + Name : Name);
}
if (TypeTest != XPathNodeType.Element) {
w.WriteAttributeString("nodeType", TypeTest.ToString());
}
qyInput.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.Collections.Generic;
internal sealed class XPathAncestorQuery : CacheAxisQuery {
private bool matchSelf;
public XPathAncestorQuery(Query qyInput, string name, string prefix, XPathNodeType typeTest, bool matchSelf) : base(qyInput, name, prefix, typeTest) {
this.matchSelf = matchSelf;
}
private XPathAncestorQuery(XPathAncestorQuery other) : base(other) {
this.matchSelf = other.matchSelf;
}
public override object Evaluate(XPathNodeIterator context) {
base.Evaluate(context);
XPathNavigator ancestor = null;
XPathNavigator input;
while ((input = qyInput.Advance()) != null) {
if (matchSelf) {
if (matches(input)) {
if (!Insert(outputBuffer, input)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
continue;
}
}
}
if (ancestor == null || ! ancestor.MoveTo(input)) {
ancestor = input.Clone();
}
while (ancestor.MoveToParent()) {
if (matches(ancestor)) {
if (!Insert(outputBuffer, ancestor)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
break;
}
}
}
}
return this;
}
public override XPathNodeIterator Clone() { return new XPathAncestorQuery(this); }
public override int CurrentPosition { get { return outputBuffer.Count - count + 1; } }
public override QueryProps Properties { get { return base.Properties | QueryProps.Reverse; } }
public override void PrintQuery(XmlWriter w) {
w.WriteStartElement(this.GetType().Name);
if (matchSelf) {
w.WriteAttributeString("self", "yes");
}
if (NameTest) {
w.WriteAttributeString("name", Prefix.Length != 0 ? Prefix + ':' + Name : Name);
}
if (TypeTest != XPathNodeType.Element) {
w.WriteAttributeString("nodeType", TypeTest.ToString());
}
qyInput.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
- DecoratedNameAttribute.cs
- OrderedDictionaryStateHelper.cs
- WindowsGraphicsCacheManager.cs
- SQLUtility.cs
- ApplicationCommands.cs
- DesignerValidatorAdapter.cs
- FieldToken.cs
- initElementDictionary.cs
- Storyboard.cs
- RelationalExpressions.cs
- GACMembershipCondition.cs
- ChildrenQuery.cs
- ProfessionalColors.cs
- SignedInfo.cs
- TableAutomationPeer.cs
- XmlSchemas.cs
- PageThemeParser.cs
- RSAOAEPKeyExchangeFormatter.cs
- ApplicationTrust.cs
- OperatingSystem.cs
- SoapEnvelopeProcessingElement.cs
- InternalsVisibleToAttribute.cs
- HostingEnvironmentSection.cs
- SafeTimerHandle.cs
- EmbeddedMailObject.cs
- RequestNavigateEventArgs.cs
- UIHelper.cs
- DispatcherExceptionEventArgs.cs
- FilteredXmlReader.cs
- CurrentChangingEventArgs.cs
- HitTestParameters.cs
- AdRotatorDesigner.cs
- TreeSet.cs
- TabItem.cs
- XMLDiffLoader.cs
- InputScope.cs
- RequestSecurityTokenResponse.cs
- SqlCommand.cs
- SoapDocumentServiceAttribute.cs
- DesignerProperties.cs
- CollectionConverter.cs
- UInt16Storage.cs
- ContainerParaClient.cs
- PersonalizationEntry.cs
- BamlStream.cs
- DataControlCommands.cs
- NotifyIcon.cs
- ProfileElement.cs
- FullTrustAssembliesSection.cs
- StatusBarPanelClickEvent.cs
- PageCatalogPartDesigner.cs
- FlowDocumentView.cs
- COMException.cs
- KeysConverter.cs
- DelayedRegex.cs
- WebSysDisplayNameAttribute.cs
- UIElement.cs
- DictionaryBase.cs
- ConnectionStringsExpressionBuilder.cs
- StatusStrip.cs
- Itemizer.cs
- ZipIOExtraFieldPaddingElement.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- EditCommandColumn.cs
- X509Certificate2Collection.cs
- Symbol.cs
- PanelDesigner.cs
- ParserContext.cs
- ClientTarget.cs
- WindowsAuthenticationModule.cs
- QuestionEventArgs.cs
- TreeNodeSelectionProcessor.cs
- MetadataItem.cs
- ResourceDescriptionAttribute.cs
- RegexWorker.cs
- SmtpReplyReaderFactory.cs
- RequestCachePolicyConverter.cs
- MaskDesignerDialog.cs
- RectangleGeometry.cs
- InternalEnumValidator.cs
- Overlapped.cs
- BindingMAnagerBase.cs
- PolicyStatement.cs
- CodeAttributeDeclarationCollection.cs
- XamlDesignerSerializationManager.cs
- ExecutionEngineException.cs
- NetDispatcherFaultException.cs
- AsyncOperationManager.cs
- SettingsContext.cs
- DataPointer.cs
- RegexGroupCollection.cs
- DataControlButton.cs
- VirtualPath.cs
- ExpressionBuilder.cs
- CallSiteOps.cs
- XmlTextAttribute.cs
- ObjectListItem.cs
- HtmlInputFile.cs
- WSSecurityPolicy.cs
- Activator.cs