openDAQ
Open data acquisition platform
IBlockReader Struct Referenceabstract

A signal data reader that abstracts away reading of signal packets by keeping an internal read-position and automatically advances it on subsequent reads. The difference to a StreamReader is that instead of reading on per sample basis it always returns only a full block of samples. This means that even if more samples are available they will not be read until there is enough of them to fill at least one block. More...

+ Inheritance diagram for IBlockReader:
+ Collaboration diagram for IBlockReader:

Detailed Description

A signal data reader that abstracts away reading of signal packets by keeping an internal read-position and automatically advances it on subsequent reads. The difference to a StreamReader is that instead of reading on per sample basis it always returns only a full block of samples. This means that even if more samples are available they will not be read until there is enough of them to fill at least one block.

Remarks
Currently only supports single-dimensional scalar sample-types and RangeInt64

Public Member Functions

virtual ErrCode INTERFACE_FUNC read (void *blocks, SizeT *count, SizeT timeoutMs=0, IBlockReaderStatus **status=nullptr)=0
 Copies at maximum the next count blocks of unread samples to the values buffer. The amount actually read is returned through the count parameter. More...
 
virtual ErrCode INTERFACE_FUNC readWithDomain (void *dataBlocks, void *domainBlocks, SizeT *count, SizeT timeoutMs=0, IBlockReaderStatus **status=nullptr)=0
 Copies at maximum the next count blocks of unread samples and clock-stamps to the dataBlocks and domainBlocks buffers. The amount actually read is returned through the count parameter. More...
 
virtual ErrCode INTERFACE_FUNC getBlockSize (SizeT *size)=0
 The amount of samples the reader considers as one block. More...
 
virtual ErrCode INTERFACE_FUNC getOverlap (SizeT *overlap)=0
 The amount of block overlapping. More...
 
- Public Member Functions inherited from ISampleReader
virtual ErrCode INTERFACE_FUNC getValueReadType (SampleType *sampleType)=0
 Gets the sample-type the signal value samples will be converted to when read or SampleType::Invalid if read-type has not been determined yet. More...
 
virtual ErrCode INTERFACE_FUNC getDomainReadType (SampleType *sampleType)=0
 Gets the sample-type the signal domain samples will be converted to when read or SampleType::Invalid if read-type has not been determined yet. More...
 
virtual ErrCode INTERFACE_FUNC setValueTransformFunction (IFunction *transform)=0
 Sets the transform function that will be called with the read value-data and currently valid Signal-Descriptor giving the user the chance add a custom post-processing step. The function should have a signature compatible with: More...
 
virtual ErrCode INTERFACE_FUNC setDomainTransformFunction (IFunction *transform)=0
 Sets the transform function that will be called with the read domain-data and currently valid Signal-Descriptor giving the user the chance add a custom post-processing step. The function should have a signature compatible with: More...
 
virtual ErrCode INTERFACE_FUNC getReadMode (ReadMode *mode)=0
 Gets the reader's read mode which determines if the reader will also scale the read data or not. More...
 
- Public Member Functions inherited from IReader
virtual ErrCode INTERFACE_FUNC getAvailableCount (SizeT *count)=0
 Gets the number of segments available to read. More...
 
virtual ErrCode INTERFACE_FUNC setOnDataAvailable (IProcedure *callback)=0
 Sets the specified callback function to be called when there is available data in the reader. Pass nullptr to unset the callback. The callback should take no arguments. More...
 
virtual ErrCode INTERFACE_FUNC getEmpty (Bool *empty)=0
 Checks if there is data to read. More...
 
- Public Member Functions inherited from IBaseObject
virtual ErrCode INTERFACE_FUNC borrowInterface (const IntfID &intfID, void **obj) const =0
 Returns another interface which is supported by the object without incrementing the reference count. More...
 
virtual ErrCode INTERFACE_FUNC dispose ()=0
 Disposes all references held by the object. More...
 
virtual ErrCode INTERFACE_FUNC getHashCode (SizeT *hashCode)=0
 Returns hash code of the object. More...
 
virtual ErrCode INTERFACE_FUNC equals (IBaseObject *other, Bool *equal) const =0
 Compares object to another object for equality. More...
 
virtual ErrCode INTERFACE_FUNC toString (CharPtr *str)=0
 Returns a string representation of the object. More...
 
- Public Member Functions inherited from IUnknown
virtual ErrCode INTERFACE_FUNC queryInterface (const IntfID &intfID, void **obj)=0
 Returns another interface which is supported by the object and increments the reference count. More...
 
virtual int INTERFACE_FUNC addRef ()=0
 Increments the reference count for an interface on an object. More...
 
virtual int INTERFACE_FUNC releaseRef ()=0
 Decrements the reference count for an interface on an object. More...
 

Member Function Documentation

◆ getBlockSize()

virtual ErrCode INTERFACE_FUNC getBlockSize ( SizeT *  size)
pure virtual

The amount of samples the reader considers as one block.

Parameters
[out]sizeThe number of samples in a block.

◆ getOverlap()

virtual ErrCode INTERFACE_FUNC getOverlap ( SizeT *  overlap)
pure virtual

The amount of block overlapping.

Parameters
[out]overlapThe overlap size in percents.

◆ read()

virtual ErrCode INTERFACE_FUNC read ( void *  blocks,
SizeT *  count,
SizeT  timeoutMs = 0,
IBlockReaderStatus **  status = nullptr 
)
pure virtual

Copies at maximum the next count blocks of unread samples to the values buffer. The amount actually read is returned through the count parameter.

Parameters
[in]blocksThe buffer that the samples will be copied to. The buffer must be a contiguous memory big enough to receive count * blockSize amount of samples.
[in,out]countThe maximum amount of blocks to be read. If the count is less than available the parameter value is set to the actual amount and only the available blocks are returned. The rest of the buffer is not modified or cleared.
timeoutMsThe maximum amount of time in milliseconds to wait for the requested amount of blocks before returning.
[out]statusRepresents the status of the reader.
  • If the reader is invalid, IReaderStatus::getValid returns false.
  • If an event packet was encountered during processing, IReaderStatus::isEventEncountered returns true.
  • If the reading process is successful, ReaderStatus::isOk returns true, indicating that IReaderStatus::getValid is true and IReaderStatus::isEventEncountered is false.

◆ readWithDomain()

virtual ErrCode INTERFACE_FUNC readWithDomain ( void *  dataBlocks,
void *  domainBlocks,
SizeT *  count,
SizeT  timeoutMs = 0,
IBlockReaderStatus **  status = nullptr 
)
pure virtual

Copies at maximum the next count blocks of unread samples and clock-stamps to the dataBlocks and domainBlocks buffers. The amount actually read is returned through the count parameter.

Parameters
[in]dataBlocksThe buffer that the samples will be copied to. The buffer must be a contiguous memory big enough to receive count * blockSize amount of samples.
[in]domainBlocksThe buffer that the domain values will be copied to. The buffer must be a contiguous memory big enough to receive count * blockSize amount of clock-stamps.
[in,out]countThe maximum amount of blocks to be read. If the count is less than available the parameter value is set to the actual amount and only the available blocks are returned. The rest of the buffer is not modified or cleared.
timeoutMsThe maximum amount of time in milliseconds to wait for the requested amount of blocks before returning.
[out]statusRepresents the status of the reader.
  • If the reader is invalid, IReaderStatus::getValid returns false.
  • If an event packet was encountered during processing, IReaderStatus::isEventEncountered returns true.
  • If the reading process is successful, ReaderStatus::isOk returns true, indicating that IReaderStatus::getValid is true and IReaderStatus::isEventEncountered is false.