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
- StreamGeometry.cs
- WebPartManager.cs
- ContextInformation.cs
- HyperLinkStyle.cs
- Context.cs
- PathGradientBrush.cs
- RequestBringIntoViewEventArgs.cs
- ObjectStateEntryDbDataRecord.cs
- BindingManagerDataErrorEventArgs.cs
- WebDisplayNameAttribute.cs
- DomainUpDown.cs
- BatchParser.cs
- WebPartRestoreVerb.cs
- DurationConverter.cs
- ToolboxBitmapAttribute.cs
- ObjectDataSourceSelectingEventArgs.cs
- XmlRootAttribute.cs
- CultureNotFoundException.cs
- MsmqAuthenticationMode.cs
- SwitchLevelAttribute.cs
- SqlDelegatedTransaction.cs
- MasterPageBuildProvider.cs
- Delegate.cs
- DataGridViewCheckBoxColumn.cs
- DataPagerFieldCollection.cs
- input.cs
- InstanceKeyNotReadyException.cs
- ServiceControllerDesigner.cs
- IsolatedStoragePermission.cs
- DataBoundControlHelper.cs
- UInt16Converter.cs
- Stack.cs
- SchemaNotation.cs
- XmlSchemaSequence.cs
- TableLayoutSettingsTypeConverter.cs
- Transaction.cs
- SmiRecordBuffer.cs
- XmlIlGenerator.cs
- DataGridViewElement.cs
- SqlDataSourceSelectingEventArgs.cs
- StylusButton.cs
- NavigationProperty.cs
- PermissionListSet.cs
- TextSpan.cs
- DataSourceProvider.cs
- ExtendedTransformFactory.cs
- ToolStripProgressBar.cs
- CollectionChangeEventArgs.cs
- DesignTimeVisibleAttribute.cs
- PerformanceCounterLib.cs
- CollectionChangeEventArgs.cs
- CalendarDataBindingHandler.cs
- RemotingServices.cs
- ObservableCollection.cs
- CoTaskMemSafeHandle.cs
- MethodResolver.cs
- SqlAggregateChecker.cs
- XmlSortKeyAccumulator.cs
- SystemWebCachingSectionGroup.cs
- UnsafeNativeMethods.cs
- MatrixTransform.cs
- SHA256CryptoServiceProvider.cs
- XmlSchemaAll.cs
- ClientEventManager.cs
- SynchronizedInputProviderWrapper.cs
- WmpBitmapDecoder.cs
- HttpsChannelFactory.cs
- PKCS1MaskGenerationMethod.cs
- RNGCryptoServiceProvider.cs
- ManagementOperationWatcher.cs
- ItemCheckEvent.cs
- WebSysDisplayNameAttribute.cs
- RangeValuePatternIdentifiers.cs
- UnSafeCharBuffer.cs
- Fonts.cs
- RuntimeConfigLKG.cs
- TextWriter.cs
- GeneratedContractType.cs
- autovalidator.cs
- DocumentViewerBaseAutomationPeer.cs
- QueryLifecycle.cs
- EntryWrittenEventArgs.cs
- OleDbConnectionInternal.cs
- ExpressionPrinter.cs
- WebBrowserSiteBase.cs
- FormView.cs
- IndexExpression.cs
- RowUpdatedEventArgs.cs
- CuspData.cs
- BindToObject.cs
- Column.cs
- PerformanceCountersElement.cs
- TextHidden.cs
- WindowsFont.cs
- ToggleButton.cs
- HttpResponseHeader.cs
- XPathDocument.cs
- DataServiceHost.cs
- CollectionViewSource.cs
- PcmConverter.cs