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
- ClonableStack.cs
- RuleInfoComparer.cs
- ToolBarButton.cs
- RadioButtonFlatAdapter.cs
- OdbcEnvironmentHandle.cs
- DataGridTablesFactory.cs
- SymbolTable.cs
- AlphabeticalEnumConverter.cs
- SplitterCancelEvent.cs
- DependsOnAttribute.cs
- Token.cs
- SerializationStore.cs
- ValueOfAction.cs
- FormParameter.cs
- Journaling.cs
- ObjectFullSpanRewriter.cs
- LocationFactory.cs
- DescendentsWalker.cs
- XmlBinaryReader.cs
- FieldToken.cs
- UnsafeMethods.cs
- AsyncContentLoadedEventArgs.cs
- MethodBuilder.cs
- BamlRecordReader.cs
- ValidatedMobileControlConverter.cs
- PasswordValidationException.cs
- SqlUtil.cs
- ProfileProvider.cs
- QueryCacheEntry.cs
- Classification.cs
- NullableFloatAverageAggregationOperator.cs
- EdmItemCollection.cs
- ClassicBorderDecorator.cs
- AccessViolationException.cs
- AudioFormatConverter.cs
- NamespaceInfo.cs
- InternalSafeNativeMethods.cs
- BridgeDataReader.cs
- ResponseStream.cs
- Constants.cs
- LogSwitch.cs
- COM2IProvidePropertyBuilderHandler.cs
- TextEditorMouse.cs
- FixedSOMTableCell.cs
- SimplePropertyEntry.cs
- ProcessThread.cs
- DBSqlParserTable.cs
- DrawListViewSubItemEventArgs.cs
- FormViewDeleteEventArgs.cs
- SplineKeyFrames.cs
- UnmanagedMemoryStream.cs
- MergePropertyDescriptor.cs
- Soap12ProtocolReflector.cs
- StandardRuntimeEnumValidatorAttribute.cs
- MetroSerializationManager.cs
- SoapServerMethod.cs
- DecoderBestFitFallback.cs
- Menu.cs
- FlowLayoutSettings.cs
- CodeTypeReference.cs
- FileLevelControlBuilderAttribute.cs
- CollectionConverter.cs
- StateChangeEvent.cs
- safelink.cs
- EventBookmark.cs
- LocalBuilder.cs
- BasicExpressionVisitor.cs
- PageTextBox.cs
- MailMessageEventArgs.cs
- BulletedListEventArgs.cs
- HijriCalendar.cs
- Pkcs7Recipient.cs
- DrawingContextDrawingContextWalker.cs
- SoapEnumAttribute.cs
- WarningException.cs
- ValidationErrorEventArgs.cs
- Request.cs
- SqlDataSourceEnumerator.cs
- GlyphRunDrawing.cs
- SingleKeyFrameCollection.cs
- WebServiceResponseDesigner.cs
- SingleAnimationBase.cs
- FormViewDeletedEventArgs.cs
- CompilerGlobalScopeAttribute.cs
- ClockController.cs
- DeviceSpecificDialogCachedState.cs
- SchemaTableOptionalColumn.cs
- Renderer.cs
- ExpressionBuilderContext.cs
- TraceProvider.cs
- OperatingSystem.cs
- GeneralTransform3DTo2D.cs
- ServiceOperationListItemList.cs
- ParameterRefs.cs
- AnimationException.cs
- HtmlPhoneCallAdapter.cs
- ItemCollection.cs
- UnsafeNativeMethods.cs
- CompensatableTransactionScopeActivityDesigner.cs
- Lease.cs