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

source code of opencv/build/3rdparty/ade/ade-0.1.2e/sources/ade/source/edge.cpp