⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncbi_tree.hpp

📁 ncbi源码
💻 HPP
📖 第 1 页 / 共 2 页
字号:
}/////////////////////////////////////////////////////////////////////////////////  CTreeNode<TValue>//template<class TValue>CTreeNode<TValue>::CTreeNode(const TValue& value): m_Parent(0),  m_Value(value){}template<class TValue>CTreeNode<TValue>::~CTreeNode(){    _ASSERT(m_Parent == 0);    ITERATE(typename TNodeList, it, m_Nodes) {        CTreeNode* node = *it;        node->m_Parent = 0;        delete node;    }}template<class TValue>CTreeNode<TValue>::CTreeNode(const TTreeType& tree): m_Parent(0),  m_Value(tree.m_Value){    CopyFrom(tree);}template<class TValue>CTreeNode<TValue>& CTreeNode<TValue>::operator=(const TTreeType& tree){    NON_CONST_ITERATE(typename TNodeList, it, m_Nodes) {        CTreeNode* node = *it;        delete node;    }    m_Nodes.clear();    CopyFrom(tree);    return *this;}template<class TValue>void CTreeNode<TValue>::CopyFrom(const TTreeType& tree){    ITERATE(typename TNodeList, it, tree.m_Nodes) {        const CTreeNode* src_node = *it;        CTreeNode* new_node = new CTreeNode(*src_node);        AddNode(new_node);    }}template<class TValue>void CTreeNode<TValue>::RemoveNode(TTreeType* subnode){    NON_CONST_ITERATE(typename TNodeList, it, m_Nodes) {        CTreeNode* node = *it;        if (node == subnode) {            m_Nodes.erase(it);            node->m_Parent = 0;            delete node;            break;        }    }    }template<class TValue>void CTreeNode<TValue>::RemoveNode(TNodeList_I it){    CTreeNode* node = *it;    node->m_Parent = 0;    m_Nodes.erase(it);    delete node;}template<class TValue>typename CTreeNode<TValue>::TTreeType* CTreeNode<TValue>::DetachNode(typename CTreeNode<TValue>::TTreeType* subnode){    NON_CONST_ITERATE(typename TNodeList, it, m_Nodes) {        CTreeNode* node = *it;        if (node == subnode) {            m_Nodes.erase(it);            node->SetParent(0);            return node;        }    }            return 0;}template<class TValue>typename CTreeNode<TValue>::TTreeType* CTreeNode<TValue>::DetachNode(typename CTreeNode<TValue>::TNodeList_I it){    CTreeNode* node = *it;    m_Nodes.erase(it);    node->SetParent(0);    return node;}template<class TValue>void CTreeNode<TValue>::AddNode(typename CTreeNode<TValue>::TTreeType* subnode){    _ASSERT(subnode != this);    m_Nodes.push_back(subnode);    subnode->SetParent(this);}template<class TValue>CTreeNode<TValue>* CTreeNode<TValue>::AddNode(const TValue& val){    TTreeType* subnode = new TTreeType(val);    AddNode(subnode);    return subnode;}template<class TValue>void CTreeNode<TValue>::MoveSubnodes(TTreeType* src_tree_node){    _ASSERT(!IsParent(*src_tree_node));    TNodeList& src_nodes = src_tree_node->m_Nodes;    ITERATE(typename TNodeList, it, src_nodes) {        AddNode(*it);    }    src_nodes.clear();}template<class TValue>void CTreeNode<TValue>::InsertNode(TNodeList_I it,                                   TTreeType* subnode){    m_Nodes.insert(it, subnode);    subnode->SetParent(this);}template<class TValue>void CTreeNode<TValue>::RemoveAllSubNodes(EDeletePolicy del){    if (del == eDelete) {        NON_CONST_ITERATE(typename TNodeList, it, m_Nodes) {            CTreeNode* node = *it;            delete node;        }    }    m_Nodes.clear();}template<class TValue>const typename CTreeNode<TValue>::TTreeType* CTreeNode<TValue>::GetRoot() const{    const TTreeType* node_ptr = this;    while (true) {        const TTreeType* parent = node_ptr->GetParent();        if (parent)            node_ptr = parent;        else            break;    }    return node_ptr;}template<class TValue>typename CTreeNode<TValue>::TTreeType* CTreeNode<TValue>::GetRoot(){    TTreeType* node_ptr = this;    while (true) {        TTreeType* parent = node_ptr->GetParent();        if (parent)             node_ptr = parent;        else             break;    }    return node_ptr;}template<class TValue>bool CTreeNode<TValue>::IsParent(const TTreeType& tree_node) const{    _ASSERT(this != &tree_node);    const TTreeType* node_ptr = GetParent();    while (node_ptr) {        if (node_ptr == &tree_node)            return true;        node_ptr = node_ptr->GetParent();    }    return false;}/////////////////////////////////////////////////////////////////////////////////  CTreePairNode<TId, TValue>//template<class TId, class TValue>CTreePairNode<TId, TValue>::CTreePairNode(const TId& id, const TValue& value) : TParent(TTreePair(id, value)){}template<class TId, class TValue>CTreePairNode<TId, TValue>::CTreePairNode(const CTreePairNode<TId, TValue>& tr): TParent(tr){}template<class TId, class TValue>CTreePairNode<TId, TValue>& CTreePairNode<TId, TValue>::operator=(const CTreePairNode<TId, TValue>& tr){    TParent::operator=(tr);}template<class TId, class TValue>CTreePairNode<TId, TValue>*CTreePairNode<TId, TValue>::AddNode(const TId& id, const TValue& value){    return (CTreePairNode<TId, TValue>*)TParent::AddNode(TTreePair(id, value));}template<class TId, class TValue>void CTreePairNode<TId, TValue>::FindNodes(const list<TId>& node_path,                                            TPairTreeNodeList*       res){    typename TParent::TTreeType* tr = this;    ITERATE(typename list<TId>, sit, node_path) {        const TId& search_id = *sit;        bool sub_level_found = false;        typename TParent::TNodeList_I it = tr->SubNodeBegin();        typename TParent::TNodeList_I it_end = tr->SubNodeEnd();        for (; it != it_end; ++it) {            TParent* node = *it;            const TTreePair& node_pair = node->GetValue();            if (node_pair.id == search_id) {                tr = node;                sub_level_found = true;                break;            }        } // for it        if (!sub_level_found) {            return;        }        sub_level_found = false;    } // ITERATE    res.push_back(tr);}template<class TId, class TValue>void CTreePairNode<TId, TValue>::FindNodes(const list<TId>&         node_path,                                            TConstPairTreeNodeList*  res) const{    const typename TParent::TTreeType* tr = this;    ITERATE(typename list<TId>, sit, node_path) {        const TId& search_id = *sit;        bool sub_level_found = false;        typename TParent::TNodeList_CI it = tr->SubNodeBegin();        typename TParent::TNodeList_CI it_end = tr->SubNodeEnd();        for (; it != it_end; ++it) {            const TParent* node = *it;            const TTreePair& node_pair = node->GetValue();            if (node_pair.id == search_id) {                tr = node;                sub_level_found = true;                break;            }        } // for it        if (!sub_level_found) {            return;        }        sub_level_found = false;    } // ITERATE    res->push_back((TPairTreeType*)tr);}/* @} */END_NCBI_SCOPE/* * =========================================================================== * $Log: ncbi_tree.hpp,v $ * Revision 1000.4  2004/06/01 19:07:49  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.33 * * Revision 1.33  2004/04/26 14:47:51  ucko * Qualify dependent names with "this->" as needed (by GCC 3.4). * * Revision 1.32  2004/04/19 16:00:14  kuznets * Algorithms migrated to <algo/tree> * * Revision 1.31  2004/04/12 15:17:46  vasilche * Added missing typename keyword. * * Revision 1.30  2004/04/12 13:28:25  kuznets * + MoveSubnodes * * Revision 1.29  2004/04/09 15:27:30  gorelenk * Added missed 'typename' (s) . * * Revision 1.28  2004/04/09 14:25:56  kuznets * + TreeReRoot, improved internal data integrity diagnostics * * Revision 1.27  2004/04/08 18:34:19  kuznets * attached code to a doxygen group * +TreePrinting template (for debug purposes) * * Revision 1.26  2004/04/08 12:22:56  kuznets * Fixed compilation warnings * * Revision 1.25  2004/04/08 11:47:46  kuznets * + TreeFindCommonParent, + TreeTraceToRoot * * Revision 1.24  2004/04/06 15:53:16  kuznets * Minor correction in the comments * * Revision 1.23  2004/03/10 15:59:33  kuznets * TreeDepthFirstTraverse fixed bug in tree iteration logic * (corner case for empty tree) * * Revision 1.22  2004/02/17 19:07:27  kuznets * GCC warning fix * * Revision 1.21  2004/01/29 20:03:17  jcherry * Added default value for AddNode(const TValue& val) * * Revision 1.20  2004/01/15 20:05:53  yazhuk * Added return falue to operator= * * Revision 1.19  2004/01/14 17:38:05  kuznets * TreeDepthFirstTraverse improved to support more traversal options * (ETreeTraverseCode) * * Revision 1.18  2004/01/14 17:02:32  kuznets * + PairTreeBackTraceNode * * Revision 1.17  2004/01/14 16:24:17  kuznets * + CTreeNode::RemoveAllSubNodes * * Revision 1.16  2004/01/14 15:25:38  kuznets * Fixed bug in PairTreeTraceNode algorithm * * Revision 1.15  2004/01/14 14:18:21  kuznets * +TreeDepthFirstTraverse algorithm * * Revision 1.14  2004/01/12 22:04:03  ucko * Fix typo caught by MIPSpro. * * Revision 1.13  2004/01/12 21:03:42  ucko * Fix use of typename in PairTreeTraceNode<>, silently added in last revision. * * Revision 1.12  2004/01/12 20:09:22  kuznets * Renamed CTreeNWay to CTreeNode * * Revision 1.11  2004/01/12 18:01:15  jcherry * Added IsLeaf method * * Revision 1.10  2004/01/12 16:49:48  kuznets * CTreePairNode added id, value accessor functions * * Revision 1.9  2004/01/12 15:26:22  kuznets * Fixed various compilation warnings (GCC & WorkShop) * * Revision 1.8  2004/01/12 15:01:58  kuznets * +CTreePairNode::FindNodes * * Revision 1.7  2004/01/09 19:01:39  kuznets * Fixed compilation for GCC * * Revision 1.6  2004/01/09 17:15:11  kuznets * Cosmetic cleanup * * Revision 1.5  2004/01/09 13:27:39  kuznets * Cosmetic fixes. nodelist_iterator renamed to match the NCBI coding policy. * * Revision 1.4  2004/01/07 21:38:29  jcherry * Added method for adding child node given a value * * Revision 1.3  2004/01/07 21:10:58  jcherry * Compile fixes * * Revision 1.2  2004/01/07 17:21:53  kuznets * + template implementation * * Revision 1.1  2004/01/07 13:17:10  kuznets * Initial revision * * * ========================================================================== */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -