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";
127 isReferenceSlot(
const PRMClassElement< GUM_SCALAR >& elt) {
128 return elt.elt_type() == prm_refslot;
132 static INLINE
bool isAttribute(
const PRMClassElement< GUM_SCALAR >& elt) {
133 return elt.elt_type() == prm_attribute;
137 static INLINE
bool isAggregate(
const PRMClassElement< GUM_SCALAR >& elt) {
138 return elt.elt_type() == prm_aggregate;
142 static INLINE
bool isSlotChain(
const PRMClassElement< GUM_SCALAR >& elt) {
143 return elt.elt_type() == prm_slotchain;
147 static INLINE
bool isParameter(
const PRMClassElement< GUM_SCALAR >& elt) {
148 return elt.elt_type() == prm_parameter;
161 virtual void setId(NodeId id);
169 virtual void addParent(
const PRMClassElement< GUM_SCALAR >& elt) = 0;
177 virtual void addChild(
const PRMClassElement< GUM_SCALAR >& elt) = 0;
180 virtual typename PRMObject::prm_type obj_type()
const;
183 virtual ClassElementType elt_type()
const = 0;
197 virtual PRMType& type() = 0;
206 virtual const PRMType& type()
const = 0;
224 virtual PRMAttribute< GUM_SCALAR >* getCastDescendant()
const = 0;
236 const std::string& safeName()
const;
244 virtual std::string cast(
const PRMType& t)
const;
261 virtual const Potential< GUM_SCALAR >& cpf()
const = 0;
266 std::string safeName_;
274 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 275 extern template class PRMClassElement<
double >;
281 #include <agrum/PRM/elements/PRMClassElement_tpl.h>