aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
templateStrategy.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 Template trick for efficient development
25
*
26
* @author Pierre-Henri WUILLEMIN(@LIP6) and Jean-Christophe MAGNAN and Christophe
27
* GONZALES(@AMU)
28
*/
29
30
#
ifndef
GUM_TEMPLATE_STRATEGY_H
31
#
define
GUM_TEMPLATE_STRATEGY_H
32
33
namespace
gum
{
34
35
template
<
int
v >
36
struct
Int2Type
{
37
enum
38
{
value
= v };
39
};
40
41
enum
TESTNAME
42
{
43
GTEST
= 1,
44
CHI2TEST
= 2,
45
LEASTSQUARETEST
= 3
46
};
47
template
<
TESTNAME
,
class
A,
class
B,
class
C >
48
struct
TestSelect
{
49
typedef
A
type
;
50
};
51
template
<
class
A,
class
B,
class
C >
52
struct
TestSelect
<
CHI2TEST
, A, B, C > {
53
typedef
B
type
;
54
};
55
template
<
class
A,
class
B,
class
C >
56
struct
TestSelect
<
LEASTSQUARETEST
, A, B, C > {
57
typedef
C
type
;
58
};
59
60
template
<
bool
,
class
A,
class
B >
61
struct
ValueSelect
{
62
typedef
A
type
;
63
};
64
template
<
class
A,
class
B >
65
struct
ValueSelect
<
false
, A, B > {
66
typedef
B
type
;
67
};
68
69
enum
LEARNERNAME
70
{
71
IMDDILEARNER
= 1,
72
ITILEARNER
= 2
73
};
74
template
<
LEARNERNAME
,
class
A,
class
B >
75
struct
LearnerSelect
{
76
typedef
A
type
;
77
};
78
template
<
class
A,
class
B >
79
struct
LearnerSelect
<
ITILEARNER
, A, B > {
80
typedef
B
type
;
81
};
82
83
}
// end of namespace gum
84
85
#
endif
// GUM_TEMPLATE_STRATEGY_H
gum::Int2Type::value
Definition:
templateStrategy.h:38
gum::GTEST
Definition:
templateStrategy.h:43
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:643
gum::LearnerSelect
Definition:
templateStrategy.h:75
gum::LEASTSQUARETEST
Definition:
templateStrategy.h:45
gum::LearnerSelect::type
A type
Definition:
templateStrategy.h:76
gum::TestSelect::type
A type
Definition:
templateStrategy.h:49
gum::LEARNERNAME
LEARNERNAME
Definition:
templateStrategy.h:69
gum::TESTNAME
TESTNAME
Definition:
templateStrategy.h:41
gum::Int2Type
Definition:
templateStrategy.h:36
gum::ValueSelect::type
A type
Definition:
templateStrategy.h:62
gum::TestSelect< LEASTSQUARETEST, A, B, C >::type
C type
Definition:
templateStrategy.h:57
gum::TestSelect
Definition:
templateStrategy.h:48
gum::CHI2TEST
Definition:
templateStrategy.h:44
gum::LearnerSelect< ITILEARNER, A, B >::type
B type
Definition:
templateStrategy.h:80
gum::ValueSelect
Definition:
templateStrategy.h:61
gum::IMDDILEARNER
Definition:
templateStrategy.h:71
gum::ValueSelect< false, A, B >::type
B type
Definition:
templateStrategy.h:66
gum::ITILEARNER
Definition:
templateStrategy.h:72
gum::TestSelect< CHI2TEST, A, B, C >::type
B type
Definition:
templateStrategy.h:53