29 #ifndef GUM_CLASS_ELEMENT_H 30 #define GUM_CLASS_ELEMENT_H 34 #include <agrum/agrum.h> 36 #include <agrum/tools/graphs/graphElements.h> 38 #include <agrum/tools/multidim/potential.h> 40 #include <agrum/PRM/elements/PRMObject.h> 41 #include <agrum/PRM/utils_prm.h> 45 template <
typename GUM_SCALAR >
59 template <
typename GUM_SCALAR >
60 class PRMClassElement:
public PRMObject {
76 explicit PRMClassElement(
const std::string& name);
81 PRMClassElement(
const PRMClassElement< GUM_SCALAR >& source);
86 virtual ~PRMClassElement();
103 static std::string enum2str(ClassElementType type) {
106 return "prm_attribute";
109 return "prm_aggregate";
112 return "prm_refslot";
115 return "prm_slotchain";
118 return "prm_parameter";
126 static INLINE
bool isReferenceSlot(
const PRMClassElement< GUM_SCALAR >& elt) {
127 return elt.elt_type() == prm_refslot;
131 static INLINE
bool isAttribute(
const PRMClassElement< GUM_SCALAR >& elt) {
132 return elt.elt_type() == prm_attribute;
136 static INLINE
bool isAggregate(
const PRMClassElement< GUM_SCALAR >& elt) {
137 return elt.elt_type() == prm_aggregate;
141 static INLINE
bool isSlotChain(
const PRMClassElement< GUM_SCALAR >& elt) {
142 return elt.elt_type() == prm_slotchain;
146 static INLINE
bool isParameter(
const PRMClassElement< GUM_SCALAR >& elt) {
147 return elt.elt_type() == prm_parameter;
160 virtual void setId(NodeId id);
168 virtual void addParent(
const PRMClassElement< GUM_SCALAR >& elt) = 0;
176 virtual void addChild(
const PRMClassElement< GUM_SCALAR >& elt) = 0;
179 virtual typename PRMObject::prm_type obj_type()
const;
182 virtual ClassElementType elt_type()
const = 0;
196 virtual PRMType& type() = 0;
205 virtual const PRMType& type()
const = 0;
223 virtual PRMAttribute< GUM_SCALAR >* getCastDescendant()
const = 0;
235 const std::string& safeName()
const;
243 virtual std::string cast(
const PRMType& t)
const;
260 virtual const Potential< GUM_SCALAR >& cpf()
const = 0;
265 std::string safeName_;
273 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 274 extern template class PRMClassElement<
double >;
280 #include <agrum/PRM/elements/PRMClassElement_tpl.h>