Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Xml / System / Xml / XPath / XPathNodeIterator.cs / 1 / 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.
//
// [....]
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BamlReader.cs
- PointLightBase.cs
- PageHandlerFactory.cs
- RtfToXamlLexer.cs
- DefinitionBase.cs
- HttpClientChannel.cs
- TrackingServices.cs
- initElementDictionary.cs
- StateMachineHistory.cs
- XmlSchemaValidationException.cs
- Label.cs
- GZipObjectSerializer.cs
- AesCryptoServiceProvider.cs
- TranslateTransform3D.cs
- OleDbCommand.cs
- BaseProcessor.cs
- FunctionNode.cs
- CurrencyWrapper.cs
- WorkItem.cs
- FlowDocumentFormatter.cs
- InputBuffer.cs
- DbProviderFactoriesConfigurationHandler.cs
- CSharpCodeProvider.cs
- PriorityItem.cs
- SequentialUshortCollection.cs
- WmfPlaceableFileHeader.cs
- AuthenticationModuleElement.cs
- TextRangeEditTables.cs
- AssertFilter.cs
- WebPartChrome.cs
- SystemIPInterfaceStatistics.cs
- NativeMethods.cs
- Geometry.cs
- CoTaskMemUnicodeSafeHandle.cs
- mediapermission.cs
- SupportsPreviewControlAttribute.cs
- SqlAliaser.cs
- ModelTreeEnumerator.cs
- TypeDependencyAttribute.cs
- HttpCacheVaryByContentEncodings.cs
- PowerModeChangedEventArgs.cs
- UTF32Encoding.cs
- SqlPersonalizationProvider.cs
- BindingExpressionBase.cs
- TabPage.cs
- SchemaDeclBase.cs
- ViewBox.cs
- DragEvent.cs
- FrugalList.cs
- IconBitmapDecoder.cs
- FunctionDetailsReader.cs
- ReferenceConverter.cs
- SendKeys.cs
- WrapPanel.cs
- invalidudtexception.cs
- EntityTransaction.cs
- RequestCachePolicy.cs
- Decorator.cs
- PageParserFilter.cs
- CrossContextChannel.cs
- SqlSupersetValidator.cs
- PageAdapter.cs
- MetroSerializationManager.cs
- StringUtil.cs
- StreamedFramingRequestChannel.cs
- IconEditor.cs
- SiblingIterators.cs
- xmlfixedPageInfo.cs
- CertificateElement.cs
- KeysConverter.cs
- AppDomainAttributes.cs
- InstanceKey.cs
- WpfMemberInvoker.cs
- QueryOperationResponseOfT.cs
- HttpListenerRequest.cs
- WindowsStatusBar.cs
- OdbcPermission.cs
- WeakReadOnlyCollection.cs
- ToolStripContentPanelRenderEventArgs.cs
- MutexSecurity.cs
- ADConnectionHelper.cs
- FormViewPagerRow.cs
- PKCS1MaskGenerationMethod.cs
- ObjectResult.cs
- RenamedEventArgs.cs
- __FastResourceComparer.cs
- LogicalExpr.cs
- SystemResourceKey.cs
- ArrangedElement.cs
- GraphicsPathIterator.cs
- TextEditorLists.cs
- DynamicArgumentDesigner.xaml.cs
- ListBoxAutomationPeer.cs
- VoiceObjectToken.cs
- TreeNodeCollection.cs
- RawAppCommandInputReport.cs
- DbConnectionPoolGroupProviderInfo.cs
- RadioButton.cs
- BlurEffect.cs
- SoapAttributeAttribute.cs