Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / Dom / XPathNodeList.cs / 1305376 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Stylesheet.cs
- LinqDataSourceStatusEventArgs.cs
- ProvidePropertyAttribute.cs
- ImpersonationContext.cs
- RectangleConverter.cs
- ByteKeyFrameCollection.cs
- TreeNodeStyleCollection.cs
- TextCharacters.cs
- Geometry3D.cs
- EntityContainerAssociationSet.cs
- DataSourceControlBuilder.cs
- DmlSqlGenerator.cs
- RijndaelManaged.cs
- GradientStop.cs
- NativeWindow.cs
- VisualProxy.cs
- FrameworkReadOnlyPropertyMetadata.cs
- ClientTarget.cs
- RowParagraph.cs
- BoundColumn.cs
- KeyboardNavigation.cs
- XmlSortKeyAccumulator.cs
- EditorPartChrome.cs
- ListenerConnectionDemuxer.cs
- RangeBaseAutomationPeer.cs
- Int64Storage.cs
- DataControlFieldCollection.cs
- PointKeyFrameCollection.cs
- NetCodeGroup.cs
- ZipIOExtraField.cs
- KernelTypeValidation.cs
- Win32PrintDialog.cs
- CapabilitiesPattern.cs
- ChineseLunisolarCalendar.cs
- Translator.cs
- SettingsProperty.cs
- ThrowHelper.cs
- WebDescriptionAttribute.cs
- Rect3DValueSerializer.cs
- OdbcEnvironment.cs
- PathFigureCollection.cs
- DocumentViewerBase.cs
- KeyboardEventArgs.cs
- SoapCodeExporter.cs
- Ppl.cs
- WebPartActionVerb.cs
- SoapExtension.cs
- ProviderMetadata.cs
- DefaultCommandExtensionCallback.cs
- BindingSource.cs
- WindowsListView.cs
- _LocalDataStore.cs
- MessageEncodingBindingElement.cs
- FrameSecurityDescriptor.cs
- DictionarySectionHandler.cs
- DictationGrammar.cs
- SortDescriptionCollection.cs
- InkCanvas.cs
- HttpApplicationStateWrapper.cs
- OpenFileDialog.cs
- PolyBezierSegment.cs
- SourceInterpreter.cs
- ColumnReorderedEventArgs.cs
- ListViewEditEventArgs.cs
- _HeaderInfo.cs
- DynamicDocumentPaginator.cs
- XmlTypeAttribute.cs
- TokenizerHelper.cs
- _CommandStream.cs
- DeleteCardRequest.cs
- GeneralTransform2DTo3D.cs
- ProfileService.cs
- _UncName.cs
- HtmlInputSubmit.cs
- GACIdentityPermission.cs
- BaseCAMarshaler.cs
- ContainsSearchOperator.cs
- ChannelServices.cs
- WebPartCloseVerb.cs
- DataIdProcessor.cs
- PartialTrustVisibleAssemblyCollection.cs
- DataBindEngine.cs
- ProfileParameter.cs
- SecurityUtils.cs
- HttpListenerContext.cs
- DocumentEventArgs.cs
- Imaging.cs
- EntityConnectionStringBuilderItem.cs
- AspNetSynchronizationContext.cs
- ComponentRenameEvent.cs
- ListDictionary.cs
- DbConnectionPoolGroup.cs
- DocumentXPathNavigator.cs
- Imaging.cs
- HtmlCalendarAdapter.cs
- ExpressionParser.cs
- DEREncoding.cs
- XmlObjectSerializerWriteContext.cs
- SqlFlattener.cs
- TogglePatternIdentifiers.cs