aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
gum::prm::PRMInterface< GUM_SCALAR > Class Template Reference

An PRMInterface is implemented by a Class<GUM_SCALAR> and defines a set of PRMReferenceSlot<GUM_SCALAR> and PRMAttribute<GUM_SCALAR> which the implementing Class<GUM_SCALAR> must contain. More...

#include <PRMClass.h>

+ Inheritance diagram for gum::prm::PRMInterface< GUM_SCALAR >:
+ Collaboration diagram for gum::prm::PRMInterface< GUM_SCALAR >:

Public Member Functions

Constructor & destructor.
 PRMInterface (const std::string &name)
 Default constructor. More...
 
 PRMInterface (const std::string &name, PRMInterface< GUM_SCALAR > &super, bool delayInheritance=false)
 Constructor for building a subclass of super. More...
 
 PRMInterface (const PRMInterface< GUM_SCALAR > &source)
 Copy constructor. More...
 
virtual ~PRMInterface ()
 Destructor. More...
 
Graphical model getters and setters
virtual PRMObject::prm_type obj_type () const
 Implementation of pure virtual method of PRMObject. More...
 
virtual PRMClassElement< GUM_SCALAR > & get (NodeId id)
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(NodeId). More...
 
virtual const PRMClassElement< GUM_SCALAR > & get (NodeId id) const
 Se gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(NodeId). More...
 
void addArc (const std::string &tail, const std::string &head)
 An Interfance doesn't have any arc, this will raise an OperationNotAllowed exception. More...
 
PRMClassElement<GUM_SCALAR> getters and setters
virtual bool isOutputNode (const PRMClassElement< GUM_SCALAR > &elt) const
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(const std::string&). More...
 
virtual PRMClassElement< GUM_SCALAR > & get (const std::string &name)
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(const std::string&). More...
 
virtual const PRMClassElement< GUM_SCALAR > & get (const std::string &name) const
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(const std::string&). More...
 
const Set< PRMAttribute< GUM_SCALAR > *> & attributes () const
 Returns the set of PRMAttribute<GUM_SCALAR> of this Class<GUM_SCALAR>. More...
 
const Set< PRMReferenceSlot< GUM_SCALAR > *> & referenceSlots () const
 Returns the set of PRMAggregate of this Class<GUM_SCALAR>. More...
 
NodeId add (PRMClassElement< GUM_SCALAR > *elt)
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::add(PRMClassElement<GUM_SCALAR>*). More...
 
NodeId overload (PRMClassElement< GUM_SCALAR > *elt)
 Add a new PRMClassElement<GUM_SCALAR> which overload an inherited PRMClassElement<GUM_SCALAR>. More...
 
Inheritance methods
virtual bool isSubTypeOf (const PRMClassElementContainer< GUM_SCALAR > &cec) const
 Test if this PRMInterface is a sub PRMInterface of cec. More...
 
PRMInterface< GUM_SCALAR > & super ()
 Returns the superInterface of this PRMInterface. More...
 
const PRMInterface< GUM_SCALAR > & super () const
 Returns the superInterface of this PRMInterface. More...
 
Set< PRMClass< GUM_SCALAR > *> & implementations ()
 Returns the set of Class<GUM_SCALAR> implementing this PRMInterface. More...
 
const Set< PRMClass< GUM_SCALAR > *> & implementations () const
 Returns the set of Class<GUM_SCALAR> implementing this PRMInterface. More...
 
void inheritInterface ()
 Inherits from this interface super interface, this should only be done when this inteface inheritance was delayed. More...
 
Getters & setters operators
PRMClassElement< GUM_SCALAR > & operator[] (NodeId id)
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::operator[](NodeId). More...
 
const PRMClassElement< GUM_SCALAR > & operator[] (NodeId id) const
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::operator[](NodeId). More...
 
PRMClassElement< GUM_SCALAR > & operator[] (const std::string &name)
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::operator[](const std::string&). More...
 
const PRMClassElement< GUM_SCALAR > & operator[] (const std::string &name) const
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>::operator[](const std::string&). More...
 
Getters on the gum::PRMClassElement<GUM_SCALAR>.
virtual bool belongsTo (const PRMClassElement< GUM_SCALAR > &elt) const
 Returns true if elt belongs to this PRMClassElementContainer. More...
 
virtual bool exists (const std::string &name) const
 Returns true if a member with the given name exists in this PRMClassElementContainer or in the PRMClassElementContainer hierarchy. More...
 
virtual bool isInputNode (const PRMClassElement< GUM_SCALAR > &elt) const
 Returns true if the node is an input node. More...
 
virtual void setInputNode (const PRMClassElement< GUM_SCALAR > &elt, bool b)
 Set the input flag value of id at b. More...
 
virtual void setOutputNode (const PRMClassElement< GUM_SCALAR > &elt, bool b)
 Set the output flag value of id at b. More...
 
virtual bool isInnerNode (const PRMClassElement< GUM_SCALAR > &elt) const
 Returns true if the node is an inner node. More...
 
Graphical operator
virtual bool exists (NodeId id) const
 Returns true if a member with the given id exists in this PRMClassElementContainer or in the PRMClassElementContainer hierarchy. More...
 
virtual const DAGcontainerDag () const
 Returns the gum::DAG of this PRMClassElementContainer. More...
 
Inheritance getters and setters
virtual bool isSuperTypeOf (const PRMClassElementContainer< GUM_SCALAR > &cec) const
 Test if this PRMClassElementContainer is a super type of cec. More...
 
Getters & setters.
const std::string & name () const
 Returns the name of this object. More...
 
void name (const std::string &name)
 Change the name of the PRM Object. More...
 
Operators
bool operator== (const PRMObject &obj) const
 To PRMObject are equal if they have the same name (which is unique). More...
 
bool operator!= (const PRMObject &obj) const
 To PRMObject are equal if they have the same name (which is unique). More...
 

Protected Member Functions

const DAGdag_ () const
 Returns a constant reference over this PRMInterface's DAG. More...
 
DAGdag_ ()
 Returns a non constant reference over this PRMInterface's DAG. More...
 
void findAllSubtypes_ (Set< PRMClassElementContainer< GUM_SCALAR > * > &set)
 Fills set with all the subtypes of this PRMInterface, this includes extensions and implementations. More...
 
void updateDescendants_ (const PRMClassElement< GUM_SCALAR > &elt)
 See gum::prm::PRMClassElementContainer<GUM_SCALAR>(const PRMClassElement<GUM_SCALAR>&). More...
 
virtual std::pair< bool, bool > & getIOFlag_ (const PRMClassElement< GUM_SCALAR > &elt)
 Returns the IO flags of a PRMClassElement<GUM_SCALAR>. More...
 
virtual const std::pair< bool, bool > & getIOFlag_ (const PRMClassElement< GUM_SCALAR > &elt) const
 Returns the IO flags of a PRMClassElement<GUM_SCALAR>. More...
 
virtual void setIOFlag_ (const PRMClassElement< GUM_SCALAR > &elt, const std::pair< bool, bool > &flags)
 Defines the IO flags of a PRMClassElement<GUM_SCALAR>. More...
 
virtual void copyIOFlags_ (const PRMClassElementContainer< GUM_SCALAR > &c)
 Copy the IO Flags of c in this PRMClassElementContainer. More...
 

Friends

class PRMClass< GUM_SCALAR >
 

Iterators

typedef NodeProperty< PRMClassElement< GUM_SCALAR > *>::iterator ClassEltIterator
 
typedef NodeProperty< PRMClassElement< GUM_SCALAR > *>::const_iterator const_ClassEltIterator
 
ClassEltIterator begin ()
 
const ClassEltIteratorend ()
 
const_ClassEltIterator begin () const
 
const const_ClassEltIteratorend () const
 

Inheritance members

PRMInterface< GUM_SCALAR > * superInterface__
 The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>. More...
 
Set< PRMClass< GUM_SCALAR > *> implementations__
 The set of Class<GUM_SCALAR> which implements this PRMInterface. More...
 
Set< PRMInterface< GUM_SCALAR > *> extensions__
 The set of Class<GUM_SCALAR> which implements this PRMInterface. More...
 
void addImplementation__ (PRMClass< GUM_SCALAR > *c)
 Add an Class<GUM_SCALAR> to the set of Class<GUM_SCALAR> which implements this PRMInterface. More...
 
void addExtension__ (PRMInterface< GUM_SCALAR > *c)
 Add an Class<GUM_SCALAR> to the set of Class<GUM_SCALAR> which implements this PRMInterface. More...
 
bool checkOverloadLegality__ (const PRMClassElement< GUM_SCALAR > *overloaded, const PRMClassElement< GUM_SCALAR > *overloader)
 The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>. More...
 
void overloadAttribute__ (PRMAttribute< GUM_SCALAR > *overloader, PRMAttribute< GUM_SCALAR > *overloaded)
 The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>. More...
 
void overloadReferenceSlot__ (PRMReferenceSlot< GUM_SCALAR > *overloader, PRMReferenceSlot< GUM_SCALAR > *overloaded)
 The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>. More...
 
void addCastDescendants__ (PRMAttribute< GUM_SCALAR > *start, PRMAttribute< GUM_SCALAR > *end)
 The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>. More...
 

Built-in types.

enum  prm_type : char {
  prm_type::ALL, prm_type::CLASS, prm_type::PRM_INTERFACE, prm_type::CLASS_ELT,
  prm_type::TYPE, prm_type::SYSTEM, prm_type::INSTANCE
}
 Enumeration of the different types of objects handled by a PRM. More...
 
static std::string LEFT_CAST ()
 Enumeration of the different types of objects handled by a PRM. More...
 
static std::string RIGHT_CAST ()
 Enumeration of the different types of objects handled by a PRM. More...
 
static std::string enum2str (prm_type type)
 Returns the string representation of a PRMObject. More...
 
static INLINE bool isClass (const PRMObject &obj)
 Returns true if obj_ptr is of type Class. More...
 
static INLINE bool isInterface (const PRMObject &obj)
 Returns true if obj_ptr is of type PRMInterface. More...
 
static INLINE bool isInstance (const PRMObject &obj)
 Returns true if obj_ptr is of type PRMInstance. More...
 

Detailed Description

template<typename GUM_SCALAR>
class gum::prm::PRMInterface< GUM_SCALAR >

An PRMInterface is implemented by a Class<GUM_SCALAR> and defines a set of PRMReferenceSlot<GUM_SCALAR> and PRMAttribute<GUM_SCALAR> which the implementing Class<GUM_SCALAR> must contain.

See also
PRM Class<GUM_SCALAR> PRMClassElement<GUM_SCALAR>

Definition at line 53 of file PRMClass.h.

Member Typedef Documentation

◆ ClassEltIterator

template<typename GUM_SCALAR>
typedef NodeProperty< PRMClassElement< GUM_SCALAR >* >::iterator gum::prm::PRMInterface< GUM_SCALAR >::ClassEltIterator

Definition at line 284 of file PRMInterface.h.

◆ const_ClassEltIterator

template<typename GUM_SCALAR>
typedef NodeProperty< PRMClassElement< GUM_SCALAR >* >::const_iterator gum::prm::PRMInterface< GUM_SCALAR >::const_ClassEltIterator

Definition at line 290 of file PRMInterface.h.

Member Enumeration Documentation

◆ prm_type

enum gum::prm::PRMObject::prm_type : char
stronginherited

Enumeration of the different types of objects handled by a PRM.

The "all" type is used to tell that we want any kind of PRMType (useful with iterators for example). No PRMObject will ever have "all" as type.

Enumerator
ALL 
CLASS 
PRM_INTERFACE 
CLASS_ELT 
TYPE 
SYSTEM 
INSTANCE 

Definition at line 68 of file PRMObject.h.

68  : char
69  {
70  ALL,
71  CLASS,
72  PRM_INTERFACE,
73  CLASS_ELT,
74  TYPE,
75  SYSTEM,
76  INSTANCE
77  };

Constructor & Destructor Documentation

◆ PRMInterface() [1/3]

template<typename GUM_SCALAR >
gum::prm::PRMInterface< GUM_SCALAR >::PRMInterface ( const std::string &  name)
explicit

Default constructor.

Parameters
nameThe interface name.

Definition at line 36 of file PRMInterface_tpl.h.

36  :
37  PRMClassElementContainer< GUM_SCALAR >(name), superInterface__(0) {
38  GUM_CONSTRUCTOR(PRMInterface);
39  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
PRMInterface(const std::string &name)
Default constructor.
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358

◆ PRMInterface() [2/3]

template<typename GUM_SCALAR>
gum::prm::PRMInterface< GUM_SCALAR >::PRMInterface ( const std::string &  name,
PRMInterface< GUM_SCALAR > &  super,
bool  delayInheritance = false 
)

Constructor for building a subclass of super.

Parameters
nameThe sub-interface name.
superThe super PRMInterface of this.
delayInheritanceIf true, inheritance will be delayed.

Definition at line 42 of file PRMInterface_tpl.h.

44  :
45  PRMClassElementContainer< GUM_SCALAR >(name),
47  GUM_CONSTRUCTOR(PRMInterface);
48  if (!delayInheritance) { inheritInterface__(super); }
49  }
void inheritInterface__(const PRMInterface< GUM_SCALAR > &i)
Proceed with the copy of i in this.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
PRMInterface(const std::string &name)
Default constructor.
PRMInterface< GUM_SCALAR > & super()
Returns the superInterface of this PRMInterface.
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358

◆ PRMInterface() [3/3]

template<typename GUM_SCALAR>
gum::prm::PRMInterface< GUM_SCALAR >::PRMInterface ( const PRMInterface< GUM_SCALAR > &  source)

Copy constructor.

Definition at line 52 of file PRMInterface_tpl.h.

53  :
54  PRMClassElementContainer< GUM_SCALAR >(source.name()),
55  dag__(source.dag__), superInterface__(source.superInterface__) {
56  GUM_CONS_CPY(PRMInterface);
57  GUM_ERROR(FatalError, "don't copy an interface");
58  }
PRMInterface(const std::string &name)
Default constructor.
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ ~PRMInterface()

template<typename GUM_SCALAR >
gum::prm::PRMInterface< GUM_SCALAR >::~PRMInterface ( )
virtual

Destructor.

Definition at line 61 of file PRMInterface_tpl.h.

61  {
62  GUM_DESTRUCTOR(PRMInterface);
63 
64  for (const auto& elt: nodeIdMap__) {
65  delete elt.second;
66  }
67  }
PRMInterface(const std::string &name)
Default constructor.
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330

Member Function Documentation

◆ add()

template<typename GUM_SCALAR>
NodeId gum::prm::PRMInterface< GUM_SCALAR >::add ( PRMClassElement< GUM_SCALAR > *  elt)
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::add(PRMClassElement<GUM_SCALAR>*).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 115 of file PRMInterface_tpl.h.

115  {
116  if (nameMap__.exists(elt->name())) {
117  GUM_ERROR(DuplicateElement,
118  "name '" << elt->name()
119  << "' is already used by another ClassElement");
120  }
121 
123  PRMAttribute< GUM_SCALAR >* attr
124  = static_cast< PRMAttribute< GUM_SCALAR >* >(elt);
125  nameMap__.insert(attr->name(), attr);
126 
127  while (true) {
128  attr->setId(nextNodeId());
129  dag__.addNodeWithId(attr->id());
130  nodeIdMap__.insert(attr->id(), attr);
131  nameMap__.insert(attr->safeName(), attr);
132  attributes__.insert(attr);
133 
134  if (attr->type().isSubType()) {
135  attr = attr->getCastDescendant();
136  } else {
137  break;
138  }
139  }
141  elt->setId(nextNodeId());
142  dag__.addNodeWithId(elt->id());
143  nodeIdMap__.insert(elt->id(), elt);
144  referenceSlots__.insert(
145  static_cast< PRMReferenceSlot< GUM_SCALAR >* >(elt));
146  nameMap__.insert(elt->name(), elt);
147  nameMap__.insert(elt->safeName(), elt);
148  } else {
149  GUM_ERROR(WrongClassElement,
150  "illegal ClassElement<GUM_SCALAR> for an Interface");
151  }
152 
153  return elt->id();
154  }
virtual void addNodeWithId(const NodeId id)
try to insert a node with the given id
Set< PRMReferenceSlot< GUM_SCALAR > *> referenceSlots__
The sequence of PRMReferenceSlot<GUM_SCALAR>.
Definition: PRMInterface.h:346
Set< PRMAttribute< GUM_SCALAR > *> attributes__
The sequence of PRMAttribute<GUM_SCALAR>s.
Definition: PRMInterface.h:343
static INLINE bool isAttribute(const PRMClassElement< GUM_SCALAR > &elt)
Returns true if obj_ptr is of type PRMAttribute.
static INLINE bool isReferenceSlot(const PRMClassElement< GUM_SCALAR > &elt)
Returns true if obj_ptr is of type PRMReferenceSlot.
NodeId nextNodeId()
Returns the next value of an unique counter for PRM&#39;s node id.
Definition: utils_prm.cpp:64
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ addArc()

template<typename GUM_SCALAR >
INLINE void gum::prm::PRMInterface< GUM_SCALAR >::addArc ( const std::string &  tail,
const std::string &  head 
)
virtual

An Interfance doesn't have any arc, this will raise an OperationNotAllowed exception.

Parameters
tailThe tail of the added arc.
headThe head of the added arc.
Exceptions
OperationNotAllowedSystematically throws an OperationNotAllowed.

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 367 of file PRMInterface_tpl.h.

368  {
369  GUM_ERROR(OperationNotAllowed, "an Interface does ! have arcs");
370  }
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ addCastDescendants__()

template<typename GUM_SCALAR>
void gum::prm::PRMInterface< GUM_SCALAR >::addCastDescendants__ ( PRMAttribute< GUM_SCALAR > *  start,
PRMAttribute< GUM_SCALAR > *  end 
)
private

The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>.

Definition at line 256 of file PRMInterface_tpl.h.

258  {
259  PRMAttribute< GUM_SCALAR >* parent = start;
260  PRMAttribute< GUM_SCALAR >* child = nullptr;
261 
262  while (parent->type().superType() != end->type()) {
263  child = parent->getCastDescendant();
264  child->setId(nextNodeId());
265  dag__.addNodeWithId(child->id());
266  nodeIdMap__.insert(child->id(), child);
267  // Only use child's safe name when adding to the name map!
268  nameMap__.insert(child->safeName(), child);
269  attributes__.insert(child);
270  // Do ! use Class<GUM_SCALAR>::insertArc(), child's CPF is already
271  // initialized properly
272  parent = child;
273  }
274 
275  parent->setAsCastDescendant(end);
276  }
virtual void addNodeWithId(const NodeId id)
try to insert a node with the given id
Set< PRMAttribute< GUM_SCALAR > *> attributes__
The sequence of PRMAttribute<GUM_SCALAR>s.
Definition: PRMInterface.h:343
NodeId nextNodeId()
Returns the next value of an unique counter for PRM&#39;s node id.
Definition: utils_prm.cpp:64
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
const ClassEltIterator & end()
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326

◆ addExtension__()

template<typename GUM_SCALAR>
INLINE void gum::prm::PRMInterface< GUM_SCALAR >::addExtension__ ( PRMInterface< GUM_SCALAR > *  c)
private

Add an Class<GUM_SCALAR> to the set of Class<GUM_SCALAR> which implements this PRMInterface.

Definition at line 397 of file PRMInterface_tpl.h.

397  {
398  extensions__.insert(i);
399  }
Set< PRMInterface< GUM_SCALAR > *> extensions__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:369

◆ addImplementation__()

template<typename GUM_SCALAR>
INLINE void gum::prm::PRMInterface< GUM_SCALAR >::addImplementation__ ( PRMClass< GUM_SCALAR > *  c)
private

Add an Class<GUM_SCALAR> to the set of Class<GUM_SCALAR> which implements this PRMInterface.

Definition at line 391 of file PRMInterface_tpl.h.

391  {
392  implementations__.insert(c);
393  }
Set< PRMClass< GUM_SCALAR > *> implementations__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:361

◆ attributes()

template<typename GUM_SCALAR >
INLINE const Set< PRMAttribute< GUM_SCALAR > *> & gum::prm::PRMInterface< GUM_SCALAR >::attributes ( ) const

Returns the set of PRMAttribute<GUM_SCALAR> of this Class<GUM_SCALAR>.

Returns
Returns the set of PRMAttribute<GUM_SCALAR> of this Class<GUM_SCALAR>.

Definition at line 483 of file PRMInterface_tpl.h.

483  {
484  return attributes__;
485  }
Set< PRMAttribute< GUM_SCALAR > *> attributes__
The sequence of PRMAttribute<GUM_SCALAR>s.
Definition: PRMInterface.h:343

◆ begin() [1/2]

template<typename GUM_SCALAR >
INLINE PRMInterface< GUM_SCALAR >::ClassEltIterator gum::prm::PRMInterface< GUM_SCALAR >::begin ( )

Definition at line 344 of file PRMInterface_tpl.h.

344  {
345  return nodeIdMap__.begin();
346  }
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330

◆ begin() [2/2]

template<typename GUM_SCALAR >
INLINE PRMInterface< GUM_SCALAR >::const_ClassEltIterator gum::prm::PRMInterface< GUM_SCALAR >::begin ( ) const

Definition at line 356 of file PRMInterface_tpl.h.

356  {
357  return nodeIdMap__.begin();
358  }
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330

◆ belongsTo()

template<typename GUM_SCALAR>
INLINE bool gum::prm::PRMClassElementContainer< GUM_SCALAR >::belongsTo ( const PRMClassElement< GUM_SCALAR > &  elt) const
virtualinherited

Returns true if elt belongs to this PRMClassElementContainer.

Parameters
eltA PRMClassElement<GUM_SCALAR>.
Returns
true if elt beglons to this PRMClassElementContainer.

Definition at line 178 of file PRMClassElementContainer_tpl.h.

179  {
180  try {
181  return &elt == &(get(elt.safeName()));
182  } catch (NotFound&) { return false; }
183  }

◆ checkOverloadLegality__()

template<typename GUM_SCALAR>
bool gum::prm::PRMInterface< GUM_SCALAR >::checkOverloadLegality__ ( const PRMClassElement< GUM_SCALAR > *  overloaded,
const PRMClassElement< GUM_SCALAR > *  overloader 
)
private

The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>.

Definition at line 279 of file PRMInterface_tpl.h.

281  {
282  if (overloaded->elt_type() != overloader->elt_type()) { return false; }
283 
284  if (overloaded->elt_type() == PRMClassElement< GUM_SCALAR >::prm_attribute) {
285  if (!overloader->type().isSubTypeOf(overloaded->type())) { return false; }
286  } else if (overloaded->elt_type()
288  auto ref_overloader
289  = static_cast< const PRMReferenceSlot< GUM_SCALAR >* >(overloader);
290  auto ref_overloaded
291  = static_cast< const PRMReferenceSlot< GUM_SCALAR >* >(overloaded);
292  if (!ref_overloader->slotType().isSubTypeOf(ref_overloaded->slotType())) {
293  return false;
294  }
295  } else {
296  return false;
297  }
298  return true;
299  }

◆ containerDag()

template<typename GUM_SCALAR >
INLINE const DAG & gum::prm::PRMClassElementContainer< GUM_SCALAR >::containerDag ( ) const
virtualinherited

Returns the gum::DAG of this PRMClassElementContainer.

Be very careful when using NodeId with PRMClassElement<GUM_SCALAR>: there is no guarantee that an inherited PRMClassElement<GUM_SCALAR> will have the same NodeId than its superclass counterpart.

When dealing with different classes and interfaces ALWAYS use safe-name as identifier.

Returns
the DAG of this PRMClassElementContainer.

Definition at line 187 of file PRMClassElementContainer_tpl.h.

187  {
188  return dag_();
189  }
virtual const DAG & dag_() const =0

◆ copyIOFlags_()

template<typename GUM_SCALAR>
void gum::prm::PRMClassElementContainer< GUM_SCALAR >::copyIOFlags_ ( const PRMClassElementContainer< GUM_SCALAR > &  c)
protectedvirtualinherited

Copy the IO Flags of c in this PRMClassElementContainer.

Parameters
cA PRMClassElementContainer.

Definition at line 36 of file PRMClassElementContainer_tpl.h.

37  {
38  for (const auto& flag: c.IOFlags__)
39  setIOFlag_(get(flag.first), flag.second);
40  }
virtual void setIOFlag_(const PRMClassElement< GUM_SCALAR > &elt, const std::pair< bool, bool > &flags)
Defines the IO flags of a PRMClassElement<GUM_SCALAR>.

◆ dag_() [1/2]

template<typename GUM_SCALAR >
INLINE const DAG & gum::prm::PRMInterface< GUM_SCALAR >::dag_ ( ) const
protectedvirtual

Returns a constant reference over this PRMInterface's DAG.

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 432 of file PRMInterface_tpl.h.

432  {
433  return dag__;
434  }
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326

◆ dag_() [2/2]

template<typename GUM_SCALAR >
INLINE DAG & gum::prm::PRMInterface< GUM_SCALAR >::dag_ ( )
protectedvirtual

Returns a non constant reference over this PRMInterface's DAG.

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 437 of file PRMInterface_tpl.h.

437  {
438  return dag__;
439  }
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326

◆ end() [1/2]

template<typename GUM_SCALAR >
INLINE const PRMInterface< GUM_SCALAR >::ClassEltIterator & gum::prm::PRMInterface< GUM_SCALAR >::end ( )

Definition at line 350 of file PRMInterface_tpl.h.

350  {
351  return nodeIdMap__.end();
352  }
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330

◆ end() [2/2]

template<typename GUM_SCALAR >
INLINE const PRMInterface< GUM_SCALAR >::const_ClassEltIterator & gum::prm::PRMInterface< GUM_SCALAR >::end ( ) const

Definition at line 362 of file PRMInterface_tpl.h.

362  {
363  return nodeIdMap__.end();
364  }
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330

◆ enum2str()

static std::string gum::prm::PRMObject::enum2str ( prm_type  type)
inlinestaticinherited

Returns the string representation of a PRMObject.

Definition at line 83 of file PRMObject.h.

83  {
84  switch (type) {
85  case prm_type::CLASS:
86  return "PRMType::CLASS";
87 
89  return "PRMType::CLASS_ELT";
90 
91  case prm_type::TYPE:
92  return "PRMType::TYPE";
93 
94  case prm_type::SYSTEM:
95  return "PRMType::SYSTEM";
96 
97  case prm_type::INSTANCE:
98  return "PRMType::INSTANCE";
99 
101  return "PRMType::PRM_INTERFACE";
102 
103  default:
104  return "unknown";
105  }
106  }

◆ exists() [1/2]

template<typename GUM_SCALAR >
INLINE bool gum::prm::PRMClassElementContainer< GUM_SCALAR >::exists ( const std::string &  name) const
virtualinherited

Returns true if a member with the given name exists in this PRMClassElementContainer or in the PRMClassElementContainer hierarchy.

Definition at line 169 of file PRMClassElementContainer_tpl.h.

170  {
171  try {
172  get(name);
173  return true;
174  } catch (NotFound&) { return false; }
175  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34

◆ exists() [2/2]

template<typename GUM_SCALAR >
INLINE bool gum::prm::PRMClassElementContainer< GUM_SCALAR >::exists ( NodeId  id) const
virtualinherited

Returns true if a member with the given id exists in this PRMClassElementContainer or in the PRMClassElementContainer hierarchy.

Parameters
idA NodeId.
Returns
true if id matches a PRMClassElement<GUM_SCALAR>.

Definition at line 164 of file PRMClassElementContainer_tpl.h.

164  {
165  return containerDag().exists(id);
166  }
bool exists(const NodeId id) const
alias for existsNode
virtual const DAG & containerDag() const
Returns the gum::DAG of this PRMClassElementContainer.

◆ findAllSubtypes_()

template<typename GUM_SCALAR>
void gum::prm::PRMInterface< GUM_SCALAR >::findAllSubtypes_ ( Set< PRMClassElementContainer< GUM_SCALAR > * > &  set)
protectedvirtual

Fills set with all the subtypes of this PRMInterface, this includes extensions and implementations.

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 506 of file PRMInterface_tpl.h.

507  {
508  for (const auto impl: implementations__) {
509  set.insert(impl);
510  impl->findAllSubtypes_(set);
511  }
512 
513  for (const auto ext: extensions__) {
514  set.insert(ext);
515  ext->findAllSubtypes_(set);
516  }
517  }
Set< PRMInterface< GUM_SCALAR > *> extensions__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:369
Set< PRMClass< GUM_SCALAR > *> implementations__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:361

◆ get() [1/4]

template<typename GUM_SCALAR >
INLINE PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::get ( NodeId  id)
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(NodeId).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 443 of file PRMInterface_tpl.h.

443  {
444  try {
445  return *(nodeIdMap__[id]);
446  } catch (NotFound&) {
447  GUM_ERROR(NotFound, "no ClassElement<GUM_SCALAR> with the given NodeId");
448  }
449  }
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ get() [2/4]

template<typename GUM_SCALAR >
INLINE const PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::get ( NodeId  id) const
virtual

Se gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(NodeId).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 453 of file PRMInterface_tpl.h.

453  {
454  try {
455  return *(nodeIdMap__[id]);
456  } catch (NotFound&) {
457  GUM_ERROR(NotFound, "no ClassElement<GUM_SCALAR> with the given NodeId");
458  }
459  }
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ get() [3/4]

template<typename GUM_SCALAR >
INLINE PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::get ( const std::string &  name)
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(const std::string&).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 463 of file PRMInterface_tpl.h.

463  {
464  try {
465  return *(nameMap__[name]);
466  } catch (NotFound&) {
467  GUM_ERROR(NotFound, "no ClassElement<GUM_SCALAR> with the given name");
468  }
469  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ get() [4/4]

template<typename GUM_SCALAR >
INLINE const PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::get ( const std::string &  name) const
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(const std::string&).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 473 of file PRMInterface_tpl.h.

473  {
474  try {
475  return *(nameMap__[name]);
476  } catch (NotFound&) {
477  GUM_ERROR(NotFound, "no ClassElement<GUM_SCALAR> with the given name");
478  }
479  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ getIOFlag_() [1/2]

template<typename GUM_SCALAR>
INLINE std::pair< bool, bool > & gum::prm::PRMClassElementContainer< GUM_SCALAR >::getIOFlag_ ( const PRMClassElement< GUM_SCALAR > &  elt)
protectedvirtualinherited

Returns the IO flags of a PRMClassElement<GUM_SCALAR>.

Parameters
eltThe PRMClassElement<GUM_SCALAR>.
Returns
elt's IO flags.
Exceptions
NotFoundRaised if elt does not have any IO flags.

Definition at line 132 of file PRMClassElementContainer_tpl.h.

133  {
134  try {
135  return IOFlags__[elt.safeName()];
136  } catch (NotFound&) {
137  GUM_ERROR(NotFound,
138  "this ClassElement<GUM_SCALAR> does not have any IO flags");
139  }
140  }
HashTable< std::string, std::pair< bool, bool > > IOFlags__
input / output flags, useful when inheriting or copying.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ getIOFlag_() [2/2]

template<typename GUM_SCALAR>
INLINE const std::pair< bool, bool > & gum::prm::PRMClassElementContainer< GUM_SCALAR >::getIOFlag_ ( const PRMClassElement< GUM_SCALAR > &  elt) const
protectedvirtualinherited

Returns the IO flags of a PRMClassElement<GUM_SCALAR>.

Parameters
eltThe PRMClassElement<GUM_SCALAR>.
Returns
elt's IO flags.
Exceptions
NotFoundRaised if elt does not have any IO flags.

Definition at line 144 of file PRMClassElementContainer_tpl.h.

145  {
146  try {
147  return IOFlags__[elt.safeName()];
148  } catch (NotFound&) {
149  GUM_ERROR(NotFound,
150  "this ClassElement<GUM_SCALAR> does not have any IO flags");
151  }
152  }
HashTable< std::string, std::pair< bool, bool > > IOFlags__
input / output flags, useful when inheriting or copying.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ implementations() [1/2]

template<typename GUM_SCALAR >
INLINE Set< PRMClass< GUM_SCALAR > *> & gum::prm::PRMInterface< GUM_SCALAR >::implementations ( )

Returns the set of Class<GUM_SCALAR> implementing this PRMInterface.

Definition at line 495 of file PRMInterface_tpl.h.

495  {
496  return implementations__;
497  }
Set< PRMClass< GUM_SCALAR > *> implementations__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:361

◆ implementations() [2/2]

template<typename GUM_SCALAR >
INLINE const Set< PRMClass< GUM_SCALAR > *> & gum::prm::PRMInterface< GUM_SCALAR >::implementations ( ) const

Returns the set of Class<GUM_SCALAR> implementing this PRMInterface.

Definition at line 501 of file PRMInterface_tpl.h.

501  {
502  return implementations__;
503  }
Set< PRMClass< GUM_SCALAR > *> implementations__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:361

◆ inheritInterface()

template<typename GUM_SCALAR >
void gum::prm::PRMInterface< GUM_SCALAR >::inheritInterface ( )

Inherits from this interface super interface, this should only be done when this inteface inheritance was delayed.

Definition at line 70 of file PRMInterface_tpl.h.

70  {
72  }
void inheritInterface__(const PRMInterface< GUM_SCALAR > &i)
Proceed with the copy of i in this.
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358

◆ inheritInterface__()

template<typename GUM_SCALAR>
void gum::prm::PRMInterface< GUM_SCALAR >::inheritInterface__ ( const PRMInterface< GUM_SCALAR > &  i)
private

Proceed with the copy of i in this.

Definition at line 75 of file PRMInterface_tpl.h.

76  {
77  // Copying attributes
78  for (const auto i_attr: i.attributes__) {
79  auto attr
80  = new PRMScalarAttribute< GUM_SCALAR >(i_attr->name(), i_attr->type());
81  attr->setId(i_attr->id());
82  nodeIdMap__.insert(attr->id(), attr);
83  attributes__.insert(attr);
84 
85  if (i.nameMap__[i_attr->name()] == i.nameMap__[i_attr->safeName()]) {
86  nameMap__.insert(attr->name(), attr);
87  }
88 
89  nameMap__.insert(attr->safeName(), attr);
90  dag__.addNodeWithId(attr->id());
91  }
92 
93  // Copying reference slots
94  for (const auto i_ref: i.referenceSlots__) {
95  auto ref = new PRMReferenceSlot< GUM_SCALAR >(
96  i_ref->name(),
97  const_cast< PRMClassElementContainer< GUM_SCALAR >& >(
98  i_ref->slotType()),
99  i_ref->isArray());
100 
101  ref->setId(i_ref->id());
102  nodeIdMap__.insert(ref->id(), ref);
103  referenceSlots__.insert(ref);
104 
105  if (i.nameMap__.exists(ref->name())) {
106  nameMap__.insert(ref->name(), ref);
107  }
108 
109  nameMap__.insert(ref->safeName(), ref);
110  dag__.addNodeWithId(ref->id());
111  }
112  }
virtual void addNodeWithId(const NodeId id)
try to insert a node with the given id
Set< PRMReferenceSlot< GUM_SCALAR > *> referenceSlots__
The sequence of PRMReferenceSlot<GUM_SCALAR>.
Definition: PRMInterface.h:346
Set< PRMAttribute< GUM_SCALAR > *> attributes__
The sequence of PRMAttribute<GUM_SCALAR>s.
Definition: PRMInterface.h:343
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326

◆ isClass()

static INLINE bool gum::prm::PRMObject::isClass ( const PRMObject obj)
inlinestaticinherited

Returns true if obj_ptr is of type Class.

Definition at line 109 of file PRMObject.h.

References gum::prm::PRMObject::PRMObject().

109  {
110  return obj.obj_type() == prm_type::CLASS;
111  }
+ Here is the call graph for this function:

◆ isInnerNode()

template<typename GUM_SCALAR>
INLINE bool gum::prm::PRMClassElementContainer< GUM_SCALAR >::isInnerNode ( const PRMClassElement< GUM_SCALAR > &  elt) const
virtualinherited

Returns true if the node is an inner node.

PRMAttribute or PRMAggregate can either be input, output, both or internal nodes.

By defaut, attributes and aggregates are inner nodes.

Parameters
eltA PRMClassElement<GUM_SCALAR>.
Returns
true if elt is an inner node.
Exceptions
NotFoundRaised if NodeId does'nt match any PRMClassElement<GUM_SCALAR> in this.
WrongClassElementRaised if NodeId is neither an PRMAttribute nor an PRMAggregate.

Definition at line 117 of file PRMClassElementContainer_tpl.h.

118  {
119  try {
120  return !(getIOFlag_(elt).first || getIOFlag_(elt).second);
121  } catch (NotFound&) { return true; }
122  }
virtual std::pair< bool, bool > & getIOFlag_(const PRMClassElement< GUM_SCALAR > &elt)
Returns the IO flags of a PRMClassElement<GUM_SCALAR>.

◆ isInputNode()

template<typename GUM_SCALAR>
INLINE bool gum::prm::PRMClassElementContainer< GUM_SCALAR >::isInputNode ( const PRMClassElement< GUM_SCALAR > &  elt) const
virtualinherited

Returns true if the node is an input node.

PRMAttribute or PRMAggregate can either be input, output, both or internal nodes.

By defaut, attributes and aggregates are inner nodes.

Parameters
eltA PRMClassElement<GUM_SCALAR>.
Returns
Returns true if id is an input node.

Definition at line 71 of file PRMClassElementContainer_tpl.h.

72  {
73  try {
74  return getIOFlag_(elt).first;
75  } catch (NotFound&) { return false; }
76  }
virtual std::pair< bool, bool > & getIOFlag_(const PRMClassElement< GUM_SCALAR > &elt)
Returns the IO flags of a PRMClassElement<GUM_SCALAR>.

◆ isInstance()

static INLINE bool gum::prm::PRMObject::isInstance ( const PRMObject obj)
inlinestaticinherited

Returns true if obj_ptr is of type PRMInstance.

Definition at line 119 of file PRMObject.h.

References gum::prm::PRMObject::PRMObject().

119  {
120  return obj.obj_type() == prm_type::INSTANCE;
121  }
+ Here is the call graph for this function:

◆ isInterface()

static INLINE bool gum::prm::PRMObject::isInterface ( const PRMObject obj)
inlinestaticinherited

Returns true if obj_ptr is of type PRMInterface.

Definition at line 114 of file PRMObject.h.

References gum::prm::PRMObject::PRMObject().

114  {
115  return obj.obj_type() == prm_type::PRM_INTERFACE;
116  }
+ Here is the call graph for this function:

◆ isOutputNode()

template<typename GUM_SCALAR>
INLINE bool gum::prm::PRMInterface< GUM_SCALAR >::isOutputNode ( const PRMClassElement< GUM_SCALAR > &  elt) const
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::get(const std::string&).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 520 of file PRMInterface_tpl.h.

521  {
522  try {
523  if (!this->getIOFlag_(elt).second) {
524  for (auto i: implementations__) {
525  if (i->isOutputNode(elt)) { return true; }
526  }
527 
528  if (superInterface__ && superInterface__->isOutputNode(elt)) {
529  return true;
530  }
531 
532  } else {
533  return true;
534  }
535  } catch (NotFound&) {}
536  return false;
537  }
virtual std::pair< bool, bool > & getIOFlag_(const PRMClassElement< GUM_SCALAR > &elt)
Returns the IO flags of a PRMClassElement<GUM_SCALAR>.
Set< PRMClass< GUM_SCALAR > *> implementations__
The set of Class<GUM_SCALAR> which implements this PRMInterface.
Definition: PRMInterface.h:361
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358

◆ isSubTypeOf()

template<typename GUM_SCALAR>
bool gum::prm::PRMInterface< GUM_SCALAR >::isSubTypeOf ( const PRMClassElementContainer< GUM_SCALAR > &  cec) const
virtual

Test if this PRMInterface is a sub PRMInterface of cec.

PRMInterface can not be a sub PRMInterface of a Class<GUM_SCALAR>, so if cec is a Class<GUM_SCALAR> this method will return false.

If cec is an PRMInterface then this PRMInterface is a sub PRMInterface of cec if they are equal or there exists a super PRMInterface of this PRMInterface which is equal to cec.

Parameters
cecThe PRMClassElementContainer<GUM_SCALAR> for which we determine if this PRMInterface is a sub PRMInterface of it.
Returns
Returns true if this Class<GUM_SCALAR> is a subclass of cec.

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 302 of file PRMInterface_tpl.h.

303  {
304  switch (cec.obj_type()) {
306  return false;
307  }
308 
310  const PRMInterface* current = this;
311 
312  while (current != 0) {
313  if (current == &(cec)) return true;
314 
315  current = current->superInterface__;
316  }
317 
318  return false;
319  }
320 
321  default: {
322  GUM_ERROR(FatalError, "unknown ClassElementContainer<GUM_SCALAR>");
323  }
324  }
325  }
PRMInterface(const std::string &name)
Default constructor.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ isSuperTypeOf()

template<typename GUM_SCALAR>
INLINE bool gum::prm::PRMClassElementContainer< GUM_SCALAR >::isSuperTypeOf ( const PRMClassElementContainer< GUM_SCALAR > &  cec) const
virtualinherited

Test if this PRMClassElementContainer is a super type of cec.

This returns cec.isSubTypeOf(*this).

Parameters
cec
Returns
return true if this PRMClassElementContainer is a super type of cec.

Definition at line 125 of file PRMClassElementContainer_tpl.h.

126  {
127  return cec.isSubTypeOf(*this);
128  }

◆ LEFT_CAST()

static std::string gum::prm::PRMObject::LEFT_CAST ( )
inlinestaticinherited

Enumeration of the different types of objects handled by a PRM.

The "all" type is used to tell that we want any kind of PRMType (useful with iterators for example). No PRMObject will ever have "all" as type.

Definition at line 79 of file PRMObject.h.

79 { return "("; }

◆ name() [1/2]

INLINE const std::string & gum::prm::PRMObject::name ( ) const
inherited

Returns the name of this object.

Definition at line 34 of file PRMObject_inl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

34 { return name__; }
std::string name__
Definition: PRMObject.h:207
+ Here is the call graph for this function:

◆ name() [2/2]

INLINE void gum::prm::PRMObject::name ( const std::string &  name)
inherited

Change the name of the PRM Object.

Warning
Don't do this unless you know what you are doing !

Definition at line 38 of file PRMObject_inl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

38 { name__ = name; }
std::string name__
Definition: PRMObject.h:207
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
+ Here is the call graph for this function:

◆ obj_type()

template<typename GUM_SCALAR >
INLINE PRMObject::prm_type gum::prm::PRMInterface< GUM_SCALAR >::obj_type ( ) const
virtual

Implementation of pure virtual method of PRMObject.

Implements gum::prm::PRMObject.

Definition at line 427 of file PRMInterface_tpl.h.

◆ operator!=()

INLINE bool gum::prm::PRMObject::operator!= ( const PRMObject obj) const
inherited

To PRMObject are equal if they have the same name (which is unique).

Definition at line 48 of file PRMObject_inl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

48  {
49  return name__ != obj.name();
50  }
std::string name__
Definition: PRMObject.h:207
+ Here is the call graph for this function:

◆ operator=()

template<typename GUM_SCALAR>
PRMInterface< GUM_SCALAR >& gum::prm::PRMInterface< GUM_SCALAR >::operator= ( const PRMInterface< GUM_SCALAR > &  source)
private

Copy operator. Don't use it.

◆ operator==()

INLINE bool gum::prm::PRMObject::operator== ( const PRMObject obj) const
inherited

To PRMObject are equal if they have the same name (which is unique).

Definition at line 42 of file PRMObject_inl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

42  {
43  return name__ == obj.name();
44  }
std::string name__
Definition: PRMObject.h:207
+ Here is the call graph for this function:

◆ operator[]() [1/4]

template<typename GUM_SCALAR >
INLINE PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::operator[] ( NodeId  id)
virtual

◆ operator[]() [2/4]

template<typename GUM_SCALAR >
INLINE const PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::operator[] ( NodeId  id) const
virtual

◆ operator[]() [3/4]

template<typename GUM_SCALAR >
INLINE PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::operator[] ( const std::string &  name)
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::operator[](const std::string&).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 415 of file PRMInterface_tpl.h.

415  {
416  return get(name);
417  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34

◆ operator[]() [4/4]

template<typename GUM_SCALAR >
INLINE const PRMClassElement< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::operator[] ( const std::string &  name) const
virtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>::operator[](const std::string&).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 421 of file PRMInterface_tpl.h.

421  {
422  return get(name);
423  }
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34

◆ overload()

template<typename GUM_SCALAR>
NodeId gum::prm::PRMInterface< GUM_SCALAR >::overload ( PRMClassElement< GUM_SCALAR > *  elt)
virtual

Add a new PRMClassElement<GUM_SCALAR> which overload an inherited PRMClassElement<GUM_SCALAR>.

The pointer is "given" to this class, which will delete it when ~Class<GUM_SCALAR>() is called.

The NodeId of elt is defined when it is added to this, discarding any previous value. There is no garanty that elt will have the same NodeId than the PRMClassElement<GUM_SCALAR> it overloaded.

You can only overload inherited PRMClassElement<GUM_SCALAR> and only if elt is a subtype of the inherited PRMClassElement<GUM_SCALAR>. You do not define dependencies in an PRMInterface so it is useless to overload an PRMAttribute<GUM_SCALAR> with another sharing the same type, and if tried it will raise an OperationNotAllowed exception.

Parameters
eltThe new PRMClassElement<GUM_SCALAR> overloading an inherited PRMClassElement<GUM_SCALAR> in this.
Returns
the NodeId assigned to elt.
Exceptions
NotFoundRaised if no overloaded PRMClassElement<GUM_SCALAR> is found.
OperationNotAllowedRaised if the overloading is impossible.

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 157 of file PRMInterface_tpl.h.

158  {
159  try {
160  if (!super().exists(overloader->name())) {
161  GUM_ERROR(OperationNotAllowed,
162  "found no ClassElement<GUM_SCALAR> to overload");
163  }
164  } catch (NotFound&) {
165  GUM_ERROR(OperationNotAllowed,
166  "overload is possible only with sub interfaces");
167  }
168 
169  PRMClassElement< GUM_SCALAR >* overloaded = nameMap__[overloader->name()];
170  if (overloaded == overloader) {
171  GUM_ERROR(DuplicateElement,
172  "duplicate ClassElement '" << overloader->name() << "'");
173  }
174  if (!checkOverloadLegality__(overloaded, overloader)) {
175  GUM_ERROR(OperationNotAllowed, "illegal overload");
176  }
177 
178  switch (overloader->elt_type()) {
180  auto attr_overloader
181  = static_cast< PRMAttribute< GUM_SCALAR >* >(overloader);
182  auto attr_overloaded
183  = static_cast< PRMAttribute< GUM_SCALAR >* >(overloaded);
184  overloadAttribute__(attr_overloader, attr_overloaded);
185  break;
186  }
187 
189  auto ref_overloader
190  = static_cast< PRMReferenceSlot< GUM_SCALAR >* >(overloader);
191  auto ref_overloaded
192  = static_cast< PRMReferenceSlot< GUM_SCALAR >* >(overloaded);
193  overloadReferenceSlot__(ref_overloader, ref_overloaded);
194  break;
195  }
196 
199  auto msg = "element can ! be overloaded";
200  GUM_ERROR(OperationNotAllowed, msg);
201  break;
202  }
203 
204  default: {
205  GUM_ERROR(FatalError, "unknown ClassElement<GUM_SCALAR> type");
206  }
207  }
208 
209  return overloader->id();
210  }
void overloadAttribute__(PRMAttribute< GUM_SCALAR > *overloader, PRMAttribute< GUM_SCALAR > *overloaded)
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
virtual bool exists(const std::string &name) const
Returns true if a member with the given name exists in this PRMClassElementContainer or in the PRMCla...
void overloadReferenceSlot__(PRMReferenceSlot< GUM_SCALAR > *overloader, PRMReferenceSlot< GUM_SCALAR > *overloaded)
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
bool checkOverloadLegality__(const PRMClassElement< GUM_SCALAR > *overloaded, const PRMClassElement< GUM_SCALAR > *overloader)
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
PRMInterface< GUM_SCALAR > & super()
Returns the superInterface of this PRMInterface.
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ overloadAttribute__()

template<typename GUM_SCALAR>
void gum::prm::PRMInterface< GUM_SCALAR >::overloadAttribute__ ( PRMAttribute< GUM_SCALAR > *  overloader,
PRMAttribute< GUM_SCALAR > *  overloaded 
)
private

The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>.

Definition at line 213 of file PRMInterface_tpl.h.

215  {
216  if (overloader->type() != overloaded->type()) {
217  overloader->setId(nextNodeId());
218  dag__.addNodeWithId(overloader->id());
219  nodeIdMap__.insert(overloader->id(), overloader);
220  nameMap__[overloader->name()] = overloader;
221  nameMap__.insert(overloader->safeName(), overloader);
222  attributes__.insert(overloader);
223  addCastDescendants__(overloader, overloaded);
224  } else {
225  overloader->setId(overloaded->id());
226  nodeIdMap__[overloader->id()] = overloader;
227  nameMap__[overloader->name()] = overloader;
228  nameMap__[overloader->safeName()] = overloader;
229  attributes__.erase(overloaded);
230  attributes__.insert(overloader);
231  // Swapping types, ugly but necessary to preserve the
232  // PRMType<GUM_SCALAR>
233  // pointer of overloaded
234  overloader->overload(overloaded);
235  delete overloaded;
236  }
237  }
virtual void addNodeWithId(const NodeId id)
try to insert a node with the given id
Set< PRMAttribute< GUM_SCALAR > *> attributes__
The sequence of PRMAttribute<GUM_SCALAR>s.
Definition: PRMInterface.h:343
NodeId nextNodeId()
Returns the next value of an unique counter for PRM&#39;s node id.
Definition: utils_prm.cpp:64
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330
DAG dag__
The dag representing dependencies between formal attributes and slots.
Definition: PRMInterface.h:326
void addCastDescendants__(PRMAttribute< GUM_SCALAR > *start, PRMAttribute< GUM_SCALAR > *end)
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...

◆ overloadReferenceSlot__()

template<typename GUM_SCALAR>
void gum::prm::PRMInterface< GUM_SCALAR >::overloadReferenceSlot__ ( PRMReferenceSlot< GUM_SCALAR > *  overloader,
PRMReferenceSlot< GUM_SCALAR > *  overloaded 
)
private

The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>.

Definition at line 240 of file PRMInterface_tpl.h.

242  {
243  // Adding overloading reference
244  overloader->setId(overloaded->id());
245  nodeIdMap__[overloader->id()] = overloader;
246  nameMap__[overloader->name()] = overloader;
247  nameMap__.insert(overloader->safeName(), overloader);
248  referenceSlots__.insert(overloader);
249  // Removing overloaded PRMReferenceSlot<GUM_SCALAR>
250  referenceSlots__.erase(overloaded);
251  nameMap__.erase(overloaded->safeName());
252  delete overloaded;
253  }
Set< PRMReferenceSlot< GUM_SCALAR > *> referenceSlots__
The sequence of PRMReferenceSlot<GUM_SCALAR>.
Definition: PRMInterface.h:346
HashTable< std::string, PRMClassElement< GUM_SCALAR > *> nameMap__
Mapping between a member&#39;s name and itself. Used for fast access to a member given it&#39;s name...
Definition: PRMInterface.h:340
NodeProperty< PRMClassElement< GUM_SCALAR > *> nodeIdMap__
Mapping between node&#39;s id and their name (being an attribute or a slot). Used for fast access to a me...
Definition: PRMInterface.h:330

◆ referenceSlots()

template<typename GUM_SCALAR >
INLINE const Set< PRMReferenceSlot< GUM_SCALAR > *> & gum::prm::PRMInterface< GUM_SCALAR >::referenceSlots ( ) const

Returns the set of PRMAggregate of this Class<GUM_SCALAR>.

Returns
Returns the set of PRMAggregate of this Class<GUM_SCALAR>.

Definition at line 489 of file PRMInterface_tpl.h.

489  {
490  return referenceSlots__;
491  }
Set< PRMReferenceSlot< GUM_SCALAR > *> referenceSlots__
The sequence of PRMReferenceSlot<GUM_SCALAR>.
Definition: PRMInterface.h:346

◆ RIGHT_CAST()

static std::string gum::prm::PRMObject::RIGHT_CAST ( )
inlinestaticinherited

Enumeration of the different types of objects handled by a PRM.

The "all" type is used to tell that we want any kind of PRMType (useful with iterators for example). No PRMObject will ever have "all" as type.

Definition at line 80 of file PRMObject.h.

80 { return ")"; }

◆ setInputNode()

template<typename GUM_SCALAR>
INLINE void gum::prm::PRMClassElementContainer< GUM_SCALAR >::setInputNode ( const PRMClassElement< GUM_SCALAR > &  elt,
bool  b 
)
virtualinherited

Set the input flag value of id at b.

PRMAttribute or PRMAggregate can either be input, output, both or internal nodes.

By defaut, attributes and aggregates are inner nodes.

Parameters
eltA PRMClassElement<GUM_SCALAR>.
bThe flag value.
Exceptions
NotFoundRaised if id does'nt match any PRMClassElement<GUM_SCALAR> in this.
WrongClassElementRaised if NodeId is neither an PRMAttribute nor an PRMAggregate.

Definition at line 79 of file PRMClassElementContainer_tpl.h.

81  {
82  if (!exists(elt.safeName())) {
83  GUM_ERROR(NotFound,
84  ": <" + elt.safeName() + "> is not in <" + name() + ">");
87  try {
88  getIOFlag_(elt).first = b;
89  } catch (NotFound&) { setIOFlag_(elt, std::make_pair(b, false)); }
90  } else {
91  GUM_ERROR(WrongClassElement,
92  "given id is not an PRMAttribute or an PRMAggregate");
93  }
94  }
virtual std::pair< bool, bool > & getIOFlag_(const PRMClassElement< GUM_SCALAR > &elt)
Returns the IO flags of a PRMClassElement<GUM_SCALAR>.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
virtual bool exists(const std::string &name) const
Returns true if a member with the given name exists in this PRMClassElementContainer or in the PRMCla...
static INLINE bool isAttribute(const PRMClassElement< GUM_SCALAR > &elt)
Returns true if obj_ptr is of type PRMAttribute.
virtual void setIOFlag_(const PRMClassElement< GUM_SCALAR > &elt, const std::pair< bool, bool > &flags)
Defines the IO flags of a PRMClassElement<GUM_SCALAR>.
static INLINE bool isAggregate(const PRMClassElement< GUM_SCALAR > &elt)
Return true if obj is of type PRMAggregate.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ setIOFlag_()

template<typename GUM_SCALAR>
INLINE void gum::prm::PRMClassElementContainer< GUM_SCALAR >::setIOFlag_ ( const PRMClassElement< GUM_SCALAR > &  elt,
const std::pair< bool, bool > &  flags 
)
protectedvirtualinherited

Defines the IO flags of a PRMClassElement<GUM_SCALAR>.

Parameters
eltThe PRMClassElement<GUM_SCALAR>.
flagsThe IO flags of elt. Overwrite any existing flags.
Returns
elt's IO flags.
Exceptions
NotFoundRaised if elt does not have any IO flags.

Definition at line 155 of file PRMClassElementContainer_tpl.h.

157  {
158  try {
159  IOFlags__[elt.safeName()] = flags;
160  } catch (NotFound&) { IOFlags__.insert(elt.safeName(), flags); }
161  }
value_type & insert(const Key &key, const Val &val)
Adds a new element (actually a copy of this element) into the hash table.
HashTable< std::string, std::pair< bool, bool > > IOFlags__
input / output flags, useful when inheriting or copying.

◆ setOutputNode()

template<typename GUM_SCALAR>
INLINE void gum::prm::PRMClassElementContainer< GUM_SCALAR >::setOutputNode ( const PRMClassElement< GUM_SCALAR > &  elt,
bool  b 
)
virtualinherited

Set the output flag value of id at b.

PRMAttribute or PRMAggregate can either be input, output, both or internal nodes.

By defaut, attributes and aggregates are inner nodes.

Parameters
eltA PRMClassElement<GUM_SCALAR>.
bThe flag value.
Exceptions
NotFoundRaised if id does'nt match any PRMClassElement<GUM_SCALAR> in this.
WrongClassElementRaised if NodeId is neither an PRMAttribute nor an PRMAggregate.

Definition at line 97 of file PRMClassElementContainer_tpl.h.

99  {
100  if (!exists(elt.safeName())) {
101  GUM_ERROR(NotFound, "<" + elt.safeName() + "> is not in <" + name() + ">");
104  try {
105  getIOFlag_(elt).second = b;
106  } catch (NotFound&) { setIOFlag_(elt, std::make_pair(false, b)); }
107 
108  if (b) { updateDescendants_(elt); }
109  } else {
110  GUM_ERROR(WrongClassElement,
111  "given ClassElement<GUM_SCALAR> is not an "
112  "PRMAttribute or an PRMAggregate");
113  }
114  }
virtual void updateDescendants_(const PRMClassElement< GUM_SCALAR > &elt)=0
When a PRMClassElement<GUM_SCALAR> becomes an Output node we must update any the IO flags of every de...
virtual std::pair< bool, bool > & getIOFlag_(const PRMClassElement< GUM_SCALAR > &elt)
Returns the IO flags of a PRMClassElement<GUM_SCALAR>.
const std::string & name() const
Returns the name of this object.
Definition: PRMObject_inl.h:34
virtual bool exists(const std::string &name) const
Returns true if a member with the given name exists in this PRMClassElementContainer or in the PRMCla...
static INLINE bool isAttribute(const PRMClassElement< GUM_SCALAR > &elt)
Returns true if obj_ptr is of type PRMAttribute.
virtual void setIOFlag_(const PRMClassElement< GUM_SCALAR > &elt, const std::pair< bool, bool > &flags)
Defines the IO flags of a PRMClassElement<GUM_SCALAR>.
static INLINE bool isAggregate(const PRMClassElement< GUM_SCALAR > &elt)
Return true if obj is of type PRMAggregate.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ super() [1/2]

template<typename GUM_SCALAR >
INLINE PRMInterface< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::super ( )

Returns the superInterface of this PRMInterface.

Returns
Returns the super PRMInterface of this PRMInterface.
Exceptions
NotFoundRaised if this has no super PRMInterface.

Definition at line 373 of file PRMInterface_tpl.h.

373  {
374  if (superInterface__)
375  return *superInterface__;
376  else
377  GUM_ERROR(NotFound, "this Interface is ! a sub interface");
378  }
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ super() [2/2]

template<typename GUM_SCALAR >
INLINE const PRMInterface< GUM_SCALAR > & gum::prm::PRMInterface< GUM_SCALAR >::super ( ) const

Returns the superInterface of this PRMInterface.

Returns
Returns the super PRMInterface of this PRMInterface.
Exceptions
NotFoundRaised if this has no super PRMInterface.

Definition at line 382 of file PRMInterface_tpl.h.

382  {
383  if (superInterface__)
384  return *superInterface__;
385  else
386  GUM_ERROR(NotFound, "this Interface is ! a sub interface");
387  }
PRMInterface< GUM_SCALAR > * superInterface__
The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this...
Definition: PRMInterface.h:358
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ updateDescendants_()

template<typename GUM_SCALAR>
void gum::prm::PRMInterface< GUM_SCALAR >::updateDescendants_ ( const PRMClassElement< GUM_SCALAR > &  elt)
protectedvirtual

See gum::prm::PRMClassElementContainer<GUM_SCALAR>(const PRMClassElement<GUM_SCALAR>&).

Implements gum::prm::PRMClassElementContainer< GUM_SCALAR >.

Definition at line 328 of file PRMInterface_tpl.h.

329  {
330  // for ( const auto ext : extensions__ )
331  // if ( !ext->isOutputNode( elt ) ) ext->setOutputNode( elt, true );
332 
333  // for ( const auto impl : implementations__ ) {
334  // // Because of cyclic dependencies we must use a reinterpret cast.
335  // PRMClassElementContainer<GUM_SCALAR>* c =
336  // reinterpret_cast<PRMClassElementContainer<GUM_SCALAR>*>( impl );
337 
338  // if ( ! c->isOutputNode( elt ) ) c->setOutputNode( elt, true );
339  //}
340  }

Friends And Related Function Documentation

◆ PRMClass< GUM_SCALAR >

template<typename GUM_SCALAR>
friend class PRMClass< GUM_SCALAR >
friend

Definition at line 68 of file PRMInterface.h.

Member Data Documentation

◆ attributes__

template<typename GUM_SCALAR>
Set< PRMAttribute< GUM_SCALAR >* > gum::prm::PRMInterface< GUM_SCALAR >::attributes__
private

The sequence of PRMAttribute<GUM_SCALAR>s.

Definition at line 343 of file PRMInterface.h.

◆ dag__

template<typename GUM_SCALAR>
DAG gum::prm::PRMInterface< GUM_SCALAR >::dag__
private

The dag representing dependencies between formal attributes and slots.

Definition at line 326 of file PRMInterface.h.

◆ extensions__

template<typename GUM_SCALAR>
Set< PRMInterface< GUM_SCALAR >* > gum::prm::PRMInterface< GUM_SCALAR >::extensions__
private

The set of Class<GUM_SCALAR> which implements this PRMInterface.

Definition at line 369 of file PRMInterface.h.

◆ implementations__

template<typename GUM_SCALAR>
Set< PRMClass< GUM_SCALAR >* > gum::prm::PRMInterface< GUM_SCALAR >::implementations__
private

The set of Class<GUM_SCALAR> which implements this PRMInterface.

Definition at line 361 of file PRMInterface.h.

◆ nameMap__

template<typename GUM_SCALAR>
HashTable< std::string, PRMClassElement< GUM_SCALAR >* > gum::prm::PRMInterface< GUM_SCALAR >::nameMap__
private

Mapping between a member's name and itself. Used for fast access to a member given it's name.

Definition at line 340 of file PRMInterface.h.

◆ nodeIdMap__

template<typename GUM_SCALAR>
NodeProperty< PRMClassElement< GUM_SCALAR >* > gum::prm::PRMInterface< GUM_SCALAR >::nodeIdMap__
private

Mapping between node's id and their name (being an attribute or a slot). Used for fast access to a member given it's node id.

Definition at line 330 of file PRMInterface.h.

◆ referenceSlots__

template<typename GUM_SCALAR>
Set< PRMReferenceSlot< GUM_SCALAR >* > gum::prm::PRMInterface< GUM_SCALAR >::referenceSlots__
private

The sequence of PRMReferenceSlot<GUM_SCALAR>.

Definition at line 346 of file PRMInterface.h.

◆ superInterface__

template<typename GUM_SCALAR>
PRMInterface< GUM_SCALAR >* gum::prm::PRMInterface< GUM_SCALAR >::superInterface__
private

The alternate PRMClassElementContainer<GUM_SCALAR> searched for elements defined in this. Note that this is first searched for gum::PRMClassElement<GUM_SCALAR>.

Definition at line 358 of file PRMInterface.h.


The documentation for this class was generated from the following files: