-// System.Xml.XmlLinkedNode.cs\r
-//\r
-// Author: Daniel Weber (daniel-weber@austin.rr.com)\r
-//\r
-// Implementation of abstract Xml.XmlLinkedNode class\r
+//
+// System.Xml.XmlLinkedNode
+//
+// Authors:
+// Jason Diamond <jason@injektilo.org>
+// Kral Ferch <kral_ferch@hotmail.com>
+//
+// (C) 2002 Jason Diamond, Kral Ferch
+//
\r
-using System;\r
-\r
-namespace System.Xml\r
-{\r
- public abstract class XmlLinkedNode : XmlNode\r
- {\r
- private XmlNode _nextSibling;\r
- private XmlNode _previousSibling;\r
-\r
- // ============ Properties ============================================\r
- //=====================================================================\r
- /// <summary>\r
- /// Get the node immediately following this node\r
- /// </summary>\r
- public override XmlNode NextSibling\r
- {\r
- get\r
- {\r
- return _nextSibling;\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Get the node immediately previous to this node\r
- /// </summary>\r
- public override XmlNode PreviousSibling \r
- {\r
- get\r
- {\r
- return _previousSibling;\r
- }\r
- }\r
-\r
- // Internal accessor methods\r
- //===========================================================================\r
- internal void setPreviousNode ( XmlNode previous )\r
- {\r
- _previousSibling = previous;\r
- }\r
-\r
- internal void setNextSibling ( XmlNode next )\r
- {\r
- _nextSibling = next;\r
- }\r
- }\r
-}
\ No newline at end of file
+using System;
+
+namespace System.Xml
+{
+ public abstract class XmlLinkedNode : XmlNode
+ {
+ #region Fields
+
+ XmlLinkedNode nextSibling;
+
+ #endregion
+
+ #region Constructors
+ internal XmlLinkedNode(XmlDocument doc) : base(doc) { }
+
+ #endregion
+
+ #region Properties
+
+ public override XmlNode NextSibling
+ {
+ get {
+ if (Object.ReferenceEquals(nextSibling, ParentNode.LastLinkedChild.NextLinkedSibling) == false) {
+ return nextSibling;
+ }
+ else {
+ return null;
+ }
+ }
+ }
+
+ internal XmlLinkedNode NextLinkedSibling
+ {
+ get { return nextSibling; }
+ set { nextSibling = value; }
+ }
+
+ public override XmlNode PreviousSibling
+ {
+ get {
+ if (ParentNode != null) {
+ XmlNode node = ParentNode.FirstChild;
+ if (node != this) {
+ do {
+ if (node.NextSibling == this)
+ return node;
+ } while ((node = node.NextSibling) != null);
+ }
+ }
+ return null;
+ }
+ }
+
+ #endregion
+ }
+}