30 #ifndef GUM_MULTIDIM_BUCKET_H 31 #define GUM_MULTIDIM_BUCKET_H 36 #include <agrum/tools/core/bijection.h> 37 #include <agrum/tools/core/hashTable.h> 38 #include <agrum/tools/core/sequence.h> 39 #include <agrum/tools/core/set.h> 41 #include <agrum/tools/multidim/implementations/multiDimArray.h> 42 #include <agrum/tools/multidim/implementations/multiDimReadOnly.h> 73 template <
typename GUM_SCALAR >
74 class MultiDimBucket:
public MultiDimReadOnly< GUM_SCALAR > {
89 explicit MultiDimBucket(Size bufferSize = INT_MAX);
95 MultiDimBucket(
const MultiDimBucket< GUM_SCALAR >& source);
100 virtual ~MultiDimBucket();
113 void add(
const MultiDimContainer< GUM_SCALAR >& impl);
120 void add(
const MultiDimContainer< GUM_SCALAR >* impl);
126 void erase(
const MultiDimContainer< GUM_SCALAR >& impl);
132 void erase(
const MultiDimContainer< GUM_SCALAR >* impl);
139 bool contains(
const MultiDimContainer< GUM_SCALAR >& impl)
const;
147 const Set<
const DiscreteVariable* >& allVariables()
const;
153 Size bucketSize()
const;
159 bool isBucketEmpty()
const;
167 bool bucketChanged()
const;
174 const MultiDimArray< GUM_SCALAR >& bucket()
const;
180 Size bufferSize()
const;
191 void setBufferSize(Size amount);
212 void compute(
bool force =
false)
const;
220 virtual MultiDimContainer< GUM_SCALAR >* newFactory()
const override;
222 const std::string& name()
const override;
224 virtual void add(
const DiscreteVariable& v) override;
226 virtual void erase(
const DiscreteVariable& v) override;
228 virtual Size realSize()
const override;
230 bool contains(
const DiscreteVariable& v)
const override;
232 virtual GUM_SCALAR get(
const Instantiation& i)
const override;
234 virtual void changeNotification(
const Instantiation& i,
235 const DiscreteVariable*
const var,
237 Idx newval) override;
239 virtual void setFirstNotification(
const Instantiation& i) override;
241 virtual void setLastNotification(
const Instantiation& i) override;
243 virtual void setIncNotification(
const Instantiation& i) override;
245 virtual void setDecNotification(
const Instantiation& i) override;
247 virtual void setChangeNotification(
const Instantiation& i) override;
249 virtual bool registerSlave(Instantiation& i) override;
251 virtual bool unregisterSlave(Instantiation& i) override;
253 virtual MultiDimAdressable& getMasterRef() override;
255 virtual const MultiDimAdressable& getMasterRef()
const override;
257 virtual std::string toString(
const Instantiation* i)
const override;
265 const HashTable<
const MultiDimContainer< GUM_SCALAR >*, Instantiation* >& multidims()
const;
268 virtual void commitMultipleChanges_() override;
274 virtual GUM_SCALAR& get_(
const Instantiation& i)
const override;
276 virtual void replace_(
const DiscreteVariable* x,
const DiscreteVariable* y) override;
284 Bijection< Instantiation*, Instantiation* > _instantiations_;
287 MultiDimArray< GUM_SCALAR >* _bucket_;
290 mutable HashTable<
const MultiDimContainer< GUM_SCALAR >*, Instantiation* > _multiDims_;
293 Set<
const DiscreteVariable* > _allVariables_;
296 mutable Instantiation _allVarsInst_;
304 void _addVariable_(
const DiscreteVariable* var);
312 void _eraseVariable_(
const DiscreteVariable* var);
319 void _initializeBuffer_();
324 void _eraseBuffer_();
335 GUM_SCALAR _computeValue_(
const Instantiation& value)
const;
339 mutable bool _changed_;
343 mutable HashTable<
const Instantiation*, GUM_SCALAR > _slavesValue_;
350 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 351 extern template class MultiDimBucket<
double >;
357 #include <agrum/tools/multidim/implementations/multiDimBucket_tpl.h>