1 /**
2  *
3  *   Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_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 gum::PRMParameter.
25  *
26  * @author Lionel TORTI and Pierre-Henri WUILLEMIN(_at_LIP6)
27  */
28 
29 namespace gum {
30   namespace prm {
31 
32     template < typename GUM_SCALAR >
PRMParameter(const std::string & name,ParameterType type,GUM_SCALAR value)33     PRMParameter< GUM_SCALAR >::PRMParameter(const std::string& name,
34                                              ParameterType      type,
35                                              GUM_SCALAR         value) :
36         PRMClassElement< GUM_SCALAR >(name),
37         _type_(type), _value_(value) {
38       GUM_CONSTRUCTOR(PRMParameter);
39       this->safeName_ = name;
40     }
41 
42     template < typename GUM_SCALAR >
PRMParameter(const PRMParameter<GUM_SCALAR> & source)43     PRMParameter< GUM_SCALAR >::PRMParameter(const PRMParameter< GUM_SCALAR >& source) :
44         PRMClassElement< GUM_SCALAR >(source.name()), _type_(source.valueType()),
45         _value_(source.value()) {
46       GUM_ERROR(OperationNotAllowed, "cannot copy Paramter<GUM_SCALAR")
47     }
48 
49     template < typename GUM_SCALAR >
50     PRMParameter< GUM_SCALAR >&
51        PRMParameter< GUM_SCALAR >::operator=(const PRMParameter< GUM_SCALAR >& from) {
52       GUM_ERROR(OperationNotAllowed, "cannot copy Paramter<GUM_SCALAR")
53     }
54 
55     template < typename GUM_SCALAR >
~PRMParameter()56     PRMParameter< GUM_SCALAR >::~PRMParameter() {
57       GUM_DESTRUCTOR(PRMParameter);
58     }
59 
60     template < typename GUM_SCALAR >
61     typename PRMClassElement< GUM_SCALAR >::ClassElementType
elt_type()62        PRMParameter< GUM_SCALAR >::elt_type() const {
63       return PRMClassElement< GUM_SCALAR >::ClassElementType::prm_parameter;
64     }
65 
66     template < typename GUM_SCALAR >
value()67     GUM_SCALAR PRMParameter< GUM_SCALAR >::value() const {
68       return _value_;
69     }
70 
71     template < typename GUM_SCALAR >
value(GUM_SCALAR value)72     void PRMParameter< GUM_SCALAR >::value(GUM_SCALAR value) {
73       _value_ = value;
74     }
75 
76     template < typename GUM_SCALAR >
77     typename PRMParameter< GUM_SCALAR >::ParameterType
valueType()78        PRMParameter< GUM_SCALAR >::valueType() const {
79       return _type_;
80     }
81 
82     template < typename GUM_SCALAR >
type()83     PRMType& PRMParameter< GUM_SCALAR >::type() {
84       GUM_ERROR(OperationNotAllowed, "Parameters do not have a type")
85     }
86 
87     template < typename GUM_SCALAR >
type()88     const PRMType& PRMParameter< GUM_SCALAR >::type() const {
89       GUM_ERROR(OperationNotAllowed, "Parameters do not have a type")
90     }
91 
92     template < typename GUM_SCALAR >
cpf()93     Potential< GUM_SCALAR >& PRMParameter< GUM_SCALAR >::cpf() {
94       GUM_ERROR(OperationNotAllowed, "Parameters do not have a cpf")
95     }
96 
97     template < typename GUM_SCALAR >
cpf()98     const Potential< GUM_SCALAR >& PRMParameter< GUM_SCALAR >::cpf() const {
99       GUM_ERROR(OperationNotAllowed, "Parameters do not have a cpf")
100     }
101 
102     template < typename GUM_SCALAR >
addParent(const gum::prm::PRMClassElement<GUM_SCALAR> &)103     void PRMParameter< GUM_SCALAR >::addParent(const gum::prm::PRMClassElement< GUM_SCALAR >&) {
104       GUM_ERROR(OperationNotAllowed, "Parameters can not have parents")
105     }
106 
107     template < typename GUM_SCALAR >
addChild(const gum::prm::PRMClassElement<GUM_SCALAR> &)108     void PRMParameter< GUM_SCALAR >::addChild(const gum::prm::PRMClassElement< GUM_SCALAR >&) {
109       GUM_ERROR(OperationNotAllowed, "Parameters can not have children")
110     }
111 
112     template < typename GUM_SCALAR >
getCastDescendant()113     PRMAttribute< GUM_SCALAR >* PRMParameter< GUM_SCALAR >::getCastDescendant() const {
114       GUM_ERROR(OperationNotAllowed, "Parameters can have cast descendants")
115     }
116 
117   } /* namespace prm */
118 }   // namespace gum
119