Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / XPathNodeIterator.cs / 2 / XPathNodeIterator.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.XPath {
using System;
using System.Collections;
using System.Diagnostics;
using System.Text;
[DebuggerDisplay("Position={CurrentPosition}, Current={debuggerDisplayProxy}")]
public abstract class XPathNodeIterator : ICloneable, IEnumerable {
internal int count = -1;
object ICloneable.Clone() { return this.Clone(); }
public abstract XPathNodeIterator Clone();
public abstract bool MoveNext();
public abstract XPathNavigator Current { get; }
public abstract int CurrentPosition { get; }
public virtual int Count {
get {
if (count == -1) {
XPathNodeIterator clone = this.Clone();
while(clone.MoveNext()) ;
count = clone.CurrentPosition;
}
return count;
}
}
public virtual IEnumerator GetEnumerator() {
return new Enumerator(this);
}
private object debuggerDisplayProxy { get { return Current == null ? null : (object)new XPathNavigator.DebuggerDisplayProxy(Current); } }
///
/// Implementation of a resetable enumerator that is linked to the XPathNodeIterator used to create it.
///
private class Enumerator : IEnumerator {
private XPathNodeIterator original; // Keep original XPathNodeIterator in case Reset() is called
private XPathNodeIterator current;
private bool iterationStarted;
public Enumerator(XPathNodeIterator original) {
this.original = original.Clone();
}
public virtual object Current {
get {
// 1. Do not reuse the XPathNavigator, as we do in XPathNodeIterator
// 2. Throw exception if current position is before first node or after the last node
if (this.iterationStarted) {
// Current is null if iterator is positioned after the last node
if (this.current == null)
throw new InvalidOperationException(Res.GetString(Res.Sch_EnumFinished, string.Empty));
return this.current.Current.Clone();
}
// User must call MoveNext before accessing Current property
throw new InvalidOperationException(Res.GetString(Res.Sch_EnumNotStarted, string.Empty));
}
}
public virtual bool MoveNext() {
// Delegate to XPathNodeIterator
if (!this.iterationStarted) {
// Reset iteration to original position
this.current = this.original.Clone();
this.iterationStarted = true;
}
if (this.current == null || !this.current.MoveNext()) {
// Iteration complete
this.current = null;
return false;
}
return true;
}
public virtual void Reset() {
this.iterationStarted = false;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Logging.cs
- DataGridToolTip.cs
- CoreSwitches.cs
- MappingModelBuildProvider.cs
- MsmqIntegrationProcessProtocolHandler.cs
- AppearanceEditorPart.cs
- SiteMapSection.cs
- UIElement3D.cs
- TableLayoutPanel.cs
- CacheOutputQuery.cs
- DbFunctionCommandTree.cs
- MetadataPropertyCollection.cs
- ProxyGenerationError.cs
- PostBackOptions.cs
- CrossAppDomainChannel.cs
- Keyboard.cs
- EditorPart.cs
- TextPatternIdentifiers.cs
- ColorAnimationUsingKeyFrames.cs
- RequestContext.cs
- ControlParameter.cs
- ClientTargetSection.cs
- IncrementalReadDecoders.cs
- ListParaClient.cs
- SubstitutionList.cs
- TemplateBaseAction.cs
- ComponentEditorPage.cs
- AnnotationStore.cs
- PathFigureCollectionConverter.cs
- FixedSOMLineCollection.cs
- RequestDescription.cs
- MediaTimeline.cs
- Msmq.cs
- SweepDirectionValidation.cs
- SiteMapDataSourceView.cs
- AuthenticationServiceManager.cs
- SqlVisitor.cs
- xdrvalidator.cs
- ThreadInterruptedException.cs
- AssemblyResourceLoader.cs
- WebDisplayNameAttribute.cs
- SRGSCompiler.cs
- RemoteTokenFactory.cs
- CqlParserHelpers.cs
- XmlNodeChangedEventArgs.cs
- WebResponse.cs
- TdsParser.cs
- DmlSqlGenerator.cs
- XmlEncodedRawTextWriter.cs
- PageSettings.cs
- nulltextcontainer.cs
- IDictionary.cs
- StorageAssociationSetMapping.cs
- StorageTypeMapping.cs
- ByteRangeDownloader.cs
- SemanticResolver.cs
- WebPartTransformerCollection.cs
- DataGridViewRowEventArgs.cs
- Rule.cs
- SecondaryViewProvider.cs
- FormViewUpdateEventArgs.cs
- PaperSource.cs
- DataGridViewRowHeaderCell.cs
- TemplateParser.cs
- AddInBase.cs
- WebControlAdapter.cs
- ResourceKey.cs
- XmlQueryCardinality.cs
- HyperLinkField.cs
- Win32.cs
- rsa.cs
- Line.cs
- ApplicationInfo.cs
- PropertyChangedEventManager.cs
- TextBox.cs
- ServiceNameElement.cs
- HtmlEncodedRawTextWriter.cs
- QuotedPrintableStream.cs
- AccessViolationException.cs
- InternalSafeNativeMethods.cs
- UncommonField.cs
- SoapInteropTypes.cs
- DbResourceAllocator.cs
- DataControlFieldsEditor.cs
- KeyedHashAlgorithm.cs
- MembershipUser.cs
- TextProperties.cs
- TextDecorationLocationValidation.cs
- AnnouncementInnerClient11.cs
- QuadraticBezierSegment.cs
- TypeConverterValueSerializer.cs
- BooleanFunctions.cs
- ChannelSinkStacks.cs
- ZipIOCentralDirectoryBlock.cs
- ButtonField.cs
- ActivationArguments.cs
- SemanticAnalyzer.cs
- DataGrid.cs
- XPathBinder.cs
- OptimisticConcurrencyException.cs