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
- StorageFunctionMapping.cs
- X509UI.cs
- XPathNodeIterator.cs
- Opcode.cs
- UnSafeCharBuffer.cs
- Geometry.cs
- AndAlso.cs
- Deserializer.cs
- UriExt.cs
- XamlStyleSerializer.cs
- SplitterPanel.cs
- UpdateProgress.cs
- ExpressionDumper.cs
- XPathNodePointer.cs
- PenThreadWorker.cs
- SQLChars.cs
- BitmapCache.cs
- ArrayTypeMismatchException.cs
- SerializationTrace.cs
- CodeTypeParameterCollection.cs
- StyleSelector.cs
- CodeChecksumPragma.cs
- SwitchAttribute.cs
- PlanCompilerUtil.cs
- ToolTipAutomationPeer.cs
- ReferencedCollectionType.cs
- XmlImplementation.cs
- ConnectionPoint.cs
- ScriptRegistrationManager.cs
- SizeAnimationUsingKeyFrames.cs
- ElementsClipboardData.cs
- DispatcherSynchronizationContext.cs
- HelpProvider.cs
- RemoteCryptoTokenProvider.cs
- ValidatorUtils.cs
- DataGridViewSelectedCellCollection.cs
- CodeIterationStatement.cs
- UpdateCommand.cs
- CannotUnloadAppDomainException.cs
- ArraySegment.cs
- RadioButtonRenderer.cs
- OrderedDictionary.cs
- CreateUserWizardStep.cs
- Stream.cs
- TimeZoneNotFoundException.cs
- DataGridViewCellStyleChangedEventArgs.cs
- Rectangle.cs
- WorkflowWebService.cs
- ExeConfigurationFileMap.cs
- GridLengthConverter.cs
- DataControlFieldCell.cs
- SizeKeyFrameCollection.cs
- MetadataItemSerializer.cs
- ColorAnimationUsingKeyFrames.cs
- BinHexDecoder.cs
- BackgroundWorker.cs
- FormViewUpdateEventArgs.cs
- Point3DAnimation.cs
- IsolatedStorageFilePermission.cs
- ListBoxAutomationPeer.cs
- OdbcHandle.cs
- TransactionScope.cs
- DocumentCollection.cs
- XmlCountingReader.cs
- DataGridRowEventArgs.cs
- RotateTransform3D.cs
- DockPatternIdentifiers.cs
- CngKeyCreationParameters.cs
- ApplicationInfo.cs
- LineInfo.cs
- SqlNodeTypeOperators.cs
- NullableDecimalSumAggregationOperator.cs
- Metafile.cs
- ByteAnimationUsingKeyFrames.cs
- BrowserCapabilitiesFactory35.cs
- SessionStateItemCollection.cs
- RepeatEnumerable.cs
- HierarchicalDataBoundControl.cs
- IisHelper.cs
- StringExpressionSet.cs
- TypeDescriptor.cs
- DataRelationCollection.cs
- AdvancedBindingPropertyDescriptor.cs
- HtmlInputRadioButton.cs
- AssemblyCache.cs
- XhtmlConformanceSection.cs
- InputQueueChannel.cs
- DynamicRenderer.cs
- BaseDataList.cs
- BasePattern.cs
- ValidatingReaderNodeData.cs
- Viewport3DVisual.cs
- ExpandCollapseProviderWrapper.cs
- Task.cs
- RelationshipManager.cs
- SettingsContext.cs
- SqlGatherProducedAliases.cs
- GeneralTransform3DCollection.cs
- DataControlField.cs
- SQLStringStorage.cs