Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / XPath / XPathNodeIterator.cs / 5 / 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
- ServiceEndpointElementCollection.cs
- XmlSchemaProviderAttribute.cs
- Crc32.cs
- FilterQuery.cs
- TemplateLookupAction.cs
- DataGridRow.cs
- XsltSettings.cs
- TableItemStyle.cs
- QilTypeChecker.cs
- StateDesigner.cs
- CookielessData.cs
- SqlParameterCollection.cs
- PriorityChain.cs
- Int16KeyFrameCollection.cs
- BindingElementExtensionElement.cs
- ObjectCloneHelper.cs
- SecUtil.cs
- WebSysDisplayNameAttribute.cs
- EventSetter.cs
- UserControlParser.cs
- DbMetaDataFactory.cs
- XmlNamespaceDeclarationsAttribute.cs
- DataGridViewBindingCompleteEventArgs.cs
- RegexParser.cs
- ClickablePoint.cs
- MetabaseSettingsIis7.cs
- UpdateProgress.cs
- SqlLiftIndependentRowExpressions.cs
- CommonProperties.cs
- SHA256Managed.cs
- CompModSwitches.cs
- SafeFileHandle.cs
- StorageSetMapping.cs
- ControlIdConverter.cs
- MenuItem.cs
- Propagator.Evaluator.cs
- HitTestDrawingContextWalker.cs
- ResXBuildProvider.cs
- PersonalizableTypeEntry.cs
- FilteredXmlReader.cs
- SchemaConstraints.cs
- SymmetricAlgorithm.cs
- ListBindingHelper.cs
- StackSpiller.Bindings.cs
- WebServiceEnumData.cs
- AnimationClock.cs
- PostBackTrigger.cs
- ModifiableIteratorCollection.cs
- LocalBuilder.cs
- SizeLimitedCache.cs
- UiaCoreApi.cs
- CssStyleCollection.cs
- TraceEventCache.cs
- ListView.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- DataBindingCollectionConverter.cs
- GridItemProviderWrapper.cs
- NameValuePair.cs
- GeometryDrawing.cs
- CompModSwitches.cs
- Geometry.cs
- FixedSOMTableRow.cs
- ControlCachePolicy.cs
- HScrollProperties.cs
- TableLayoutColumnStyleCollection.cs
- StylusTip.cs
- mongolianshape.cs
- CustomTypeDescriptor.cs
- DefaultTypeArgumentAttribute.cs
- ListViewInsertedEventArgs.cs
- Win32Exception.cs
- ItemChangedEventArgs.cs
- RegexFCD.cs
- WebPartTransformerAttribute.cs
- DSASignatureFormatter.cs
- WebResourceAttribute.cs
- SpotLight.cs
- AuthenticationServiceManager.cs
- PropertyGridView.cs
- IisTraceWebEventProvider.cs
- HttpPostedFileWrapper.cs
- PipelineModuleStepContainer.cs
- ReachDocumentReferenceCollectionSerializerAsync.cs
- ListItemParagraph.cs
- Html32TextWriter.cs
- EDesignUtil.cs
- SoapIgnoreAttribute.cs
- OciLobLocator.cs
- WindowsPen.cs
- NoPersistProperty.cs
- DeobfuscatingStream.cs
- ToolStripTextBox.cs
- WindowsGrip.cs
- RuleAction.cs
- RadioButtonFlatAdapter.cs
- OdbcConnectionOpen.cs
- SqlDataSourceCommandParser.cs
- DetailsViewPageEventArgs.cs
- SqlGatherProducedAliases.cs
- NameSpaceExtractor.cs