InputTree.cpp revision 5460a1f25d9ddecb5c70667267d66d51af177a99
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MCLDInputTree.cpp --------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/MC/MCLDInputTree.h" 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/MC/InputFactory.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree::Succeeder InputTree::Afterward; 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree::Includer InputTree::Downward; 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// InputTree 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree::InputTree(InputFactory& pInputFactory) 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_FileFactory(pInputFactory) { 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree::~InputTree() 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree& InputTree::merge(InputTree::iterator pPosition, 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const InputTree::Connector& pConnector, 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree& pTree) 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (this == &pTree) 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!pTree.empty()) { 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pConnector.connect(pPosition, iterator(pTree.m_Root.node.right)); 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BinaryTreeBase<Input>::m_Root.summon( 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pTree.BinaryTreeBase<Input>::m_Root); 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BinaryTreeBase<Input>::m_Root.delegate(pTree.m_Root); 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pTree.m_Root.node.left = pTree.m_Root.node.right = &pTree.m_Root.node; 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree& InputTree::insert(InputTree::iterator pPosition, 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const InputTree::Connector& pConnector, 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string& pNamespec, 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const sys::fs::Path& pPath, 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int pType) 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BinaryTree<Input>::node_type* node = createNode(); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao node->data = m_FileFactory.produce(pNamespec, pPath, pType); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pConnector.connect(pPosition, iterator(node)); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree& InputTree::enterGroup(InputTree::iterator pPosition, 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const InputTree::Connector& pConnector) 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NodeBase* node = createNode(); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pConnector.connect(pPosition, iterator(node)); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTree& InputTree::insert(InputTree::iterator pPosition, 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const InputTree::Connector& pConnector, 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const mcld::Input& pInput) 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BinaryTree<Input>::node_type* node = createNode(); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao node->data = const_cast<mcld::Input*>(&pInput); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pConnector.connect(pPosition, iterator(node)); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// non-member functions 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool mcld::isGroup(const InputTree::iterator& pos) 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !pos.hasData(); 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool mcld::isGroup(const InputTree::const_iterator& pos) 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !pos.hasData(); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool mcld::isGroup(const InputTree::dfs_iterator& pos) 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !pos.hasData(); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool mcld::isGroup(const InputTree::const_dfs_iterator& pos) 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !pos.hasData(); 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool mcld::isGroup(const InputTree::bfs_iterator& pos) 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !pos.hasData(); 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool mcld::isGroup(const InputTree::const_bfs_iterator& pos) 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !pos.hasData(); 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 108