//===- InputTree.cpp ------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/InputTree.h" namespace mcld { InputTree::Succeeder InputTree::Afterward; InputTree::Includer InputTree::Downward; //===----------------------------------------------------------------------===// // InputTree //===----------------------------------------------------------------------===// InputTree& InputTree::merge(TreeIteratorBase pRoot, const InputTree::Mover& pMover, InputTree& pTree) { if (this == &pTree) return *this; if (!pTree.empty()) { pMover.connect(pRoot, pTree.m_Root.node.right); BinaryTreeBase<Input>::m_Root.summon(pTree.BinaryTreeBase<Input>::m_Root); BinaryTreeBase<Input>::m_Root.delegate(pTree.m_Root); pTree.m_Root.node.left = pTree.m_Root.node.right = &pTree.m_Root.node; } return *this; } InputTree& InputTree::enterGroup(TreeIteratorBase pRoot, const InputTree::Mover& pMover) { NodeBase* node = createNode(); pMover.connect(pRoot, node); return *this; } InputTree& InputTree::insert(TreeIteratorBase pRoot, const InputTree::Mover& pMover, Input& pInput) { BinaryTree<Input>::node_type* node = createNode(); node->data = &pInput; pMover.connect(pRoot, node); return *this; } //===----------------------------------------------------------------------===// // non-member functions //===----------------------------------------------------------------------===// bool isGroup(const InputTree::iterator& pos) { return !pos.hasData() && !pos.isRoot(); } bool isGroup(const InputTree::const_iterator& pos) { return !pos.hasData() && !pos.isRoot(); } bool isGroup(const InputTree::dfs_iterator& pos) { return !pos.hasData() && !pos.isRoot(); } bool isGroup(const InputTree::const_dfs_iterator& pos) { return !pos.hasData() && !pos.isRoot(); } bool isGroup(const InputTree::bfs_iterator& pos) { return !pos.hasData() && !pos.isRoot(); } bool isGroup(const InputTree::const_bfs_iterator& pos) { return !pos.hasData() && !pos.isRoot(); } } // namespace mcld