const DomainTreeNode<T>*
previousNode(DomainTreeNodeChain<T>& node_path) const;
+ /// \brief return the largest node in the tree of trees.
+ ///
+ /// \return A \c DomainTreeNode that is the largest node in the
+ /// tree. If there are no nodes, then \c NULL is returned.
+ const DomainTreeNode<T>*
+ largestNode() const;
+
/// \brief Get the total number of nodes in the tree
///
/// It includes nodes internally created as a result of adding a domain
return (node);
}
+template <typename T>
+const DomainTreeNode<T>*
+DomainTree<T>::largestNode() const {
+ const DomainTreeNode<T>* node = root_.get();
+ while (node != NULL) {
+ // We go right first, then down.
+ if (node->getRight() != NULL) {
+ node = node->getRight();
+ } else if (node->getDown() != NULL) {
+ node = node->getDown();
+ } else {
+ break;
+ }
+ }
+
+ return (node);
+}
+
template <typename T>
typename DomainTree<T>::Result
DomainTree<T>::insert(util::MemorySegment& mem_sgmt,
}
}
+TEST_F(DomainTreeTest, largestNode) {
+ cdtnode = dtree.largestNode();
+ EXPECT_EQ(Name("k"), cdtnode->getName());
+}
+
TEST_F(DomainTreeTest, nextNodeError) {
// Empty chain for nextNode() is invalid.
TestDomainTreeNodeChain chain;