Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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.
//
// [....]
//-----------------------------------------------------------------------------
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
- DockProviderWrapper.cs
- XomlCompilerResults.cs
- FilterQueryOptionExpression.cs
- HtmlTableCell.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- KeyboardEventArgs.cs
- XmlCharCheckingReader.cs
- DataGridViewToolTip.cs
- CustomWebEventKey.cs
- SmiEventSink_Default.cs
- Array.cs
- RenderData.cs
- ZoneIdentityPermission.cs
- EntityDataSourceStatementEditor.cs
- GridViewAutomationPeer.cs
- MachineKeySection.cs
- DateTimeOffset.cs
- ObfuscationAttribute.cs
- TextParaClient.cs
- XmlBoundElement.cs
- GridErrorDlg.cs
- XPathNodeInfoAtom.cs
- SvcMapFile.cs
- ThemeableAttribute.cs
- XmlSchemaInferenceException.cs
- GroupBox.cs
- DefaultSerializationProviderAttribute.cs
- InternalResources.cs
- HScrollBar.cs
- exports.cs
- ZipArchive.cs
- AlgoModule.cs
- BufferedStream.cs
- DelegatedStream.cs
- RectAnimationUsingKeyFrames.cs
- EntryIndex.cs
- ConsoleKeyInfo.cs
- Size3DConverter.cs
- InteropAutomationProvider.cs
- SymLanguageVendor.cs
- MethodCallTranslator.cs
- C14NUtil.cs
- KerberosSecurityTokenAuthenticator.cs
- PointCollection.cs
- DescendantQuery.cs
- SelectionItemPattern.cs
- ScriptControlManager.cs
- EncryptedReference.cs
- Win32MouseDevice.cs
- LineBreak.cs
- MetaType.cs
- UnitySerializationHolder.cs
- TextTreeTextBlock.cs
- SubMenuStyle.cs
- SchemaNames.cs
- HtmlLink.cs
- SQLInt16Storage.cs
- PolicyImporterElement.cs
- OneWayChannelListener.cs
- DataGridViewCellEventArgs.cs
- ForEachDesigner.xaml.cs
- DataQuery.cs
- XPathBinder.cs
- UIElementIsland.cs
- ButtonBaseAutomationPeer.cs
- SynchronizationScope.cs
- EntitySqlException.cs
- WindowPatternIdentifiers.cs
- TextControlDesigner.cs
- PagerSettings.cs
- Icon.cs
- TextTabProperties.cs
- KerberosSecurityTokenAuthenticator.cs
- Int32CAMarshaler.cs
- SectionInput.cs
- TokenizerHelper.cs
- PropertiesTab.cs
- DurationConverter.cs
- XmlQualifiedName.cs
- MenuCommand.cs
- Model3DCollection.cs
- OrCondition.cs
- JavaScriptObjectDeserializer.cs
- HtmlInputControl.cs
- BaseCAMarshaler.cs
- DataGridViewAdvancedBorderStyle.cs
- ToolStripMenuItem.cs
- PrivateFontCollection.cs
- XmlWellformedWriter.cs
- HWStack.cs
- BinaryMethodMessage.cs
- IndexedEnumerable.cs
- GlyphElement.cs
- DocComment.cs
- Int64KeyFrameCollection.cs
- FilteredDataSetHelper.cs
- ImageCodecInfoPrivate.cs
- BaseDataList.cs
- MobileComponentEditorPage.cs
- InfiniteTimeSpanConverter.cs