28 #include <agrum/PRM/elements/PRMSlotChain.h> 33 template <
typename GUM_SCALAR >
34 PRMSlotChain< GUM_SCALAR >::PRMSlotChain(
35 const std::string& name,
36 const Sequence< PRMClassElement< GUM_SCALAR >* >& chain) :
37 PRMClassElement< GUM_SCALAR >(name),
38 _chain_(
new Sequence< PRMClassElement< GUM_SCALAR >* >(chain)), _isMultiple_(
false) {
39 GUM_CONSTRUCTOR(PRMSlotChain);
41 if (_chain_->size() < 2) {
42 GUM_ERROR(OperationNotAllowed,
"chain must contain at least two ClassElement")
45 for (Size i = 0; i < _chain_->size() - 1; ++i) {
46 if (_chain_->atPos(i)->elt_type() != PRMClassElement< GUM_SCALAR >::prm_refslot) {
47 GUM_ERROR(WrongClassElement,
"illegal ClassElement in chain")
51 ||
static_cast< PRMReferenceSlot< GUM_SCALAR >* >(_chain_->atPos(i))->isArray();
58 = PRMObject::LEFT_CAST() + lastElt().type().name() + PRMObject::RIGHT_CAST() + name;
59 this->lastElt().type().variable().setName(name);
INLINE void emplace(Args &&... args)
ParamScopeData(const std::string &s, const PRMReferenceSlot< GUM_SCALAR > &ref, Idx d)