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
- SwitchElementsCollection.cs
- PointF.cs
- WrappedIUnknown.cs
- SwitchAttribute.cs
- Pkcs7Signer.cs
- EmptyReadOnlyDictionaryInternal.cs
- basemetadatamappingvisitor.cs
- SecurityContext.cs
- TableRowCollection.cs
- PageSetupDialog.cs
- PersonalizationStateQuery.cs
- SmtpSection.cs
- SourceFileInfo.cs
- COM2Enum.cs
- ServicePointManagerElement.cs
- SerializerProvider.cs
- ClockGroup.cs
- IntAverageAggregationOperator.cs
- TimerElapsedEvenArgs.cs
- NetMsmqBindingCollectionElement.cs
- ListParagraph.cs
- SpinWait.cs
- SymDocumentType.cs
- UnsafeNativeMethods.cs
- ErrorLog.cs
- ManagedCodeMarkers.cs
- EdmToObjectNamespaceMap.cs
- WebPartDesigner.cs
- WebReferencesBuildProvider.cs
- LifetimeServices.cs
- FlowSwitchLink.cs
- EditorZoneBase.cs
- SerTrace.cs
- EtwTrackingBehavior.cs
- Point3DAnimation.cs
- InternalPermissions.cs
- XmlDocumentType.cs
- _AutoWebProxyScriptEngine.cs
- SHA512Managed.cs
- FormsAuthenticationUserCollection.cs
- XsltFunctions.cs
- DataColumn.cs
- EntityDataSourceUtil.cs
- MessageSmuggler.cs
- WebSysDisplayNameAttribute.cs
- WebPartZoneCollection.cs
- ListBoxItemWrapperAutomationPeer.cs
- XmlRawWriter.cs
- _NetRes.cs
- PartialToken.cs
- XmlCharCheckingWriter.cs
- ScriptingWebServicesSectionGroup.cs
- Paragraph.cs
- SupportingTokenParameters.cs
- Label.cs
- ConfigurationValidatorAttribute.cs
- XmlValidatingReader.cs
- WebUtil.cs
- SharedDp.cs
- AuthenticationManager.cs
- TimelineGroup.cs
- ValidationError.cs
- ObjectDataSourceWizardForm.cs
- ParameterToken.cs
- IsolatedStorageFileStream.cs
- AccessKeyManager.cs
- ResourceProviderFactory.cs
- DescendantBaseQuery.cs
- CachedFontFace.cs
- WebPartCatalogCloseVerb.cs
- AuthenticatedStream.cs
- ParameterToken.cs
- ApplicationSecurityManager.cs
- Axis.cs
- ResourceProperty.cs
- CodeEntryPointMethod.cs
- PageEventArgs.cs
- TemplatedAdorner.cs
- sqlstateclientmanager.cs
- StorageMappingItemLoader.cs
- FunctionOverloadResolver.cs
- PathStreamGeometryContext.cs
- Grid.cs
- RowParagraph.cs
- Unit.cs
- BuildManager.cs
- _HeaderInfoTable.cs
- ControlParameter.cs
- LinkLabel.cs
- BufferedGraphicsManager.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- _ConnectOverlappedAsyncResult.cs
- ObjectView.cs
- Point3DAnimation.cs
- CreateUserWizardStep.cs
- CDSsyncETWBCLProvider.cs
- SQLMembershipProvider.cs
- ResourceManagerWrapper.cs
- ClosureBinding.cs
- OleDbException.cs