aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
DAGmodel.cpp
Go to the documentation of this file.
1 /**
2  *
3  * Copyright 2005-2020 Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4  * info_at_agrum_dot_org
5  *
6  * This library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library. If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 #include <agrum/tools/graphicalModels/DAGmodel.h>
23 
24 #ifdef GUM_NO_INLINE
25 # include <agrum/tools/graphicalModels/DAGmodel_inl.h>
26 #endif /* GUM_NO_INLINE */
27 
28 namespace gum {
31  }
32 
34  dag_(from.dag_), mutableMoralGraph__(nullptr) {
36  }
37 
40  if (mutableMoralGraph__ != nullptr) { delete mutableMoralGraph__; }
41  }
42 
43 
45  if (this != &source) {
47 
48  if (mutableMoralGraph__) {
49  delete mutableMoralGraph__;
50  mutableMoralGraph__ = nullptr;
51  }
52  dag_ = source.dag_;
53  }
54 
55  return *this;
56  }
57 
58  const UndiGraph& DAGmodel::moralGraph(bool clear) const {
59  if (clear
61  == nullptr)) { // we have to call dag().moralGraph()
62  if (mutableMoralGraph__ == nullptr) {
64  } else {
65  // clear is True ,__mutableMoralGraph exists
67  }
69  }
70 
71  return *mutableMoralGraph__;
72  }
73 
75  if (this == &other) return true;
76 
77  if (size() != other.size()) return false;
78 
79  if (sizeArcs() != other.sizeArcs()) return false;
80 
81  for (const auto& nid: nodes()) {
82  try {
84  } catch (NotFound) { return false; }
85  }
86 
87  for (const auto& arc: arcs()) {
90  return false;
91  }
92 
93  return true;
94  }
95 } // namespace gum
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:669