1 //------------------------------------------------------------------------------
2 // <copyright file="XmlChildEnumerator.cs" company="Microsoft">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
7 
8 namespace System.Xml {
9     using System.Collections;
10 
11     internal sealed class XmlChildEnumerator: IEnumerator {
12         internal XmlNode container;
13         internal XmlNode child;
14         internal bool isFirst;
15 
XmlChildEnumerator( XmlNode container )16         internal XmlChildEnumerator( XmlNode container ) {
17             this.container = container;
18             this.child = container.FirstChild;
19             this.isFirst = true;
20         }
21 
IEnumerator.MoveNext()22         bool IEnumerator.MoveNext() {
23             return this.MoveNext();
24         }
25 
MoveNext()26         internal bool MoveNext() {
27             if (isFirst) {
28                 child = container.FirstChild;
29                 isFirst = false;
30             }
31             else if (child != null) {
32                 child = child.NextSibling;
33             }
34 
35             return child != null;
36         }
37 
IEnumerator.Reset()38         void IEnumerator.Reset() {
39             isFirst = true;
40             child = container.FirstChild;
41         }
42 
43         object IEnumerator.Current {
44             get {
45                 return this.Current;
46             }
47         }
48 
49         internal XmlNode Current {
50             get {
51                 if (isFirst || child == null)
52                     throw new InvalidOperationException(Res.GetString(Res.Xml_InvalidOperation));
53 
54                 return child;
55             }
56         }
57     }
58 }
59