Data is stored chunk-wise in this DataInterface implementation. If a chunk runs out of space, a new chunk is allocated. More...
#include <chunkedData.hpp>
Public Types | |
using | Chunk = T_Chunk |
See ChunkedData. | |
using | InternalPosHandle = size_t |
Position in the chunk. | |
using | NestedData = T_NestedData |
See ChunkedData. | |
using | NestedPosition = typename NestedData::Position |
Position of NestedData. | |
template<int selectedDepth> | |
using | NestingDepthPointerInserter |
For selectedDepth == 0 create a pointer inserter that calls the function object. | |
using | PointerInserter = T_PointerInserter |
See ChunkedData. | |
using | Position = ChunkPosition<NestedPosition> |
Contains position data for this DataInterface and all nested interfaces. | |
Public Types inherited from codi::DataInterface< T_NestedData, T_InternalPosHandle > | |
using | InternalPosHandle = T_InternalPosHandle |
See DataInterface. | |
using | NestedData = T_NestedData |
See DataInterface. | |
using | Position = EmptyPosition |
Contains position data for this DataInterface and all nested interfaces. | |
Public Member Functions | |
ChunkedData (size_t const &chunkSize) | |
Allocate chunkSize entries. Requires a call to setNested. | |
ChunkedData (size_t const &chunkSize, NestedData *nested) | |
Allocate chunkSize entries and set the nested DataInterface. | |
~ChunkedData () | |
Destructor. | |
Adding items | |
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. | |
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. | |
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. | |
Size management | |
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) |
Position functions | |
size_t | getDataSize () const |
Position | getPosition () const |
size_t | getPushedDataCount (InternalPosHandle const &startPos) |
Position | getZeroPosition () const |
Misc functions | |
void | addToTapeValues (TapeValues &values) const |
Add amount of stored data to the TapeValues object. Not called on the nested vector. | |
template<typename TargetPosition , typename = typename enable_if_not_same<TargetPosition, Position>::type> | |
TargetPosition | extractPosition (Position const &pos) const |
Extract the position of a nested DataInterface from the global position object provide by this interface. | |
template<typename TargetPosition , typename = typename enable_if_same<TargetPosition, Position>::type> | |
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 (ChunkedData< Chunk, NestedData > &other) |
Iterator functions | |
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. | |
Public Member Functions inherited from codi::DataInterface< T_NestedData, T_InternalPosHandle > | |
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. | |
Data is stored chunk-wise in this DataInterface implementation. If a chunk runs out of space, a new chunk is allocated.
See DataInterface documentation for details.
Each chunk has the size provided in the constructor.
T_Chunk | Has to implement ChunkBase. The chunk defines the data stored in this implementation. |
T_NestedData | Nested DataInterface. |
T_PointerInserter | Defines how data is appended to evaluate* function calls. |
using codi::ChunkedData< T_Chunk, T_NestedData, T_PointerInserter >::NestingDepthPointerInserter |
For selectedDepth == 0 create a pointer inserter that calls the function object.
using codi::ChunkedData< T_Chunk, T_NestedData, T_PointerInserter >::Position = ChunkPosition<NestedPosition> |
Contains position data for this DataInterface and all nested interfaces.
|
inline |
Add this many items to the data stream, after the data has been manipulated via pointers obtained from getDataPointers().
See getDataPointers for details.
[in] | size | Number of data items that have been written. |
|
inline |
Add amount of stored data to the TapeValues object. Not called on the nested vector.
[in,out] | values | Will only create new data entries and no new section. Implementation: Adds: Total number, Number of chunks, Memory used, Memory allocated |
|
inline |
Erase the given range of data. Implementations may choose to free allocated memory. The parameter recursive controls whether erase is also called on nested interfaces. Implementation: If the given range start..end does not only overlap with parts of chunks but contains complete chunks, those completely contained chunks are deleted in the course of the erase.
|
inline |
Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces.
func is called for each region of continuous data that is valid for all nested DataInterfaces. func is then called as
What kind of data is appended by each DataInterface is implementation dependent. The default is the set (start, end, dataEntry1, dataEntry2, etc.) which is appended.
It has to hold start <= end.
Positions count up in this call.
[in] | start | Starting position. |
[in] | end | Ending position. |
[in] | function | Function object called. |
[in,out] | args | Additional arguments for the function object. |
selectedDepth | Selected depth for the recursion into nested data interfaces. 0 means that only the data from this interface is used. A value of 1 means that the data from the first nested interface is used, etc.. A value of -1 can be used to select the innermost interface, regardless of the number of nested interfaces. |
FunctionObject | Function object which is called. |
Args | Arguments for the function object. |
|
inline |
Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces.
Same as evaluateForward. It has to hold start >= end. Positions count down in this call.
[in] | start | Starting position. |
[in] | end | Ending position. |
[in] | function | Function object called. |
[in,out] | args | Additional arguments for the function object. |
selectedDepth | Selected depth for the recursion into nested data interfaces. 0 means that only the data from this interface is used. A value of 1 means that the data from the first nested interface is used, etc.. A value of -1 can be used to select the innermost interface, regardless of the number of nested interfaces. |
FunctionObject | Function object which is called. |
Args | Arguments for the function object. |
|
inline |
Extract the position of a nested DataInterface from the global position object provide by this interface.
[in] | pos | Position of the DataInterface. |
TargetPosition | Position definition of a nested DataInterface. |
|
inline |
Extract the position of a nested DataInterface from the global position object provide by this interface.
[in] | pos | Position of the DataInterface. |
TargetPosition | Position definition of a nested DataInterface. |
|
inline |
Calls the function object for each continuous segment of data.
The call is
Chunk is of the type ChunkBase.
[in] | function | Function object called. |
[in] | recursive | True if same call should be performed for all nested DataInterfaces. |
[in,out] | args | Additional arguments for the function object. |
FunctionObject | Function object which is called. |
Args | Arguments for the function object. |
|
inline |
Calls the function object for each item in the data stream. This call is not recursive.
The call to function is
It has to hold start <= end.
[in] | start | Starting position. |
[in] | end | Ending position |
[in] | function | Function object called. |
[in,out] | args | Additional arguments for the function object. |
FunctionObject | Function object which is called. |
Args | Arguments for the function object. |
|
inline |
Calls the function object for each item in the data stream. This call is not recursive.
See forEachForward.
It has to hold start >= end.
[in] | start | Starting position. |
[in] | end | Ending position |
[in] | function | Function object called. |
[in,out] | args | Additional arguments for the function object. |
FunctionObject | Function object which is called. |
Args | Arguments for the function object. |
|
inline |
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.
The call to reserveItems only represents the maximum number of data items that can be accessed safely. It is fine if less data items are accessed.
After all elements have been written to the arrays, addDataSize needs to be called with the final written number of entries.
Example usage:
[in] | pointers | The pointers that are populated with the data from the internal representation. |
Data | Types of the pointers. |
|
inline |
|
inline |
|
inline |
Compute the number of data items stored after a call to reserveItems.
|
inline |
|
inline |
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.
pushData() can be called less often than indicated with reserveItems(). The call to reserveItems only represents the maximum number of data items that can be pushed safely.
After a new call to reserveItems(), only this many number of data items can be pushed, leftovers will not accumulate.
For an example of how to use pushData, please see the DataInterface documentation.
[in] | data | The number of arguments has to match the number of data stores of the implementation. |
Data | Types of the pushed data. |
|
inline |
Reserve this many items on the data stream. See pushData for details.
[in] | items | Number of data items to reserve. |
|
inline |
Reset to the zero position. Data is not deallocated. Also called on nested interfaces.
|
inline |
Reset to the zero position. Data is deallocated and the default size is allocated again. Also called on nested interfaces.
|
inline |
Reset to the given position. Data is not deallocated. Also called on the nested interfaces.
|
inline |
Allocate the requested number of data items.
|
inline |
Set the pointer to the nested vector. Needs to be done before any other action and only once.
|
inline |
Swap with other DataInterface of the same type.