Identifiers are reused. Freed identifiers are assigned to new variables. Variables keep their indices as long as they are active.
More...
|
| ReuseIndexManagerBase () |
|
| ~ReuseIndexManagerBase () |
| Destructor.
|
|
|
template<typename Tape > |
bool | assignIndex (Index &index) |
| Call on assignment of a primal value, e.g. on w for w = a + b .
|
|
template<typename Tape > |
bool | assignUnusedIndex (Index &index) |
| Call on registering input values.
|
|
template<typename Tape > |
void | copyIndex (Index &lhs, Index const &rhs) |
| Call on copy of a primal value, e.g. w = a .
|
|
template<typename Tape > |
void | freeIndex (Index &index) |
| Call on destruction of a primal value. Usually called from the destructor.
|
|
void | reset () |
| Reset for a new recording.
|
|
void | addToTapeValues (TapeValues &values) const |
| Add storage and other information to the tape values.
|
|
void | addToTapeValues (TapeValues &values) const |
| Add storage and other information to the tape values.
|
|
Index | getLargestCreatedIndex () const |
| Returns the largest created index.
|
|
template<typename Tape > |
bool | assignIndex (Index &index) |
| Call on assignment of a primal value, e.g. on w for w = a + b .
|
|
template<typename Tape > |
bool | assignUnusedIndex (Index &index) |
| Call on registering input values.
|
|
template<typename Tape > |
void | copyIndex (Index &lhs, Index const &rhs) |
| Call on copy of a primal value, e.g. w = a .
|
|
template<typename Tape > |
void | freeIndex (Index &index) |
| Call on destruction of a primal value. Usually called from the destructor.
|
|
void | reset () |
| Reset for a new recording.
|
|
void | pushData () |
| Add data to the storage allocated by the implementation. The method can only be called after a call to reserveItems and only as often as the number of reserved items.
|
|
void | getDataPointers () |
| Get pointers to the data from the storage implementation. The method can only be called after a call to reserveItems() and data can only be accessed from 0 to the number given by reserveItems (excluding). Afterwards, addDataSize() needs to be called with the actual number of elements that have been written.
|
|
void | addDataSize (size_t size) |
| Add this many items to the data stream, after the data has been manipulated via pointers obtained from getDataPointers().
|
|
InternalPosHandle | reserveItems (size_t const &items) |
| Reserve this many items on the data stream. See pushData for details.
|
|
void | resize (size_t const &totalSize) |
|
void | reset () |
|
void | resetHard () |
|
void | resetTo (Position const &pos) |
|
void | erase (Position const &start, Position const &end, bool recursive=true) |
|
size_t | getDataSize () const |
|
Position | getPosition () const |
|
size_t | getPushedDataCount (InternalPosHandle const &startPos) |
|
Position | getZeroPosition () const |
|
void | addToTapeValues (TapeValues &values) const |
| Add amount of stored data to the TapeValues object. Not called on the nested vector.
|
|
template<typename = void> |
Position | extractPosition (Position const &pos) const |
| Extract the position of a nested DataInterface from the global position object provide by this interface.
|
|
void | setNested (NestedData *v) |
|
|
|
void | swap (DataInterface &other) |
|
template<int selectedDepth = -1, typename FunctionObject , typename... Args> |
void | evaluateForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces.
|
|
template<int selectedDepth = -1, typename FunctionObject , typename... Args> |
void | evaluateReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces.
|
|
template<typename FunctionObject , typename... Args> |
void | forEachChunk (FunctionObject &function, bool recursive, Args &&... args) |
| Calls the function object for each continuous segment of data.
|
|
template<typename FunctionObject , typename... Args> |
void | forEachForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Calls the function object for each item in the data stream. This call is not recursive.
|
|
template<typename FunctionObject , typename... Args> |
void | forEachReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Calls the function object for each item in the data stream. This call is not recursive.
|
|
void | addDataSize (size_t const &size) |
| Add this many items to the data stream, after the data has been manipulated via pointers obtained from getDataPointers().
|
|
template<typename... Data> |
void | getDataPointers (Data *&... pointers) |
| Get pointers to the data from the storage implementation. The method can only be called after a call to reserveItems() and data can only be accessed from 0 to the number given by reserveItems (excluding). Afterwards, addDataSize() needs to be called with the actual number of elements that have been written.
|
|
template<typename... Data> |
void | pushData (Data const &... data) |
| Add data to the storage allocated by the implementation. The method can only be called after a call to reserveItems and only as often as the number of reserved items.
|
|
InternalPosHandle | reserveItems (size_t const &items) |
| Reserve this many items on the data stream. See pushData for details.
|
|
void | resize (size_t const &totalSize) |
|
void | reset () |
|
void | resetHard () |
|
void | resetTo (Position const &pos) |
|
void | erase (Position const &start, Position const &end, bool recursive=true) |
|
size_t | getDataSize () const |
|
Position | getPosition () const |
|
size_t | getPushedDataCount (InternalPosHandle const &startPos) |
|
Position | getZeroPosition () const |
|
void | addToTapeValues (TapeValues &values) const |
| Add amount of stored data to the TapeValues object. Not called on the nested vector.
|
|
template<typename TargetPosition > |
TargetPosition | extractPosition (Position const &pos) const |
| Extract the position of a nested DataInterface from the global position object provide by this interface.
|
|
void | setNested (NestedData *v) |
|
void | swap (DataInterface &other) |
|
template<int selectedDepth = -1, typename FunctionObject , typename... Args> |
void | evaluateForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces.
|
|
template<int selectedDepth = -1, typename FunctionObject , typename... Args> |
void | evaluateReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces.
|
|
template<typename FunctionObject , typename... Args> |
void | forEachChunk (FunctionObject &function, bool recursive, Args &&... args) |
| Calls the function object for each continuous segment of data.
|
|
template<typename FunctionObject , typename... Args> |
void | forEachForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Calls the function object for each item in the data stream. This call is not recursive.
|
|
template<typename FunctionObject , typename... Args> |
void | forEachReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
| Calls the function object for each item in the data stream. This call is not recursive.
|
|
template<typename T_Index, typename T_Impl>
struct codi::ReuseIndexManagerBase< T_Index, T_Impl >
Identifiers are reused. Freed identifiers are assigned to new variables. Variables keep their indices as long as they are active.
This index manager does not implement a copy optimization. Therefore, every copy operation needs a statement, but variables will keep their identifier as long as they are active.
Mathematical and implementational details are explained in SBG2021Index.
For generalization reasons, it also extends from the EmptyData DataInterface.
This class contains the basic logic for index reuse. The implementing class has to add a mechanism to generate new indices.
- Template Parameters
-
T_Index | Type for the identifier, usually an integer type. |
T_Impl | Implementing class. |