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
- ResXResourceReader.cs
- ScriptComponentDescriptor.cs
- RequestQueryProcessor.cs
- SymbolMethod.cs
- DataBindingsDialog.cs
- NavigationProperty.cs
- EdmItemCollection.cs
- CodeTypeParameterCollection.cs
- NameSpaceExtractor.cs
- DesignerTransactionCloseEvent.cs
- FtpRequestCacheValidator.cs
- HttpModuleAction.cs
- EmulateRecognizeCompletedEventArgs.cs
- glyphs.cs
- Pen.cs
- CriticalHandle.cs
- TemplatedAdorner.cs
- TemplateFactory.cs
- SRef.cs
- PageWrapper.cs
- RadialGradientBrush.cs
- DesignerOptionService.cs
- PagedControl.cs
- CustomActivityDesigner.cs
- ExpressionBuilder.cs
- ProtectedConfigurationProviderCollection.cs
- RSAPKCS1SignatureFormatter.cs
- AppDomainManager.cs
- Size.cs
- HtmlInputText.cs
- BookmarkInfo.cs
- DiscoveryDocument.cs
- ByteAnimation.cs
- MessageSecurityProtocol.cs
- ConsoleTraceListener.cs
- TreeNodeBinding.cs
- SimpleHandlerFactory.cs
- ConfigurationElementProperty.cs
- EntityConnectionStringBuilder.cs
- EventLogPermissionEntry.cs
- EventProviderClassic.cs
- XmlSchemaComplexType.cs
- Type.cs
- SyncMethodInvoker.cs
- SqlGatherProducedAliases.cs
- SelectorAutomationPeer.cs
- ListViewInsertionMark.cs
- sortedlist.cs
- XmlSerializationGeneratedCode.cs
- InvalidWMPVersionException.cs
- XamlVector3DCollectionSerializer.cs
- CircleHotSpot.cs
- FormsAuthenticationModule.cs
- HandoffBehavior.cs
- ManualResetEvent.cs
- ObjectStorage.cs
- SchemaName.cs
- DispatcherOperation.cs
- HttpApplication.cs
- MenuItemStyle.cs
- UriSchemeKeyedCollection.cs
- SafeNativeMethods.cs
- XpsSerializerFactory.cs
- XsltLibrary.cs
- WpfKnownType.cs
- PageHandlerFactory.cs
- TypeElement.cs
- ToolBarButton.cs
- ToolStripSeparator.cs
- Privilege.cs
- XmlException.cs
- RenderOptions.cs
- NamespaceInfo.cs
- UIElement3DAutomationPeer.cs
- DataGridCommandEventArgs.cs
- JsonCollectionDataContract.cs
- JoinSymbol.cs
- Merger.cs
- GPStream.cs
- JsonServiceDocumentSerializer.cs
- WCFServiceClientProxyGenerator.cs
- DrawListViewSubItemEventArgs.cs
- EndpointReference.cs
- WorkflowDesigner.cs
- DBSchemaRow.cs
- UdpDiscoveryEndpointProvider.cs
- StatusBarDrawItemEvent.cs
- ImageSourceConverter.cs
- DbProviderFactory.cs
- AttributeQuery.cs
- HashCodeCombiner.cs
- CreateUserWizard.cs
- WebSysDefaultValueAttribute.cs
- PerspectiveCamera.cs
- GB18030Encoding.cs
- FilteredDataSetHelper.cs
- AnonymousIdentificationModule.cs
- ZoneButton.cs
- NamespaceInfo.cs
- UnsafeNetInfoNativeMethods.cs