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
- SerialReceived.cs
- MDIControlStrip.cs
- SizeConverter.cs
- TemplateControl.cs
- ExceptionUtility.cs
- Point.cs
- AncestorChangedEventArgs.cs
- DataReceivedEventArgs.cs
- SqlInternalConnectionSmi.cs
- InputReport.cs
- BufferedGraphicsContext.cs
- EntityRecordInfo.cs
- WorkflowInstanceTerminatedRecord.cs
- PropertyValueUIItem.cs
- XmlKeywords.cs
- ServiceSecurityAuditElement.cs
- TextFormatterHost.cs
- _TimerThread.cs
- ToolTipService.cs
- EntryPointNotFoundException.cs
- ComponentResourceManager.cs
- RadioButtonBaseAdapter.cs
- dsa.cs
- StyleHelper.cs
- FixedElement.cs
- BatchWriter.cs
- XmlSchemaSimpleContentExtension.cs
- DocumentSequenceHighlightLayer.cs
- BaseHashHelper.cs
- DataListCommandEventArgs.cs
- CultureInfo.cs
- PriorityQueue.cs
- ClockGroup.cs
- DataObjectSettingDataEventArgs.cs
- NamespaceTable.cs
- NamedPipeAppDomainProtocolHandler.cs
- ValueTypeFixupInfo.cs
- RightsManagementEncryptionTransform.cs
- HiddenFieldPageStatePersister.cs
- ShutDownListener.cs
- IxmlLineInfo.cs
- MetricEntry.cs
- UnsafeNativeMethods.cs
- ResXResourceSet.cs
- CodeDomDecompiler.cs
- SocketStream.cs
- StringOutput.cs
- DesignTimeParseData.cs
- SessionState.cs
- InvalidProgramException.cs
- ViewStateException.cs
- RelationshipConverter.cs
- DynamicDiscoSearcher.cs
- PerfService.cs
- BookmarkResumptionRecord.cs
- Task.cs
- DataGridTextBox.cs
- NamedPipeTransportElement.cs
- StreamGeometry.cs
- ResourceProviderFactory.cs
- TimeSpanSecondsConverter.cs
- ComNativeDescriptor.cs
- PrinterResolution.cs
- ObjectCache.cs
- MimeTypePropertyAttribute.cs
- NativeMethodsOther.cs
- DataStreamFromComStream.cs
- ButtonChrome.cs
- KerberosRequestorSecurityToken.cs
- ValidationHelper.cs
- RuleElement.cs
- DbProviderManifest.cs
- ToolBarButtonClickEvent.cs
- DefaultMemberAttribute.cs
- SpellerHighlightLayer.cs
- Authorization.cs
- QueryStringHandler.cs
- TrackingProfileDeserializationException.cs
- DataControlPagerLinkButton.cs
- CryptoConfig.cs
- ProfileManager.cs
- CryptoProvider.cs
- ByteFacetDescriptionElement.cs
- Funcletizer.cs
- GeometryConverter.cs
- FrameworkElementFactory.cs
- TypeConverterHelper.cs
- QueryCacheEntry.cs
- ClientTargetSection.cs
- MulticastOption.cs
- InheritanceRules.cs
- TextEditorContextMenu.cs
- XsltLoader.cs
- SizeAnimationBase.cs
- QuaternionAnimationUsingKeyFrames.cs
- SessionPageStatePersister.cs
- HintTextMaxWidthConverter.cs
- OleServicesContext.cs
- JsonSerializer.cs
- WSSecureConversation.cs