aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
multiDimPartialInstantiation_tpl.h
Go to the documentation of this file.
1
/**
2
*
3
* Copyright (c) 2005-2021 by 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, TABLE >::MultiDimPartialInstantiation() {
38
// for debugging purposes
39
GUM_CONSTRUCTOR(MultiDimPartialInstantiation);
40
}
41
42
// copy constructor
43
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
44
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
MultiDimPartialInstantiation
(
45
const
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>&
from
) {
46
// for debugging purposes
47
GUM_CONS_CPY
(
MultiDimPartialInstantiation
);
48
}
49
50
// destructor
51
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
52
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::~
MultiDimPartialInstantiation
() {
53
// for debugging purposes
54
GUM_DESTRUCTOR
(
MultiDimPartialInstantiation
);
55
}
56
57
// virtual constructor
58
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
59
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>*
60
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
newFactory
()
const
{
61
return
new
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>(*
this
);
62
}
63
64
// copy operator
65
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
66
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>&
67
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
operator
=(
68
const
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>&
from
) {
69
return
*
this
;
70
}
71
72
// creates and returns the partial instantiation of the table
73
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
74
TABLE
<
GUM_SCALAR
>*
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
instantiate
(
75
const
TABLE
<
GUM_SCALAR
>&
table
,
76
const
HashTable
<
const
DiscreteVariable
*,
Idx
>&
inst_vars
) {
77
MultiDimImplementation
<
GUM_SCALAR
>*
new_impl
=
partialInstantiation
(
table
,
inst_vars
);
78
return
new
TABLE
<
GUM_SCALAR
>(
new_impl
);
79
}
80
81
// creates and returns the partial instantiation of the table
82
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
83
void
MultiDimPartialInstantiation
<
GUM_SCALAR
,
TABLE
>::
instantiate
(
84
TABLE
<
GUM_SCALAR
>&
container
,
85
const
TABLE
<
GUM_SCALAR
>&
table
,
86
const
HashTable
<
const
DiscreteVariable
*,
Idx
>&
inst_vars
) {
87
MultiDimImplementation
<
GUM_SCALAR
>*
new_impl
=
partialInstantiation
(
table
,
inst_vars
);
88
container
= *
new_impl
;
89
delete
new_impl
;
90
}
91
92
}
/* namespace gum */
93
94
#
endif
/* DOXYGEN_SHOULD_SKIP_THIS */
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:643