Ignore:
Timestamp:
12/07/21 12:00:23 (3 years ago)
Author:
ymipsl
Message:
  • Solve memory leak from remapper.
  • shared_ptr add add for manage nodes.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/extern/remap/src/tree.cpp

    r1158 r2269  
    2727*/ 
    2828 
    29 void CBasicTree::routeNodes(vector<int>& route, vector<Node>& nodes, int assignLevel) 
     29void CBasicTree::routeNodes(vector<int>& route, vector<NodePtr>& nodes, int assignLevel) 
    3030{ 
    3131        for (int i = 0; i < nodes.size(); i++) 
    3232        { 
    33                 root->routeNode(&nodes[i], assignLevel); 
    34                 route[i] = nodes[i].route; 
    35         } 
    36 } 
    37  
    38 void CBasicTree::routeIntersections(vector<vector<int> >& routes, vector<Node>& nodes) 
     33                root->routeNode(nodes[i], assignLevel); 
     34                route[i] = nodes[i]->route; 
     35        } 
     36} 
     37 
     38void CBasicTree::routeIntersections(vector<vector<int> >& routes, vector<NodePtr>& nodes) 
    3939{ 
    4040        for (int i = 0; i < nodes.size(); i++) 
    41                 root->routeIntersection(routes[i], &nodes[i]); 
    42 } 
    43  
    44 void CBasicTree::build(vector<Node>& nodes) 
     41                root->routeIntersection(routes[i], nodes[i]); 
     42} 
     43 
     44void CBasicTree::build(vector<NodePtr>& nodes) 
    4545{ 
    4646        newRoot(1); 
     
    8080        push_back(node); 
    8181 
    82         NodePtr q; 
     82        NodePtr q=make_shared<Node>(); 
    8383        while (pool.size()) 
    8484        { 
     
    8888                if (ri) 
    8989                { 
    90                         delete q; 
     90                        q.reset(); 
    9191                        ri = 0; 
    9292                } 
     
    103103                if (ri) 
    104104                { 
    105                         delete q; 
     105                        q.reset(); 
    106106                        ri = 0; 
    107107                } 
     
    137137void CBasicTree::newRoot(int level)  // newroot <- root 
    138138{ 
    139         root = new Node; 
     139        root = make_shared<Node>(); 
    140140        // if (level > 1) cout << " newRoot level " << level << endl; 
    141141        root->level = level; 
    142         root->parent = 0; 
     142        root->parent.reset() ; 
    143143        root->leafCount = 0; 
    144144// initialize root node on the sphere 
     
    155155        //FIXME uncomment the next line and figure out why it segfault sometimes 
    156156        //root->free_descendants(); // recursively deletes all nodes in the tree 
    157         if (root) delete root; 
    158 } 
    159  
    160 void CTree::insertNodes(vector<Node>& nodes) 
     157        if (root) root.reset(); 
     158} 
     159 
     160void CTree::insertNodes(vector<NodePtr>& nodes) 
    161161{ 
    162162        int stepSlim = MAX_NODE_SZ*MAX_NODE_SZ*2; 
     
    164164        for (int i = 0; i < nodes.size(); i++) 
    165165        { 
    166                 insertNode(&nodes[i]); 
     166                insertNode(nodes[i]); 
    167167 
    168168                if (root->leafCount > stepSlim) // time for slim down 
     
    175175 
    176176 
    177 void CSampleTree::insertNodes(vector<Node>& nodes) 
     177void CSampleTree::insertNodes(vector<NodePtr>& nodes) 
    178178{ 
    179179        bool first1 = true; 
     
    184184  int i ; 
    185185   
    186 //  cout<<"CSampleTree::insertNodes  : nb node to be inserted : "<<nodes.size()<<endl ; 
    187186  for (i = 0; i < nodes.size(); i++) 
    188187        { 
    189     insertNode(&nodes[i]); 
     188    insertNode(nodes[i]); 
    190189 
    191190                if (root->leafCount > stepSlim && levelSize[assignLevel] < keepNodes-2) // time for slim down 
Note: See TracChangeset for help on using the changeset viewer.