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 >* > >&
42 ScheduleOperation< GUM_SCALAR >(
43 ScheduleOperation< GUM_SCALAR >::Type::CLIQUE_STORE_MULTIDIM),
44 table__(table), tableSet__(&clique_tables), clique__(clique), args__(0) {
46 GUM_CONSTRUCTOR(ScheduleCliqueStoreMultiDim);
50 template <
typename GUM_SCALAR >
51 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::ScheduleCliqueStoreMultiDim(
52 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& from) :
53 ScheduleOperation< GUM_SCALAR >(from),
54 table__(from.table__), tableSet__(from.tableSet__), clique__(from.clique__),
57 GUM_CONS_CPY(ScheduleCliqueStoreMultiDim);
61 template <
typename GUM_SCALAR >
62 ScheduleCliqueStoreMultiDim< GUM_SCALAR >*
63 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::newFactory()
const {
64 return new ScheduleCliqueStoreMultiDim< GUM_SCALAR >(*
this);
68 template <
typename GUM_SCALAR >
69 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::~ScheduleCliqueStoreMultiDim() {
71 GUM_DESTRUCTOR(ScheduleCliqueStoreMultiDim);
73 if (args__)
delete args__;
77 template <
typename GUM_SCALAR >
78 ScheduleCliqueStoreMultiDim< GUM_SCALAR >&
79 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::operator=(
80 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& from) {
83 ScheduleOperation< GUM_SCALAR >::operator=(from);
84 table__ = from.table__;
85 tableSet__ = from.tableSet__;
86 clique__ = from.clique__;
90 args__->insert(&table__);
98 template <
typename GUM_SCALAR >
99 bool ScheduleCliqueStoreMultiDim< GUM_SCALAR >::operator==(
100 const ScheduleOperation< GUM_SCALAR >& op)
const {
101 if (
this->type() != op.type())
return false;
103 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& real_op
104 =
static_cast<
const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& >(op);
105 return ((table__ == real_op.table__) && (tableSet__ == real_op.tableSet__)
106 && (clique__ == real_op.clique__));
110 template <
typename GUM_SCALAR >
111 bool ScheduleCliqueStoreMultiDim< GUM_SCALAR >::operator!=(
112 const ScheduleOperation< GUM_SCALAR >& op)
const {
113 if (
this->type() != op.type())
return true;
115 const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& real_op
116 =
static_cast<
const ScheduleCliqueStoreMultiDim< GUM_SCALAR >& >(op);
117 return ((table__ != real_op.table__) || (tableSet__ != real_op.tableSet__)
118 || (clique__ != real_op.clique__));
122 template <
typename GUM_SCALAR >
123 void ScheduleCliqueStoreMultiDim< GUM_SCALAR >::execute() {
124 const MultiDimImplementation< GUM_SCALAR >& multidim = table__.multiDim();
126 if (!tableSet__->exists(clique__)) {
127 tableSet__->insert(clique__,
128 Set<
const MultiDimImplementation< GUM_SCALAR >* >());
131 tableSet__->operator[](clique__).insert(&multidim);
136 template <
typename GUM_SCALAR >
137 INLINE
float ScheduleCliqueStoreMultiDim< GUM_SCALAR >::nbOperations()
const {
142 template <
typename GUM_SCALAR >
143 INLINE std::pair<
long,
long >
144 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::memoryUsage()
const {
145 return std::pair<
long,
long >(0, 0);
149 template <
typename GUM_SCALAR >
150 INLINE
const Sequence<
const ScheduleMultiDim< GUM_SCALAR >* >&
151 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::multiDimArgs()
const {
153 args__ =
new Sequence<
const ScheduleMultiDim< GUM_SCALAR >* >;
154 args__->insert(&table__);
161 template <
typename GUM_SCALAR >
162 INLINE
const Sequence<
const ScheduleMultiDim< GUM_SCALAR >* >&
163 ScheduleCliqueStoreMultiDim< GUM_SCALAR >::multiDimResults()
const {
164 static Sequence<
const ScheduleMultiDim< GUM_SCALAR >* > empty_seq;
165 # ifdef GUM_DEBUG_MODE 169 static bool first_time =
true;
173 __debug__::inc_deletion__(
"Sequence",
178 __debug__::inc_deletion__(
"SequenceImplementation",
190 template <
typename GUM_SCALAR >
191 std::string ScheduleCliqueStoreMultiDim< GUM_SCALAR >::toString()
const {
193 s <<
"store ( " << table__.toString() <<
", clique " << clique__ <<
" )";