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
- SystemTcpStatistics.cs
- AmbiguousMatchException.cs
- IntSecurity.cs
- JsonMessageEncoderFactory.cs
- GridViewRow.cs
- DataControlFieldHeaderCell.cs
- CommonObjectSecurity.cs
- ReadWriteControlDesigner.cs
- BoundPropertyEntry.cs
- XPathException.cs
- SqlFlattener.cs
- OperationAbortedException.cs
- XmlDataSource.cs
- FontSource.cs
- _TimerThread.cs
- PriorityQueue.cs
- ToolStripLabel.cs
- HtmlTernaryTree.cs
- SingleAnimationUsingKeyFrames.cs
- Preprocessor.cs
- GetCertificateRequest.cs
- HiddenFieldPageStatePersister.cs
- TransportSecurityHelpers.cs
- AppDomainAttributes.cs
- CaseStatementProjectedSlot.cs
- FixedSOMLineCollection.cs
- UpdateCommand.cs
- CfgRule.cs
- GroupBoxRenderer.cs
- FileUtil.cs
- StreamGeometry.cs
- DataBoundControlAdapter.cs
- ImageField.cs
- ClrProviderManifest.cs
- WebRequestModuleElement.cs
- RotateTransform.cs
- AccessedThroughPropertyAttribute.cs
- BaseTemplateCodeDomTreeGenerator.cs
- XmlWhitespace.cs
- SspiSafeHandles.cs
- ProviderManager.cs
- ImageConverter.cs
- returneventsaver.cs
- WebPartZoneBase.cs
- ExtensionQuery.cs
- GenericRootAutomationPeer.cs
- TemplateEditingService.cs
- InheritanceContextChangedEventManager.cs
- CultureSpecificCharacterBufferRange.cs
- StringFreezingAttribute.cs
- ConfigurationElementProperty.cs
- MenuCommands.cs
- RegexCaptureCollection.cs
- DataGrid.cs
- ParagraphVisual.cs
- NumericUpDownAcceleration.cs
- MenuBase.cs
- ScriptControlDescriptor.cs
- SelectionRange.cs
- BooleanKeyFrameCollection.cs
- TypeUsage.cs
- AssertFilter.cs
- MatrixAnimationUsingPath.cs
- StorageFunctionMapping.cs
- SHA256CryptoServiceProvider.cs
- SkewTransform.cs
- VirtualPathProvider.cs
- ThreadAttributes.cs
- RelatedImageListAttribute.cs
- HtmlInputPassword.cs
- BindingGraph.cs
- MailSettingsSection.cs
- AdPostCacheSubstitution.cs
- Cursor.cs
- ManipulationVelocities.cs
- IteratorFilter.cs
- BlockExpression.cs
- FixedSOMImage.cs
- ConnectionStringSettings.cs
- Ref.cs
- EFTableProvider.cs
- HitTestWithPointDrawingContextWalker.cs
- SocketPermission.cs
- TypeRefElement.cs
- DSASignatureFormatter.cs
- TextBoxAutoCompleteSourceConverter.cs
- HtmlTextArea.cs
- DataGridLength.cs
- HiddenField.cs
- SafeNativeMethods.cs
- UpDownEvent.cs
- DataGridRelationshipRow.cs
- XmlFileEditor.cs
- httpserverutility.cs
- TabPage.cs
- Rights.cs
- HttpWriter.cs
- ClientType.cs
- ProtectedConfiguration.cs
- ImageMap.cs