48#ifndef DOXYGEN_SHOULD_SKIP_THIS
55 template <
typename TABLE >
61 "A table with Id " <<
id <<
" already exists in the schedule");
65 ScheduleMultiDim< TABLE >* new_multidim =
new ScheduleMultiDim< TABLE >(table, copy,
id);
79 template <
typename TABLE1,
typename TABLE2,
typename TABLE_RES >
83 TABLE_RES (*combine)(
const TABLE1&,
const TABLE2&),
84 const bool is_result_persistent) {
88 ScheduleBinaryCombination< TABLE1, TABLE2, TABLE_RES >(table1, table2, combine,
false),
89 is_result_persistent);
93 template <
typename TABLE >
96 TABLE (*project)(
const TABLE&,
98 const bool is_result_persistent) {
101 return insertOperation(ScheduleProjection< TABLE >(table, del_vars, project,
false),
102 is_result_persistent);
106 template <
typename TABLE >
114 template <
typename TABLE,
template <
typename... >
class CONTAINER >
116 CONTAINER< TABLE >& container) {
119 return insertOperation(ScheduleStorage< TABLE, CONTAINER >(table, container),
false);
The Table-agnostic base class of scheduleMultiDim.
the base class for "low-level" operators used to schedule inferences
const ScheduleOperator & emplaceBinaryCombination(const ScheduleMultiDim< TABLE1 > &table1, const ScheduleMultiDim< TABLE2 > &table2, TABLE_RES(*combine)(const TABLE1 &, const TABLE2 &), const bool is_result_persistent=false)
emplace a new schedule binary combination operation
Bijection< const IScheduleMultiDim *, Idx > _multidim2id_
a bijection between pointers to IScheduleMultiDim and their Ids
const IScheduleMultiDim * insertTable(const TABLE &table, const bool copy, const Idx id=0)
inserts a new table as a source operation's input, i.e., this table is not computed by any ScheduleOp...
Idx _version_number_
a number that identifies the current version of the schedule
HashTable< const IScheduleMultiDim *, NodeSet > _multidim2nodes_
maps the multidims to the set of operations that use them
const ScheduleOperator & emplaceStorage(const IScheduleMultiDim &table, CONTAINER< TABLE > &container)
emplace a new schedule storage operation
const ScheduleOperator & emplaceDeletion(const ScheduleMultiDim< TABLE > &table)
emplace a new schedule deletion operation
const ScheduleOperator & insertOperation(const ScheduleOperator &op, const bool are_results_persistent=false)
inserts an operation into the schedule
HashTable< const IScheduleMultiDim *, std::pair< ScheduleOperator *, Idx > > _multidim_location_
a structure to indicate precisely where a ScheduleMultiDim comes from
const ScheduleOperator & emplaceProjection(const ScheduleMultiDim< TABLE > &table, const gum::VariableSet &del_vars, TABLE(*project)(const TABLE &, const gum::VariableSet &), const bool is_result_persistent=false)
emplace a new schedule projection operation
#define GUM_ERROR(type, msg)
Size Idx
Type for indexes.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
gum is the global namespace for all aGrUM entities
Set< const DiscreteVariable * > VariableSet