node.cc 1008 Bytes
Newer Older
tqchen committed
1 2 3 4 5
/*!
 *  Copyright (c) 2016 by Contributors
 * \file node.cc
 * \brief Graph node data structure.
 */
tqchen committed
6
#include <nnvm/node.h>
tqchen committed
7

tqchen committed
8
namespace nnvm {
tqchen committed
9 10 11 12 13 14

Node::~Node() {
  if (inputs.size() != 0) {
    // explicit deletion via DFS
    // this is used to avoid stackoverflow caused by chain of deletions
    std::vector<Node*> stack{this};
Tianqi Chen committed
15
    std::vector<NodePtr> to_delete;
tqchen committed
16 17 18 19 20 21 22 23 24 25 26
    while (!stack.empty()) {
      Node* n = stack.back();
      stack.pop_back();
      for (NodeEntry& e : n->inputs) {
        if (e.node.unique()) {
          stack.push_back(e.node.get());
          to_delete.emplace_back(std::move(e.node));
        } else {
          e.node.reset();
        }
      }
27
      for (NodePtr& sp : n->control_deps) {
28 29
        if (sp.unique()) {
          stack.push_back(sp.get());
30
          to_delete.emplace_back(std::move(sp));
31 32 33 34
        } else {
          sp.reset();
        }
      }
tqchen committed
35 36 37 38 39
      n->inputs.clear();
    }
  }
}

40
NodePtr Node::Create() {
tqchen committed
41 42 43
  return std::make_shared<Node>();
}

tqchen committed
44
}  // namespace nnvm