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
- ColorTransform.cs
- ManageRequest.cs
- DPCustomTypeDescriptor.cs
- CustomPopupPlacement.cs
- TextReturnReader.cs
- UnrecognizedAssertionsBindingElement.cs
- HttpWebResponse.cs
- DrawingBrush.cs
- MetadataArtifactLoaderCompositeResource.cs
- MetadataImporter.cs
- FixUpCollection.cs
- ProxyElement.cs
- ExtendedPropertyCollection.cs
- Int32CollectionConverter.cs
- Graphics.cs
- BaseTransportHeaders.cs
- SqlTransaction.cs
- ReferentialConstraintRoleElement.cs
- GlobalizationSection.cs
- ComponentChangedEvent.cs
- Helpers.cs
- PackWebRequest.cs
- RectAnimationUsingKeyFrames.cs
- SByteConverter.cs
- TreeNodeCollectionEditor.cs
- userdatakeys.cs
- HtmlMeta.cs
- SafeSecurityHandles.cs
- ToggleButton.cs
- DateTimeConverter.cs
- FixedHyperLink.cs
- StandardCommands.cs
- PropertyGridView.cs
- CompilerCollection.cs
- WindowsSolidBrush.cs
- MailSettingsSection.cs
- PersianCalendar.cs
- ThreadStateException.cs
- HandledMouseEvent.cs
- EntityContainerEntitySetDefiningQuery.cs
- RawKeyboardInputReport.cs
- IconBitmapDecoder.cs
- ConnectionPoolManager.cs
- RequestCacheManager.cs
- BaseTemplateBuildProvider.cs
- SecuritySessionClientSettings.cs
- TemplateControlParser.cs
- WindowVisualStateTracker.cs
- TextRangeEdit.cs
- QueuePathDialog.cs
- SafeFreeMibTable.cs
- ObjectListField.cs
- KnownColorTable.cs
- RootProfilePropertySettingsCollection.cs
- DataSysAttribute.cs
- FeatureSupport.cs
- ContentElement.cs
- Win32.cs
- PaintValueEventArgs.cs
- DefaultEventAttribute.cs
- RegionData.cs
- OdbcTransaction.cs
- AxImporter.cs
- Visual.cs
- AutomationPatternInfo.cs
- AdCreatedEventArgs.cs
- TypeUtils.cs
- MeshGeometry3D.cs
- MappedMetaModel.cs
- FormConverter.cs
- ScrollBar.cs
- ChannelDispatcher.cs
- BitmapEffectRenderDataResource.cs
- ConnectionManagementElementCollection.cs
- TimeSpanStorage.cs
- UrlMappingsModule.cs
- StreamReader.cs
- ContextProperty.cs
- UdpTransportSettings.cs
- MutexSecurity.cs
- DataReaderContainer.cs
- WebPartTransformer.cs
- SrgsDocument.cs
- DocumentReferenceCollection.cs
- SmtpLoginAuthenticationModule.cs
- ServerIdentity.cs
- CachingHintValidation.cs
- DummyDataSource.cs
- InstanceCreationEditor.cs
- Grant.cs
- RelatedCurrencyManager.cs
- SHA1CryptoServiceProvider.cs
- AnnotationDocumentPaginator.cs
- Positioning.cs
- SmtpMail.cs
- XmlLanguageConverter.cs
- AccessedThroughPropertyAttribute.cs
- WindowsRichEditRange.cs
- regiisutil.cs
- GridViewUpdateEventArgs.cs