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
- StylesEditorDialog.cs
- FontConverter.cs
- HTMLTextWriter.cs
- Fonts.cs
- MappedMetaModel.cs
- EventMappingSettings.cs
- CancellationTokenSource.cs
- ProxyWebPartConnectionCollection.cs
- CopyAction.cs
- XmlSchemaObjectTable.cs
- PersonalizationProvider.cs
- HttpClientChannel.cs
- MouseGestureConverter.cs
- RootAction.cs
- ListParagraph.cs
- CodeMemberField.cs
- ConfigXmlCDataSection.cs
- ImageMapEventArgs.cs
- DaylightTime.cs
- CollectionType.cs
- SchemaNames.cs
- AppDomainFactory.cs
- StyleConverter.cs
- SoapTypeAttribute.cs
- RSACryptoServiceProvider.cs
- RoleGroupCollection.cs
- AutomationIdentifierGuids.cs
- ComponentSerializationService.cs
- SetIterators.cs
- MemberMaps.cs
- RectangleGeometry.cs
- ObjectDataSourceDisposingEventArgs.cs
- FullTextLine.cs
- HashSetEqualityComparer.cs
- Point4D.cs
- ConfigsHelper.cs
- AliasedExpr.cs
- PaintValueEventArgs.cs
- SamlSubjectStatement.cs
- SessionSymmetricMessageSecurityProtocolFactory.cs
- ReflectionServiceProvider.cs
- ReferencedCollectionType.cs
- PropertyGridCommands.cs
- ScriptResourceAttribute.cs
- HitTestWithPointDrawingContextWalker.cs
- UInt16Converter.cs
- PrivateFontCollection.cs
- AbstractExpressions.cs
- RightsManagementManager.cs
- OleDbRowUpdatedEvent.cs
- FormParameter.cs
- SiteMap.cs
- VectorAnimationBase.cs
- ChannelSinkStacks.cs
- Base64Encoding.cs
- EncodingNLS.cs
- GeneralTransform.cs
- URI.cs
- Int32AnimationBase.cs
- StickyNoteAnnotations.cs
- VerificationAttribute.cs
- ImageSource.cs
- SmiConnection.cs
- ExtractorMetadata.cs
- ResourceReferenceExpression.cs
- UriTemplatePathSegment.cs
- ImageEditor.cs
- ValueExpressions.cs
- OdbcPermission.cs
- XmlSerializerNamespaces.cs
- CompilerTypeWithParams.cs
- TypeContext.cs
- SmiTypedGetterSetter.cs
- FontFamilyConverter.cs
- listitem.cs
- ByteStreamMessageEncoder.cs
- ResXDataNode.cs
- DependentList.cs
- SqlHelper.cs
- FloaterBaseParaClient.cs
- XamlWriter.cs
- GridSplitter.cs
- RowsCopiedEventArgs.cs
- LoadedOrUnloadedOperation.cs
- ChannelListenerBase.cs
- TrackBarRenderer.cs
- DisableDpiAwarenessAttribute.cs
- StylusPlugInCollection.cs
- ExpressionHelper.cs
- Serializer.cs
- SimplePropertyEntry.cs
- _StreamFramer.cs
- ClusterRegistryConfigurationProvider.cs
- TagMapCollection.cs
- Util.cs
- BinaryEditor.cs
- JumpPath.cs
- Pair.cs
- _HeaderInfoTable.cs
- DropShadowBitmapEffect.cs