2 package net.pterodactylus.util.data;
4 import java.util.Iterator;
7 * A node that can be stored in a {@link Tree}. A node has exactly one parent
8 * (which is <code>null</code> if the node is the {@link Tree#getRootNode()}
9 * of the tree) and an arbitrary amount of child nodes.
11 * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
13 * The type of the element to store
15 public interface Node<E> extends Iterable<Node<E>> {
18 * Returns the parent node of the node.
20 * @return The parent node
22 public Node<E> getParent();
25 * Returns the element that is stored in the node.
27 * @return The node’s element
29 public E getElement();
32 * Adds an element as a child to this node and returns the created node.
35 * The child node’s element
36 * @return The created child node
38 public Node<E> addChild(E child);
41 * Returns the number of children this node has.
43 * @return The number of children
48 * Returns the child at the given index.
51 * The index of the child
52 * @return The child at the given index
54 public Node<E> getChild(int index);
57 * Returns whether the given node is a direct child of this node.
61 * @return <code>true</code> if the given node is a direct child of this
62 * node, <code>false</code> otherwise
64 public boolean hasChildNode(Node<E> childNode);
67 * Returns the index of the given child node.
71 * @return The index of the child node, or <code>-1</code> if the child
72 * node is not a child node of this node
74 public int getIndexOfChild(Node<E> childNode);
77 * Returns the index of the child node containing the given element.
81 * @return The index of the child node, or <code>-1</code> if the child
82 * node is not a child node of this node
84 public int getIndexOfChild(E element);
87 * Remove the given child node from this node. If the given node is not a
88 * child of this node, nothing happens.
91 * The child node to remove
93 public void removeChild(Node<E> childNode);
96 * Removes the child node that contains the given element. The element in
97 * the node is checked using {@link Object#equals(Object)}.
100 * The child element to remove
102 public void removeChild(E child);
105 * Removes the child at the given index.
108 * The index of the child to remove
110 public void removeChild(int childIndex);
115 public Iterator<Node<E>> iterator();
118 * Searches this node’s children recursively for a node that contains the
122 * The element to search
123 * @return The node that contains the given element, or <code>null</code>
124 * if no node could be found
126 public Node<E> findChild(E element);