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
- CodeAttributeDeclarationCollection.cs
- BitmapEffectInputData.cs
- ImmutablePropertyDescriptorGridEntry.cs
- DtrList.cs
- ReaderWriterLockWrapper.cs
- ValidationHelper.cs
- PathGeometry.cs
- VisualStyleRenderer.cs
- HttpRequestCacheValidator.cs
- SettingsBase.cs
- HashSet.cs
- UrlAuthorizationModule.cs
- TemplateBindingExtension.cs
- ClientCredentials.cs
- TextOutput.cs
- CompositeCollection.cs
- PackageDigitalSignatureManager.cs
- ScriptResourceHandler.cs
- InstanceData.cs
- TextAnchor.cs
- AddInControllerImpl.cs
- HttpPostClientProtocol.cs
- VideoDrawing.cs
- DefaultBinder.cs
- TypeBuilderInstantiation.cs
- ListInitExpression.cs
- _PooledStream.cs
- DbExpressionBuilder.cs
- XmlSchemaValidationException.cs
- OpenTypeCommon.cs
- XmlSchemaExporter.cs
- InputReportEventArgs.cs
- RTTrackingProfile.cs
- ProfileService.cs
- ContentDisposition.cs
- SqlUdtInfo.cs
- TypeValidationEventArgs.cs
- InputScopeNameConverter.cs
- RegexMatch.cs
- ComponentEditorForm.cs
- ProtocolsSection.cs
- SchemaDeclBase.cs
- Selector.cs
- DataGridViewColumnStateChangedEventArgs.cs
- StringFormat.cs
- DataMemberConverter.cs
- FrugalList.cs
- DmlSqlGenerator.cs
- TextChange.cs
- Localizer.cs
- AnnotationAuthorChangedEventArgs.cs
- BlockCollection.cs
- BufferModesCollection.cs
- StyleSheetDesigner.cs
- RichTextBoxContextMenu.cs
- Domain.cs
- BinaryCommonClasses.cs
- XmlMemberMapping.cs
- ResXBuildProvider.cs
- FloaterBaseParagraph.cs
- Point.cs
- XmlDataLoader.cs
- SafeRightsManagementHandle.cs
- RegexGroup.cs
- CapabilitiesRule.cs
- XmlRawWriter.cs
- VarRefManager.cs
- CornerRadiusConverter.cs
- SafeMILHandle.cs
- TextLine.cs
- DependencySource.cs
- HideDisabledControlAdapter.cs
- DataView.cs
- WebPartEditorApplyVerb.cs
- XamlPathDataSerializer.cs
- MenuItemCollection.cs
- SystemInfo.cs
- SHA1CryptoServiceProvider.cs
- DragDeltaEventArgs.cs
- MarshalByValueComponent.cs
- SafeArrayTypeMismatchException.cs
- EncoderBestFitFallback.cs
- TableLayoutSettingsTypeConverter.cs
- SupportingTokenProviderSpecification.cs
- DataGridViewTopRowAccessibleObject.cs
- Type.cs
- MediaTimeline.cs
- Pkcs7Recipient.cs
- InputProcessorProfilesLoader.cs
- GridViewRowEventArgs.cs
- RegexCapture.cs
- HtmlTextBoxAdapter.cs
- SchemaExporter.cs
- StrongNameUtility.cs
- Visitor.cs
- Script.cs
- HostProtectionException.cs
- SpeechEvent.cs
- TextViewElement.cs
- DictionaryTraceRecord.cs