/Utilities/Collections/TreeNodeCollection.cs
C# | 206 lines | 129 code | 16 blank | 61 comment | 3 complexity | 0ff80430600b974d68ccdd50c2779faf MD5 | raw file
Possible License(s): Apache-2.0
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using NUnit.Framework;
-
- namespace Delta.Utilities.Collections
- {
- /// <summary>
- /// Tree node collection
- /// </summary>
- /// <typeparam name="T">T</typeparam>
- public class TreeNodeCollection<T>
- : IEnumerable<TreeNode<T>>
- {
- #region Count (Public)
- /// <summary>
- /// Count
- /// </summary>
- /// <returns>Int</returns>
- public int Count
- {
- get
- {
- return mList.Count;
- }
- }
- #endregion
-
- #region Owner (Public)
- /// <summary>
- /// Owner
- /// </summary>
- /// <returns>Node</returns>
- public TreeNode<T> Owner
- {
- get
- {
- return mOwner;
- }
- }
- #endregion
-
- #region Item (Public)
- /// <summary>
- /// Indexer
- /// </summary>
- /// <returns>Node</returns>
- public TreeNode<T> this[int index]
- {
- get
- {
- return mList[index];
- }
- }
- #endregion
-
- #region Private
-
- #region mList (Private)
- /// <summary>
- /// mList List
- /// </summary>
- /// <typeparam name="T">T</typeparam>
- private readonly List<TreeNode<T>> mList = new List<TreeNode<T>>();
- #endregion
-
- #region mOwner (Private)
- /// <summary>
- /// mOwner Node
- /// </summary>
- /// <typeparam name="T">T</typeparam>
- private readonly TreeNode<T> mOwner;
- #endregion
-
- #endregion
-
- #region Constructors
- /// <summary>
- /// Create tree node collection
- /// </summary>
- /// <param name="owner">owner</param>
- public TreeNodeCollection(TreeNode<T> owner)
- {
- if (null == owner)
- {
- throw new ArgumentNullException("owner");
- }
- mOwner = owner;
- }
- #endregion
-
- #region IEnumerable Members
- /// <summary>
- /// Standard implementation.
- /// </summary>
- /// <returns>A IEnumerator on the current tree node collection</returns>
- IEnumerator
- IEnumerable.GetEnumerator()
- {
- return mList.GetEnumerator();
- }
- #endregion
-
- #region IEnumerable<TreeNode<T>> Members
- /// <summary>
- /// Get enumerator
- /// </summary>
- /// <returns>IEnumerator</returns>
- public IEnumerator<TreeNode<T>> GetEnumerator()
- {
- return mList.GetEnumerator();
- }
- #endregion
-
- #region Add (Public)
- /// <summary>
- /// Add
- /// </summary>
- /// <param name="rhs">rhs</param>
- public void Add(TreeNode<T> rhs)
- {
- if (mOwner.DoesShareHierarchyWith(rhs))
- {
- throw new InvalidOperationException(
- "Cannot add an ancestor or descendant.");
- }
- mList.Add(rhs);
- rhs.Parent = mOwner;
- }
- #endregion
-
- #region Remove (Public)
- /// <summary>
- /// Remove
- /// </summary>
- /// <param name="rhs">rhs</param>
- public void Remove(TreeNode<T> rhs)
- {
- mList.Remove(rhs);
- rhs.Parent = null;
- }
- #endregion
-
- #region Contains (Public)
- /// <summary>
- /// Does this node contains the given node directly?
- /// </summary>
- /// <param name="rhs">rhs</param>
- /// <returns>True if the list contains the given node</returns>
- public bool Contains(TreeNode<T> rhs)
- {
- return mList.Contains(rhs);
- }
- #endregion
-
- #region Clear (Public)
- /// <summary>
- /// Clear
- /// </summary>
- public void Clear()
- {
- foreach (TreeNode<T> n in this)
- {
- n.Parent = null;
- }
- mList.Clear();
- }
- #endregion
- }
-
- /// <summary>
- /// TreeNodeCollection tests
- /// </summary>
- internal class TreeNodeCollectionTests
- {
- #region TestTreeNode
- /// <summary>
- /// Test tree node
- /// </summary>
- [Test]
- public void TestTreeNode()
- {
- TreeNode<string> root = new TreeNode<string>("ROOT");
- root.Children.Add(new TreeNode<string>("hallo"));
- root.Children.Add(new TreeNode<string>("world"));
- Assert.Equal(root.Children.Count, 2);
- }
- #endregion
-
- #region TestTreeNodeCollection
- /// <summary>
- /// Test tree node collection
- /// </summary>
- [Test]
- public void TestTreeNodeCollection()
- {
- TreeNodeCollection<int> testTreeCollection =
- new TreeNodeCollection<int>(new TreeNode<int>(10));
- testTreeCollection.Add(new TreeNode<int>(2));
- testTreeCollection.Add(new TreeNode<int>(15));
- Assert.Equal(2, testTreeCollection[0].Data);
- Assert.Equal(15, testTreeCollection[1].Data);
- }
- #endregion
- }
- }