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 11using namespace 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{ 23 if (this == &pTree) 24 return *this; 25 26 if (!pTree.empty()) { 27 pMover.connect(pRoot, iterator(pTree.m_Root.node.right)); 28 BinaryTreeBase<Input>::m_Root.summon( 29 pTree.BinaryTreeBase<Input>::m_Root); 30 BinaryTreeBase<Input>::m_Root.delegate(pTree.m_Root); 31 pTree.m_Root.node.left = pTree.m_Root.node.right = &pTree.m_Root.node; 32 } 33 return *this; 34} 35 36InputTree& InputTree::enterGroup(TreeIteratorBase pRoot, 37 const InputTree::Mover& pMover) 38{ 39 NodeBase* node = createNode(); 40 pMover.connect(pRoot, iterator(node)); 41 return *this; 42} 43 44InputTree& InputTree::insert(TreeIteratorBase pRoot, 45 const InputTree::Mover& pMover, 46 mcld::Input& pInput) 47{ 48 BinaryTree<Input>::node_type* node = createNode(); 49 node->data = &pInput; 50 pMover.connect(pRoot, iterator(node)); 51 return *this; 52} 53 54//===----------------------------------------------------------------------===// 55// non-member functions 56//===----------------------------------------------------------------------===// 57bool mcld::isGroup(const InputTree::iterator& pos) 58{ 59 return !pos.hasData() && !pos.isRoot(); 60} 61 62bool mcld::isGroup(const InputTree::const_iterator& pos) 63{ 64 return !pos.hasData() && !pos.isRoot(); 65} 66 67bool mcld::isGroup(const InputTree::dfs_iterator& pos) 68{ 69 return !pos.hasData() && !pos.isRoot(); 70} 71 72bool mcld::isGroup(const InputTree::const_dfs_iterator& pos) 73{ 74 return !pos.hasData() && !pos.isRoot(); 75} 76 77bool mcld::isGroup(const InputTree::bfs_iterator& pos) 78{ 79 return !pos.hasData() && !pos.isRoot(); 80} 81 82bool mcld::isGroup(const InputTree::const_bfs_iterator& pos) 83{ 84 return !pos.hasData() && !pos.isRoot(); 85} 86 87