1//===- InputTree.cpp ------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "mcld/InputTree.h" 10 11namespace mcld { 12 13InputTree::Succeeder InputTree::Afterward; 14InputTree::Includer InputTree::Downward; 15 16//===----------------------------------------------------------------------===// 17// InputTree 18//===----------------------------------------------------------------------===// 19InputTree& InputTree::merge(TreeIteratorBase pRoot, 20 const InputTree::Mover& pMover, 21 InputTree& pTree) { 22 if (this == &pTree) 23 return *this; 24 25 if (!pTree.empty()) { 26 pMover.connect(pRoot, pTree.m_Root.node.right); 27 BinaryTreeBase<Input>::m_Root.summon(pTree.BinaryTreeBase<Input>::m_Root); 28 BinaryTreeBase<Input>::m_Root.delegate(pTree.m_Root); 29 pTree.m_Root.node.left = pTree.m_Root.node.right = &pTree.m_Root.node; 30 } 31 return *this; 32} 33 34InputTree& InputTree::enterGroup(TreeIteratorBase pRoot, 35 const InputTree::Mover& pMover) { 36 NodeBase* node = createNode(); 37 pMover.connect(pRoot, node); 38 return *this; 39} 40 41InputTree& InputTree::insert(TreeIteratorBase pRoot, 42 const InputTree::Mover& pMover, 43 Input& pInput) { 44 BinaryTree<Input>::node_type* node = createNode(); 45 node->data = &pInput; 46 pMover.connect(pRoot, node); 47 return *this; 48} 49 50//===----------------------------------------------------------------------===// 51// non-member functions 52//===----------------------------------------------------------------------===// 53bool isGroup(const InputTree::iterator& pos) { 54 return !pos.hasData() && !pos.isRoot(); 55} 56 57bool isGroup(const InputTree::const_iterator& pos) { 58 return !pos.hasData() && !pos.isRoot(); 59} 60 61bool isGroup(const InputTree::dfs_iterator& pos) { 62 return !pos.hasData() && !pos.isRoot(); 63} 64 65bool isGroup(const InputTree::const_dfs_iterator& pos) { 66 return !pos.hasData() && !pos.isRoot(); 67} 68 69bool isGroup(const InputTree::bfs_iterator& pos) { 70 return !pos.hasData() && !pos.isRoot(); 71} 72 73bool isGroup(const InputTree::const_bfs_iterator& pos) { 74 return !pos.hasData() && !pos.isRoot(); 75} 76 77} // namespace mcld 78