Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / Dom / XPathNodeList.cs / 1 / XPathNodeList.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml {
using System.Xml.XPath;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
internal class XPathNodeList: XmlNodeList {
List list;
XPathNodeIterator nodeIterator;
bool done;
public XPathNodeList(XPathNodeIterator nodeIterator) {
this.nodeIterator = nodeIterator;
this.list = new List();
this.done = false;
}
public override int Count {
get {
if (! done) {
ReadUntil(Int32.MaxValue);
}
return list.Count;
}
}
private static readonly object[] nullparams = {};
private XmlNode GetNode(XPathNavigator n) {
IHasXmlNode iHasNode = (IHasXmlNode) n;
return iHasNode.GetNode();
}
internal int ReadUntil(int index) {
int count = list.Count;
while (! done && count <= index) {
if (nodeIterator.MoveNext()) {
XmlNode n = GetNode(nodeIterator.Current);
if (n != null) {
list.Add(n);
count++;
}
} else {
done = true;
break;
}
}
return count;
}
public override XmlNode Item(int index) {
if (list.Count <= index) {
ReadUntil(index);
}
if (index < 0 || list.Count <= index) {
return null;
}
return list[index];
}
public override IEnumerator GetEnumerator() {
return new XmlNodeListEnumerator(this);
}
}
internal class XmlNodeListEnumerator : IEnumerator {
XPathNodeList list;
int index;
bool valid;
public XmlNodeListEnumerator(XPathNodeList list) {
this.list = list;
this.index = -1;
this.valid = false;
}
public void Reset() {
index = -1;
}
public bool MoveNext() {
index++;
int count = list.ReadUntil(index + 1); // read past for delete-node case
if (count - 1 < index) {
return false;
}
valid = (list[index] != null);
return valid;
}
public object Current {
get {
if (valid) {
return list[index];
}
return null;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Marshal.cs
- AspNetPartialTrustHelpers.cs
- StylusDevice.cs
- StatusStrip.cs
- Deflater.cs
- TrackingMemoryStream.cs
- TextBlock.cs
- GridViewRow.cs
- Native.cs
- AsyncStreamReader.cs
- ThemeDictionaryExtension.cs
- IIS7WorkerRequest.cs
- ComponentDispatcher.cs
- TreeNodeBindingCollection.cs
- ResolveNextArgumentWorkItem.cs
- DataGridViewCellConverter.cs
- StorageEntityContainerMapping.cs
- PolicyStatement.cs
- ExecutionContext.cs
- HttpWebRequest.cs
- CompositeFontInfo.cs
- NameSpaceExtractor.cs
- __Filters.cs
- Connection.cs
- SoundPlayerAction.cs
- DisplayInformation.cs
- SemanticResolver.cs
- StrokeIntersection.cs
- PropertyEmitter.cs
- ProxyAttribute.cs
- AutoGeneratedField.cs
- WebPartConnectionsDisconnectVerb.cs
- FamilyTypefaceCollection.cs
- CalendarDay.cs
- ResourceSet.cs
- AttributeSetAction.cs
- OdbcConnectionOpen.cs
- AssemblyAttributes.cs
- XmlSchemaAttributeGroup.cs
- TcpTransportBindingElement.cs
- unsafenativemethodsother.cs
- shaperfactory.cs
- DefaultProfileManager.cs
- InternalsVisibleToAttribute.cs
- UserControlParser.cs
- TextContainerChangeEventArgs.cs
- NativeMethods.cs
- ToolStripSystemRenderer.cs
- BlurEffect.cs
- BaseHashHelper.cs
- SizeLimitedCache.cs
- FatalException.cs
- AddingNewEventArgs.cs
- BindingOperations.cs
- BindingContext.cs
- IfJoinedCondition.cs
- XmlSchemaSubstitutionGroup.cs
- EditorZoneBase.cs
- Parallel.cs
- DataGridViewAdvancedBorderStyle.cs
- SqlFileStream.cs
- ProjectionCamera.cs
- RectIndependentAnimationStorage.cs
- SessionStateItemCollection.cs
- NativeWindow.cs
- WebPartDescriptionCollection.cs
- WebConfigurationFileMap.cs
- ProcessInfo.cs
- EntityViewGenerator.cs
- StringAnimationBase.cs
- CultureMapper.cs
- ExpressionCopier.cs
- ManagementInstaller.cs
- ValidationManager.cs
- dbenumerator.cs
- TextTreeObjectNode.cs
- ActivationServices.cs
- CompositeCollection.cs
- SecurityAlgorithmSuiteConverter.cs
- SecurityException.cs
- GradientStop.cs
- WebConfigurationManager.cs
- CallId.cs
- Internal.cs
- Main.cs
- SmiEventSink_DeferedProcessing.cs
- ListViewUpdatedEventArgs.cs
- HttpSysSettings.cs
- CharConverter.cs
- TranslateTransform3D.cs
- JulianCalendar.cs
- HtmlContainerControl.cs
- HwndMouseInputProvider.cs
- XmlDownloadManager.cs
- COM2PictureConverter.cs
- CompletedAsyncResult.cs
- UseAttributeSetsAction.cs
- MouseGestureConverter.cs
- ControlCodeDomSerializer.cs
- PageStatePersister.cs