aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
multiDimCompleteProjection_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 A generic class to project efficiently a MultiDim table over all
25
* of its variables
26
*
27
* @author Christophe GONZALES(@AMU) and Pierre-Henri WUILLEMIN(@LIP6)
28
*/
29
30
#
ifndef
DOXYGEN_SHOULD_SKIP_THIS
31
32
#
include
<
agrum
/
agrum
.
h
>
33
#
include
<
limits
>
34
35
namespace
gum
{
36
37
// constructor
38
template
<
typename
GUM_SCALAR,
template
<
typename
>
class
TABLE >
39
MultiDimCompleteProjection< GUM_SCALAR, TABLE >::MultiDimCompleteProjection(
40
GUM_SCALAR (*proj)(
const
TABLE< GUM_SCALAR >&, Instantiation*)) :
41
proj_(proj) {
42
// for debugging purposes
43
GUM_CONSTRUCTOR(MultiDimCompleteProjection);
44
}
45
46
// copy constructor
47
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
48
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>::
MultiDimCompleteProjection
(
49
const
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>&
from
) :
50
proj_
(
from
.
proj_
) {
51
// for debugging purposes
52
GUM_CONS_CPY
(
MultiDimCompleteProjection
);
53
}
54
55
// destructor
56
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
57
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>::~
MultiDimCompleteProjection
() {
58
// for debugging purposes
59
GUM_DESTRUCTOR
(
MultiDimCompleteProjection
);
60
}
61
62
// virtual constructor
63
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
64
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>*
65
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>::
newFactory
()
const
{
66
return
new
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>(*
this
);
67
}
68
69
// creates and returns the projection of the table over a subset of its vars
70
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
71
INLINE
GUM_SCALAR
72
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>::
project
(
const
TABLE
<
GUM_SCALAR
>&
table
,
73
Instantiation
*
inst
) {
74
return
proj_
(
table
,
inst
);
75
}
76
77
// changes the function used for projecting TABLES
78
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
79
void
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>::
setProjectFunction
(
80
GUM_SCALAR
(*
proj
)(
const
TABLE
<
GUM_SCALAR
>&,
Instantiation
*)) {
81
proj_
=
proj
;
82
}
83
84
// returns the projection function currently used by the projector
85
template
<
typename
GUM_SCALAR
,
template
<
typename
>
class
TABLE
>
86
INLINE
GUM_SCALAR
(*
MultiDimCompleteProjection
<
GUM_SCALAR
,
TABLE
>::
projectFunction
())(
87
const
TABLE
<
GUM_SCALAR
>&,
88
Instantiation
*) {
89
return
proj_
;
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