Home | History | Annotate | Download | only in Core
      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 
     11 namespace mcld {
     12 
     13 InputTree::Succeeder InputTree::Afterward;
     14 InputTree::Includer InputTree::Downward;
     15 
     16 //===----------------------------------------------------------------------===//
     17 // InputTree
     18 //===----------------------------------------------------------------------===//
     19 InputTree& 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 
     34 InputTree& InputTree::enterGroup(TreeIteratorBase pRoot,
     35                                  const InputTree::Mover& pMover) {
     36   NodeBase* node = createNode();
     37   pMover.connect(pRoot, node);
     38   return *this;
     39 }
     40 
     41 InputTree& 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 //===----------------------------------------------------------------------===//
     53 bool isGroup(const InputTree::iterator& pos) {
     54   return !pos.hasData() && !pos.isRoot();
     55 }
     56 
     57 bool isGroup(const InputTree::const_iterator& pos) {
     58   return !pos.hasData() && !pos.isRoot();
     59 }
     60 
     61 bool isGroup(const InputTree::dfs_iterator& pos) {
     62   return !pos.hasData() && !pos.isRoot();
     63 }
     64 
     65 bool isGroup(const InputTree::const_dfs_iterator& pos) {
     66   return !pos.hasData() && !pos.isRoot();
     67 }
     68 
     69 bool isGroup(const InputTree::bfs_iterator& pos) {
     70   return !pos.hasData() && !pos.isRoot();
     71 }
     72 
     73 bool isGroup(const InputTree::const_bfs_iterator& pos) {
     74   return !pos.hasData() && !pos.isRoot();
     75 }
     76 
     77 }  // namespace mcld
     78