aGrUM
0.20.2
a C++ library for (probabilistic) graphical models
multiDimPartialInstantiation_tpl.h
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
/**
23
* @file
24
* @brief Implementation of MultiDimPartialInstantiation.
25
*
26
* @author Christophe GONZALES(@AMU) and Pierre-Henri WUILLEMIN(@LIP6)
27
*/
28
#
include
<
agrum
/
agrum
.
h
>
29
#
include
<
typeinfo
>
30
31
#
ifndef
DOXYGEN_SHOULD_SKIP_THIS
32
33
namespace
gum
{
34
35
// constructor
36
template
<
typename
GUM_SCALAR,
template
<
typename
>
class
TABLE >
37
MultiDimPartialInstantiation< GUM_SCALAR,
38
TABLE >::MultiDimPartialInstantiation() {
39
// for debugging purposes
40
GUM_CONSTRUCTOR(MultiDimPartialInstantiation);
41
}
42
43
// copy constructor
44
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
45
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
MultiDimPartialInstantiation
(
46
const
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>&
from
) {
47
// for debugging purposes
48
GUM_CONS_CPY
(
MultiDimPartialInstantiation
);
49
}
50
51
// destructor
52
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
53
MultiDimPartialInstantiation
<
GUM_SCALAR
,
54
TABLE
>::~
MultiDimPartialInstantiation
() {
55
// for debugging purposes
56
GUM_DESTRUCTOR
(
MultiDimPartialInstantiation
);
57
}
58
59
// virtual constructor
60
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
61
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>*
62
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
newFactory
()
const
{
63
return
new
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>(*
this
);
64
}
65
66
// copy operator
67
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
68
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>&
69
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
operator
=(
70
const
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>&
from
) {
71
return
*
this
;
72
}
73
74
// creates and returns the partial instantiation of the table
75
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
76
TABLE
<
GUM_SCALAR
>*
77
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
instantiate
(
78
const
TABLE
<
GUM_SCALAR
>&
table
,
79
const
HashTable
<
const
DiscreteVariable
*,
Idx
>&
inst_vars
) {
80
MultiDimImplementation
<
GUM_SCALAR
>*
new_impl
81
=
partialInstantiation
(
table
,
inst_vars
);
82
return
new
TABLE
<
GUM_SCALAR
>(
new_impl
);
83
}
84
85
// creates and returns the partial instantiation of the table
86
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
87
void
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
instantiate
(
88
TABLE
<
GUM_SCALAR
>&
container
,
89
const
TABLE
<
GUM_SCALAR
>&
table
,
90
const
HashTable
<
const
DiscreteVariable
*,
Idx
>&
inst_vars
) {
91
MultiDimImplementation
<
GUM_SCALAR
>*
new_impl
92
=
partialInstantiation
(
table
,
inst_vars
);
93
container
= *
new_impl
;
94
delete
new_impl
;
95
}
96
97
}
/* namespace gum */
98
99
#
endif
/* DOXYGEN_SHOULD_SKIP_THIS */
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:669