Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- AdornerLayer.cs
- Underline.cs
- GridLengthConverter.cs
- ApplicationSettingsBase.cs
- NestedContainer.cs
- HttpBufferlessInputStream.cs
- ColorDialog.cs
- basenumberconverter.cs
- SerializationInfoEnumerator.cs
- StandardCommands.cs
- EntityContainerRelationshipSetEnd.cs
- SqlFileStream.cs
- FragmentQuery.cs
- EventPropertyMap.cs
- ConstantSlot.cs
- XamlStyleSerializer.cs
- DesignTimeVisibleAttribute.cs
- UIInitializationException.cs
- ApplicationManager.cs
- _ContextAwareResult.cs
- DiffuseMaterial.cs
- DynamicRouteExpression.cs
- SqlBulkCopy.cs
- httpapplicationstate.cs
- DiagnosticTrace.cs
- DataRecordInfo.cs
- GroupStyle.cs
- SQLBytesStorage.cs
- ConstructorExpr.cs
- ImportFileRequest.cs
- CodeCatchClauseCollection.cs
- Properties.cs
- GroupQuery.cs
- CompositeScriptReference.cs
- DelegatingTypeDescriptionProvider.cs
- HttpResponse.cs
- TypeForwardedToAttribute.cs
- NaturalLanguageHyphenator.cs
- StringSorter.cs
- XPathDocumentBuilder.cs
- XmlIterators.cs
- HandleCollector.cs
- SwitchLevelAttribute.cs
- AssociationEndMember.cs
- MiniConstructorInfo.cs
- ToolStripItemEventArgs.cs
- KeyFrames.cs
- SiteMapNode.cs
- CommandID.cs
- SelectionChangedEventArgs.cs
- ParseChildrenAsPropertiesAttribute.cs
- EndpointDiscoveryMetadataCD1.cs
- PageParser.cs
- SessionStateModule.cs
- Viewport2DVisual3D.cs
- ManipulationDeltaEventArgs.cs
- SqlDataSourceCommandParser.cs
- DefaultMemberAttribute.cs
- MemberRelationshipService.cs
- WebPartsSection.cs
- TaskFormBase.cs
- ModifierKeysValueSerializer.cs
- Processor.cs
- Stack.cs
- RsaSecurityTokenAuthenticator.cs
- Calendar.cs
- RestClientProxyHandler.cs
- DataSourceControlBuilder.cs
- DataBoundControl.cs
- DrawListViewSubItemEventArgs.cs
- SoapAttributeAttribute.cs
- ByteConverter.cs
- ObjectContext.cs
- ConnectionAcceptor.cs
- ClientScriptManager.cs
- externdll.cs
- DecoderFallback.cs
- BrowserCapabilitiesCompiler.cs
- validation.cs
- CompositeControlDesigner.cs
- ProxyFragment.cs
- SecurityDocument.cs
- Addressing.cs
- TimeSpanStorage.cs
- BufferBuilder.cs
- Compiler.cs
- BrushConverter.cs
- RegularExpressionValidator.cs
- XmlSchemaSimpleContentExtension.cs
- Int32AnimationUsingKeyFrames.cs
- TransactionFlowOption.cs
- SyndicationFeed.cs
- ComboBoxRenderer.cs
- SystemUnicastIPAddressInformation.cs
- TemplateBuilder.cs
- NamespaceInfo.cs
- DeviceSpecificChoice.cs
- WebServiceParameterData.cs
- FunctionCommandText.cs
- DataGridHeaderBorder.cs