XmlDiffPathSingleNodeList.cs
上传用户:hbhltzc
上传日期:2022-06-04
资源大小:1925k
文件大小:5k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. //  ---------------------------------------------------------------------------
  2. // <copyright company="Microsoft Corporation" file="XmlDiffPathSingleNodeList.cs">
  3. //     Copyright (c) Microsoft Corporation 2005
  4. // </copyright>
  5. // <project>
  6. //     XmlDiffView
  7. // </project>
  8. // <summary>
  9. //    A collection containing a single node  
  10. // </summary>
  11. // <history>
  12. //      [barryw] 03/07/2005 Created
  13. // </history>
  14. //  ---------------------------------------------------------------------------
  15. namespace Microsoft.XmlDiffPatch
  16. {
  17.     #region Using directives
  18.     using System;
  19.     #endregion
  20.     /// <summary>
  21.     /// Class to create a collection containing only a single node.
  22.     /// </summary>
  23.     internal class XmlDiffPathSingleNodeList : XmlDiffPathNodeList
  24.     {
  25.         #region Constants section
  26.         #endregion
  27.         #region Member variables section
  28.         
  29.         /// <summary>
  30.         /// Declares a node object.
  31.         /// </summary>
  32.         private XmlDiffViewNode node;
  33.         /// <summary>
  34.         /// Initialize the nodes state. 
  35.         /// </summary>
  36.         private State state = State.BeforeNode;
  37.         #endregion
  38.         
  39.         #region  Constructors section
  40.         /// <summary>
  41.         /// Constructor
  42.         /// </summary>
  43.         public XmlDiffPathSingleNodeList()
  44.         {
  45.         }
  46.         #endregion
  47.         #region Destructors section
  48.         #endregion
  49.         #region Delegates section
  50.         #endregion
  51.        
  52.         #region Events section
  53.         #endregion
  54.         
  55.         #region Enums section
  56.         /// <summary>
  57.         /// Node states
  58.         /// </summary>
  59.         public enum State
  60.         {
  61.             /// <summary>
  62.             /// Positioned before the node
  63.             /// </summary>
  64.             BeforeNode = 0,
  65.             /// <summary>
  66.             /// Positioned on the node
  67.             /// </summary>
  68.             OnNode = 1,
  69.             /// <summary>
  70.             /// Positioned after the node
  71.             /// </summary>
  72.             AfterNode = 2
  73.         }
  74.         #endregion
  75.         
  76.         #region Interfaces section
  77.         #endregion
  78.         
  79.         #region Properties section
  80.         /// <summary>
  81.         /// Gets the count of the nodes in the list.
  82.         /// </summary>
  83.         public override int Count
  84.         {
  85.             get
  86.             {
  87.                 // fixed at a single node
  88.                 return 1;
  89.             }
  90.         }
  91.         /// <summary>
  92.         /// Gets a reference to the current node.  Returns 
  93.         /// null if not positioned on the node. 
  94.         /// </summary>
  95.         public override XmlDiffViewNode Current
  96.         {
  97.             get
  98.             {
  99.                 return (this.state == State.OnNode) ? this.node : null;
  100.             }
  101.         }
  102.         /// <summary>
  103.         /// Gets a reference to the node regardless of its state. 
  104.         /// </summary>
  105.         public XmlDiffViewNode Node
  106.         {
  107.             get
  108.             {
  109.                 return this.node;
  110.             }
  111.         }
  112.         /// <summary>
  113.         /// Sets the state of the node.
  114.         /// </summary>
  115.         public State NodePostion
  116.         {
  117.             set
  118.             {
  119.                 this.state = value;
  120.             }
  121.         }
  122.         #endregion
  123.         
  124.         #region Indexers section
  125.         #endregion
  126.         
  127.         #region Methods section
  128.         /// <summary>
  129.         /// Change the state of the node's position.
  130.         /// </summary>
  131.         /// <returns>Changed the node's position state</returns>
  132.         public override bool MoveNext()
  133.         {
  134.             switch (this.state)
  135.             {
  136.                 case State.BeforeNode:
  137.                     this.state = State.OnNode;
  138.                     return true;
  139.                 case State.OnNode:
  140.                     this.state = State.AfterNode;
  141.                     return false;
  142.                 case State.AfterNode:
  143.                     return false;
  144.                 default:
  145.                     return false;
  146.             }
  147.         }
  148.         /// <summary>
  149.         /// Reset the nodes position
  150.         /// </summary>
  151.         public override void Reset()
  152.         {
  153.             this.state = State.BeforeNode;
  154.         }
  155.         /// <summary>
  156.         /// Add a node to the list.  This method should only be 
  157.         /// called once otherwise an exception will be raised.
  158.         /// </summary>
  159.         /// <param name="node">The node to add</param>
  160.         public override void AddNode(XmlDiffViewNode node)
  161.         {
  162.             if (this.node != null)
  163.             {
  164.                 throw new Exception(
  165.                     "XmlDiffPathSingleNodeList can contain one node only.");
  166.             }
  167.             this.node = node;
  168.         }
  169.         #endregion
  170.         
  171.         #region Structs section
  172.         #endregion
  173.         
  174.         #region Subclasses section
  175.         #endregion
  176.     }
  177. }