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
- ServicePoint.cs
- ReversePositionQuery.cs
- PlatformCulture.cs
- StringDictionaryWithComparer.cs
- ErrorInfoXmlDocument.cs
- XmlSchemaAttributeGroup.cs
- CanonicalXml.cs
- assemblycache.cs
- HttpBindingExtension.cs
- GenericsNotImplementedException.cs
- OutOfProcStateClientManager.cs
- RunWorkerCompletedEventArgs.cs
- NativeMethodsCLR.cs
- DbProviderSpecificTypePropertyAttribute.cs
- SessionSwitchEventArgs.cs
- StorageEntityContainerMapping.cs
- SymbolEqualComparer.cs
- ExpressionPrinter.cs
- TransactedReceiveData.cs
- ToolStripMenuItem.cs
- LinqDataSourceContextEventArgs.cs
- ResourceWriter.cs
- ButtonRenderer.cs
- CommandConverter.cs
- RubberbandSelector.cs
- CheckoutException.cs
- FontCacheUtil.cs
- InvokePattern.cs
- MemberAccessException.cs
- FixedTextPointer.cs
- UInt64.cs
- ProviderIncompatibleException.cs
- XmlHierarchyData.cs
- AssociationEndMember.cs
- QilLoop.cs
- PageAction.cs
- TlsnegoTokenAuthenticator.cs
- BindingListCollectionView.cs
- AttachedPropertyDescriptor.cs
- RawKeyboardInputReport.cs
- DataServices.cs
- PanningMessageFilter.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- CLSCompliantAttribute.cs
- SqlRetyper.cs
- TextRunTypographyProperties.cs
- ListBox.cs
- ZipIOLocalFileHeader.cs
- RelatedPropertyManager.cs
- StoreAnnotationsMap.cs
- Point3DKeyFrameCollection.cs
- WebPartConnectionsCancelVerb.cs
- BlockUIContainer.cs
- WebPartManager.cs
- DesignerVerb.cs
- Collection.cs
- Exceptions.cs
- DecimalFormatter.cs
- LicFileLicenseProvider.cs
- Button.cs
- DataServiceRequest.cs
- DataBoundLiteralControl.cs
- RoleService.cs
- InvalidPrinterException.cs
- UriTemplateEquivalenceComparer.cs
- Exceptions.cs
- TableParagraph.cs
- TextRange.cs
- ImageMetadata.cs
- Shape.cs
- ValueType.cs
- XmlIncludeAttribute.cs
- ArrayList.cs
- TreeNodeClickEventArgs.cs
- Double.cs
- ObjectSet.cs
- EntityContainer.cs
- InnerItemCollectionView.cs
- UntypedNullExpression.cs
- LayeredChannelFactory.cs
- FrameworkElement.cs
- SizeFConverter.cs
- DoubleConverter.cs
- ResolveNextArgumentWorkItem.cs
- NonDualMessageSecurityOverHttpElement.cs
- CopyAttributesAction.cs
- FormsAuthenticationUser.cs
- GeneratedCodeAttribute.cs
- EntityCommandExecutionException.cs
- WrapPanel.cs
- CustomAttributeFormatException.cs
- SystemIPv6InterfaceProperties.cs
- XhtmlConformanceSection.cs
- BooleanExpr.cs
- TaiwanLunisolarCalendar.cs
- DocumentViewerHelper.cs
- XmlRawWriter.cs
- TypeDependencyAttribute.cs
- DbRetry.cs
- Simplifier.cs