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
- TextSegment.cs
- Font.cs
- RenderCapability.cs
- EntityDataSourceStatementEditorForm.cs
- PaginationProgressEventArgs.cs
- HtmlTernaryTree.cs
- SubpageParaClient.cs
- MimeMultiPart.cs
- Context.cs
- WebPartDeleteVerb.cs
- ShaperBuffers.cs
- XmlToDatasetMap.cs
- EmptyEnumerator.cs
- _WinHttpWebProxyDataBuilder.cs
- RuleSetCollection.cs
- HandoffBehavior.cs
- Directory.cs
- PolyLineSegment.cs
- AdRotator.cs
- XmlnsPrefixAttribute.cs
- CommonProperties.cs
- _SslStream.cs
- DbProviderSpecificTypePropertyAttribute.cs
- PrinterSettings.cs
- ContainerCodeDomSerializer.cs
- GeneralTransform3DGroup.cs
- DataBindingCollectionConverter.cs
- BitmapPalette.cs
- Binding.cs
- SystemColors.cs
- MatrixAnimationUsingPath.cs
- DataBoundControlAdapter.cs
- StateMachineDesignerPaint.cs
- ValueConversionAttribute.cs
- OracleConnection.cs
- SspiNegotiationTokenProviderState.cs
- HttpModuleCollection.cs
- SecurityDocument.cs
- XmlImplementation.cs
- TemplateDefinition.cs
- DashStyles.cs
- ControlCommandSet.cs
- DateTimeConverter2.cs
- TimeZoneNotFoundException.cs
- StrokeCollectionConverter.cs
- HttpTransportBindingElement.cs
- Debugger.cs
- ProcessHostMapPath.cs
- EntityAdapter.cs
- XDRSchema.cs
- XmlSchemas.cs
- Preprocessor.cs
- QilInvokeEarlyBound.cs
- EditorReuseAttribute.cs
- ControlIdConverter.cs
- CodeTypeMember.cs
- DiscardableAttribute.cs
- AxisAngleRotation3D.cs
- WebPartVerbsEventArgs.cs
- CompiledQueryCacheEntry.cs
- TextServicesPropertyRanges.cs
- PageClientProxyGenerator.cs
- ProgressBarBrushConverter.cs
- DataTableExtensions.cs
- SoapCodeExporter.cs
- DiscoveryServerProtocol.cs
- LogPolicy.cs
- RNGCryptoServiceProvider.cs
- DataControlFieldCell.cs
- StandardRuntimeEnumValidatorAttribute.cs
- fixedPageContentExtractor.cs
- _WinHttpWebProxyDataBuilder.cs
- EdgeProfileValidation.cs
- WorkflowTimerService.cs
- Int64.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- EventLevel.cs
- PeerNearMe.cs
- ColorAnimationUsingKeyFrames.cs
- PaintValueEventArgs.cs
- IRCollection.cs
- ToolBarTray.cs
- InputLangChangeEvent.cs
- QueryableFilterUserControl.cs
- EdmType.cs
- TextPointer.cs
- CodeIdentifiers.cs
- CommunicationObject.cs
- TextDecorationCollectionConverter.cs
- DbParameterCollection.cs
- RectangleHotSpot.cs
- ObjectStateEntry.cs
- SizeF.cs
- NetStream.cs
- HttpListener.cs
- UnsafeNativeMethods.cs
- RelativeSource.cs
- EDesignUtil.cs
- DefaultSection.cs
- FontUnitConverter.cs