Publishing R3
[platform/upstream/dldt.git] / inference-engine / thirdparty / ade / ade / source / edge.cpp
1 // Copyright (C) 2018 Intel Corporation
2 //
3 // SPDX-License-Identifier: Apache-2.0
4 //
5
6 #include "edge.hpp"
7
8 #include "util/assert.hpp"
9
10 #include "node.hpp"
11 #include "graph.hpp"
12
13 namespace ade
14 {
15
16 Edge::Edge(Node* prev, Node* next)
17 {
18     ASSERT(nullptr != prev);
19     ASSERT(nullptr != next);
20     resetPrevNode(prev);
21     resetNextNode(next);
22 }
23
24 Edge::~Edge()
25 {
26     unlink();
27 }
28
29 void Edge::unlink()
30 {
31     resetPrevNode(nullptr);
32     resetNextNode(nullptr);
33 }
34
35 void Edge::resetPrevNode(Node* newNode)
36 {
37     if (newNode == m_prevNode)
38     {
39         return;
40     }
41
42     if (nullptr != m_prevNode)
43     {
44         m_prevNode->removeOutEdge(this);
45         m_prevNode = nullptr;
46     }
47     if (nullptr != newNode)
48     {
49         newNode->addOutEdge(this);
50         m_prevNode = newNode;
51     }
52 }
53
54 void Edge::resetNextNode(Node* newNode)
55 {
56     if (newNode == m_nextNode)
57     {
58         return;
59     }
60
61     if (nullptr != m_nextNode)
62     {
63         m_nextNode->removeInEdge(this);
64         m_nextNode = nullptr;
65     }
66     if (nullptr != newNode)
67     {
68         newNode->addInEdge(this);
69         m_nextNode = newNode;
70     }
71 }
72
73 Graph* Edge::getParent() const
74 {
75     if (nullptr != m_prevNode)
76     {
77         return m_prevNode->getParent();
78     }
79     if (nullptr != m_nextNode)
80     {
81         return m_nextNode->getParent();
82     }
83     return nullptr;
84 }
85
86 NodeHandle Edge::srcNode() const
87 {
88     ASSERT_STRONG(nullptr != m_prevNode);
89     return Graph::HandleMapper()(m_prevNode);
90 }
91
92 NodeHandle Edge::dstNode() const
93 {
94     ASSERT_STRONG(nullptr != m_nextNode);
95     return Graph::HandleMapper()(m_nextNode);
96 }
97
98 }