//===- MCLDInputTree.cpp --------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/MC/MCLDInputTree.h" #include "mcld/MC/InputFactory.h" using namespace mcld; InputTree::Succeeder InputTree::Afterward; InputTree::Includer InputTree::Downward; //===----------------------------------------------------------------------===// // InputTree InputTree::InputTree(InputFactory& pInputFactory) : m_FileFactory(pInputFactory) { } InputTree::~InputTree() { } InputTree& InputTree::merge(InputTree::iterator pPosition, const InputTree::Connector& pConnector, InputTree& pTree) { if (this == &pTree) return *this; if (!pTree.empty()) { pConnector.connect(pPosition, iterator(pTree.m_Root.node.right)); BinaryTreeBase::m_Root.summon( pTree.BinaryTreeBase::m_Root); BinaryTreeBase::m_Root.delegate(pTree.m_Root); pTree.m_Root.node.left = pTree.m_Root.node.right = &pTree.m_Root.node; } return *this; } InputTree& InputTree::insert(InputTree::iterator pPosition, const InputTree::Connector& pConnector, const std::string& pNamespec, const sys::fs::Path& pPath, unsigned int pType) { BinaryTree::node_type* node = createNode(); node->data = m_FileFactory.produce(pNamespec, pPath, pType); pConnector.connect(pPosition, iterator(node)); return *this; } InputTree& InputTree::enterGroup(InputTree::iterator pPosition, const InputTree::Connector& pConnector) { NodeBase* node = createNode(); pConnector.connect(pPosition, iterator(node)); return *this; } InputTree& InputTree::insert(InputTree::iterator pPosition, const InputTree::Connector& pConnector, const mcld::Input& pInput) { BinaryTree::node_type* node = createNode(); node->data = const_cast(&pInput); pConnector.connect(pPosition, iterator(node)); return *this; } //===----------------------------------------------------------------------===// // non-member functions bool mcld::isGroup(const InputTree::iterator& pos) { return !pos.hasData(); } bool mcld::isGroup(const InputTree::const_iterator& pos) { return !pos.hasData(); } bool mcld::isGroup(const InputTree::dfs_iterator& pos) { return !pos.hasData(); } bool mcld::isGroup(const InputTree::const_dfs_iterator& pos) { return !pos.hasData(); } bool mcld::isGroup(const InputTree::bfs_iterator& pos) { return !pos.hasData(); } bool mcld::isGroup(const InputTree::const_bfs_iterator& pos) { return !pos.hasData(); }