28 #ifndef DOXYGEN_SHOULD_SKIP_THIS 30 # include <agrum/agrum.h> 36 template <
typename GUM_SCALAR >
37 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::ScheduleCliqueStoreMultiDim(
38 const ScheduleMultiDim< GUM_SCALAR >& table,
39 NodeProperty< Set<
const MultiDimImplementation< GUM_SCALAR >* > >& clique_tables,
41 ScheduleOperation< GUM_SCALAR >(ScheduleOperation< GUM_SCALAR >::Type::CLIQUE_STORE_MULTIDIM),
42 _table_(table), _tableSet_(&clique_tables), _clique_(clique), _args_(0) {
44 GUM_CONSTRUCTOR(ScheduleCliqueStoreMultiDim);
48 template <
typename GUM_SCALAR >
49 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::ScheduleCliqueStoreMultiDim(
50 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& from) :
51 ScheduleOperation< GUM_SCALAR >(from),
52 _table_(from._table_), _tableSet_(from._tableSet_), _clique_(from._clique_), _args_(0) {
54 GUM_CONS_CPY(ScheduleCliqueStoreMultiDim);
58 template <
typename GUM_SCALAR >
59 ScheduleCliqueStoreMultiDim< GUM_SCALAR >*
60 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::newFactory()
const {
61 return new ScheduleCliqueStoreMultiDim< GUM_SCALAR >(*
this);
65 template <
typename GUM_SCALAR >
66 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::~ScheduleCliqueStoreMultiDim() {
68 GUM_DESTRUCTOR(ScheduleCliqueStoreMultiDim);
70 if (_args_)
delete _args_;
74 template <
typename GUM_SCALAR >
75 ScheduleCliqueStoreMultiDim< GUM_SCALAR >& ScheduleCliqueStoreMultiDim< GUM_SCALAR >::operator=(
76 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& from) {
79 ScheduleOperation< GUM_SCALAR >::operator=(from);
80 _table_ = from._table_;
81 _tableSet_ = from._tableSet_;
82 _clique_ = from._clique_;
86 _args_->insert(&_table_);
94 template <
typename GUM_SCALAR >
95 bool ScheduleCliqueStoreMultiDim< GUM_SCALAR >::operator==(
96 const ScheduleOperation< GUM_SCALAR >& op)
const {
97 if (
this->type() != op.type())
return false;
99 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& real_op
100 =
static_cast<
const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& >(op);
101 return ((_table_ == real_op._table_) && (_tableSet_ == real_op._tableSet_)
102 && (_clique_ == real_op._clique_));
106 template <
typename GUM_SCALAR >
107 bool ScheduleCliqueStoreMultiDim< GUM_SCALAR >::operator!=(
108 const ScheduleOperation< GUM_SCALAR >& op)
const {
109 if (
this->type() != op.type())
return true;
111 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& real_op
112 =
static_cast<
const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& >(op);
113 return ((_table_ != real_op._table_) || (_tableSet_ != real_op._tableSet_)
114 || (_clique_ != real_op._clique_));
118 template <
typename GUM_SCALAR >
119 void ScheduleCliqueStoreMultiDim< GUM_SCALAR >::execute() {
120 const MultiDimImplementation< GUM_SCALAR >& multidim = _table_.multiDim();
122 if (!_tableSet_->exists(_clique_)) {
123 _tableSet_->insert(_clique_, Set<
const MultiDimImplementation< GUM_SCALAR >* >());
126 _tableSet_->operator[](_clique_).insert(&multidim);
131 template <
typename GUM_SCALAR >
132 INLINE
float ScheduleCliqueStoreMultiDim< GUM_SCALAR >::nbOperations()
const {
137 template <
typename GUM_SCALAR >
138 INLINE std::pair<
long,
long > ScheduleCliqueStoreMultiDim< GUM_SCALAR >::memoryUsage()
const {
139 return std::pair<
long,
long >(0, 0);
143 template <
typename GUM_SCALAR >
144 INLINE
const Sequence<
const ScheduleMultiDim< GUM_SCALAR >* >&
145 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::multiDimArgs()
const {
147 _args_ =
new Sequence<
const ScheduleMultiDim< GUM_SCALAR >* >;
148 _args_->insert(&_table_);
155 template <
typename GUM_SCALAR >
156 INLINE
const Sequence<
const ScheduleMultiDim< GUM_SCALAR >* >&
157 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::multiDimResults()
const {
158 static Sequence<
const ScheduleMultiDim< GUM_SCALAR >* > empty_seq;
159 # ifdef GUM_DEBUG_MODE 163 static bool first_time =
true;
167 __debug__::_inc_deletion_(
"Sequence", __FILE__, __LINE__,
"destructor of", (
void*)&empty_seq);
168 __debug__::_inc_deletion_(
"SequenceImplementation",
180 template <
typename GUM_SCALAR >
181 std::string ScheduleCliqueStoreMultiDim< GUM_SCALAR >::toString()
const {
183 s <<
"store ( " << _table_.toString() <<
", clique " << _clique_ <<
" )";