Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / Xml / System / Xml / XPath / XPathNodeIterator.cs / 3 / 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
- ListDataBindEventArgs.cs
- SupportsEventValidationAttribute.cs
- TreeNode.cs
- ArraySet.cs
- TypeReference.cs
- LongValidator.cs
- PointHitTestResult.cs
- IdentityReference.cs
- PageCatalogPartDesigner.cs
- ArgumentOutOfRangeException.cs
- PriorityBinding.cs
- ApplicationServiceManager.cs
- FileDialogCustomPlace.cs
- BehaviorDragDropEventArgs.cs
- HTTPNotFoundHandler.cs
- DictionaryTraceRecord.cs
- HashRepartitionStream.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- CodeTypeOfExpression.cs
- CollectionViewGroupRoot.cs
- DiffuseMaterial.cs
- iisPickupDirectory.cs
- mactripleDES.cs
- SamlAttribute.cs
- DependencySource.cs
- XmlQualifiedName.cs
- SqlDuplicator.cs
- BaseComponentEditor.cs
- ToolStripProgressBar.cs
- ParseHttpDate.cs
- WindowsImpersonationContext.cs
- SQLSingle.cs
- DeferredSelectedIndexReference.cs
- GenericWebPart.cs
- FactoryRecord.cs
- MgmtConfigurationRecord.cs
- GridViewRowEventArgs.cs
- ZipIOCentralDirectoryBlock.cs
- SymbolDocumentGenerator.cs
- FlowLayoutSettings.cs
- MulticastDelegate.cs
- CodeDOMProvider.cs
- DataColumnMapping.cs
- LinqToSqlWrapper.cs
- ModifiableIteratorCollection.cs
- TempFiles.cs
- Point.cs
- SystemIPInterfaceProperties.cs
- AbstractExpressions.cs
- PersonalizationDictionary.cs
- CompilerTypeWithParams.cs
- XamlReader.cs
- CacheSection.cs
- DataObjectPastingEventArgs.cs
- ColumnReorderedEventArgs.cs
- NativeObjectSecurity.cs
- OdbcTransaction.cs
- KeyPressEvent.cs
- GenericTypeParameterBuilder.cs
- TextProperties.cs
- RealizedColumnsBlock.cs
- FtpRequestCacheValidator.cs
- LambdaExpression.cs
- WriteFileContext.cs
- WriteableBitmap.cs
- SQLGuid.cs
- TableItemStyle.cs
- ApplicationId.cs
- Subtract.cs
- MobileSysDescriptionAttribute.cs
- HatchBrush.cs
- TreeViewAutomationPeer.cs
- HttpTransportElement.cs
- SchemaCollectionPreprocessor.cs
- ObjectDataSourceSelectingEventArgs.cs
- SmtpAuthenticationManager.cs
- IdentityHolder.cs
- SubtreeProcessor.cs
- ImportContext.cs
- CodeMemberProperty.cs
- ProtocolInformationReader.cs
- BamlRecordReader.cs
- DataGridViewSelectedCellCollection.cs
- Axis.cs
- CredentialCache.cs
- CodeIterationStatement.cs
- ToolBarButtonClickEvent.cs
- Polygon.cs
- PublisherMembershipCondition.cs
- AnnotationComponentChooser.cs
- XdrBuilder.cs
- CultureTableRecord.cs
- XmlSerializerVersionAttribute.cs
- PriorityChain.cs
- DataSourceXmlClassAttribute.cs
- ParameterReplacerVisitor.cs
- __ConsoleStream.cs
- UnauthorizedAccessException.cs
- SecurityCredentialsManager.cs
- LassoSelectionBehavior.cs