DynExp
Highly flexible laboratory automation for dynamically changing experiments.
|
Implements a circular data stream based on Util::circularbuf. More...
Public Types | |
using | SampleType = SampleT |
Alias for SampleT . More... | |
Public Types inherited from DynExpInstr::DataStreamBase | |
using | BasicSampleListType = std::vector< BasicSample > |
Type of a list containing data stream samples of type BasicSample . More... | |
Public Member Functions | |
CircularDataStream (size_t BufferSizeInSamples) | |
Constructs a CircularDataStream instance. More... | |
virtual | ~CircularDataStream ()=default |
constexpr auto | GetBytesPerSample () noexcept |
Determines the size of a single sample in bytes. More... | |
size_t | GetNumAvailableSamplesToReadTillEnd () const noexcept override |
Determines the amount of samples which can be read from the stream's current get pointer position till the stream's end. More... | |
size_t | GetNumFreeSamplesToWrite () const noexcept override |
Determines the amount of samples which can be written to the stream untill the stream's end is reached. More... | |
std::streampos | GetReadPosition () const noexcept override |
Determines the current position of the stream's read (get) pointer in samples. More... | |
std::streampos | GetWritePosition () const noexcept override |
Determines the current position of the stream's write (put) pointer in samples. More... | |
virtual bool | SeekRel (signed long long OffsetInSamples, std::ios_base::seekdir SeekDir, std::ios_base::openmode Which=std::ios_base::in|std::ios_base::out) override |
Moves the stream's read/write pointer(s) to a position relative to SeekDir . More... | |
virtual bool | SeekAbs (unsigned long long PositionInSamples, std::ios_base::openmode Which=std::ios_base::in|std::ios_base::out) override |
Moves the stream's read/write pointer(s) to an absolute position. More... | |
virtual void | SeekBeg (std::ios_base::openmode Which=std::ios_base::in|std::ios_base::out) override |
Moves the read/write pointer to the first sample in the stream. More... | |
virtual void | SeekEnd (std::ios_base::openmode Which=std::ios_base::in|std::ios_base::out) override |
Moves the read pointer to the last sample in the stream and/or moves the write pointer after the last written sample in the stream. More... | |
virtual bool | SeekEqual (std::ios_base::openmode Which=std::ios_base::in|std::ios_base::out) override |
Moves the read/write pointer to the respective other one. More... | |
virtual size_t | GetStreamSizeRead () const noexcept override |
Determines the stream's read buffer size in samples. More... | |
virtual size_t | GetStreamSizeWrite () const noexcept override |
Determines the stream's write buffer size in samples. More... | |
virtual size_t | GetNumSamplesWritten () const noexcept override |
Determines the number of samples which have been written to the stream in total. Before overflowing, this function should keep continuing to return the largest possible value. More... | |
virtual void | SetStreamSize (size_t BufferSizeInSamples) override |
Sets the stream size in samples. More... | |
Public Member Functions inherited from DynExpInstr::CircularDataStreamBase | |
size_t | GetNumRecentBasicSamples (size_t Count) const |
Determines the amount of samples which have been written to the stream after the last Count samples. This is useful if the caller just wants to obtain recent samples but not the entire stream. Then, the caller should remember the amount of samples it knows already and call ReadRecentBasicSamples() next. More... | |
BasicSampleListType | ReadRecentBasicSamples (size_t Count) |
Reads the most recent samples from the stream skipping Count samples. Also refer to GetNumRecentBasicSamples() . More... | |
Public Member Functions inherited from DynExpInstr::DataStreamBase | |
virtual | ~DataStreamBase ()=default |
bool | CanRead () const |
Determines whether the stream contains at least one sample which can be read (i.e. GetStreamSizeRead() returns a value greater than 0). More... | |
void | Clear () |
Removes all samples from the stream's buffer. More... | |
void | WriteBasicSample (const BasicSample &Sample) |
Writes a single basic sample to the stream. More... | |
BasicSample | ReadBasicSample () |
Reads a single basic sample from the stream. More... | |
void | WriteBasicSamples (const BasicSampleListType &Samples) |
Writes a list of basic sample to the stream. More... | |
BasicSampleListType | ReadBasicSamples (size_t Count) |
Reads a list of basic sample from the stream. More... | |
virtual bool | IsBasicSampleConvertible () const noexcept |
Determines whether the data stream holds samples which are compatible to BasicSample . More... | |
virtual bool | IsBasicSampleTimeUsed () const noexcept |
Determines whether the data stream holds basic samples (IsBasicSampleConvertible() returns true) which contain information in their BasicSample::Time fields. More... | |
Private Member Functions | |
Override | |
Override by derived classes. | |
virtual void | ValidateSample (const SampleT &Sample) const |
Checks whether a sample is considered valid. Derived classes can define rules to check the sample for validity. Does nothing if the sample is valid. More... | |
Private Attributes | |
Util::circularbuf | StreamBuffer |
Circular stream buffer. More... | |
std::iostream | Stream |
Stream to operate on StreamBuffer. More... | |
size_t | NumSamplesWritten |
Amount of samples which have been written to Stream in total. More... | |
(De)serialization | |
void | WriteSample (const SampleT &Sample) |
Writes a single sample to the stream's buffer StreamBuffer. More... | |
template<typename Rep , typename Period > | |
void | WriteSample (const std::chrono::duration< Rep, Period > &Sample) |
Writes a single sample to the stream's buffer StreamBuffer by implicitly constructing the sample from a std::chrono::duration instance. More... | |
SampleT | ReadSample () |
Reads a single sample from the stream's buffer StreamBuffer. More... | |
template<typename T > | |
void | WriteSamples (const std::vector< T > &Samples) |
Writes multiple samples to the stream's buffer StreamBuffer. More... | |
std::vector< SampleT > | ReadSamples (size_t Count) |
Reads multiple samples from the stream's buffer StreamBuffer. More... | |
virtual void | ClearChild () override |
Removes all samples from the stream's buffer. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from DynExpInstr::CircularDataStreamBase | |
CircularDataStreamBase ()=default | |
virtual | ~CircularDataStreamBase ()=default |
Implements a circular data stream based on Util::circularbuf.
SampleT | Type of the samples stored in the data stream |
Definition at line 358 of file DataStreamInstrument.h.
using DynExpInstr::CircularDataStream< SampleT, >::SampleType = SampleT |
Alias for SampleT
.
Definition at line 361 of file DataStreamInstrument.h.
|
inline |
Constructs a CircularDataStream
instance.
BufferSizeInSamples | Initial stream buffer size in samples |
Definition at line 367 of file DataStreamInstrument.h.
|
virtualdefault |
|
inlineoverrideprotectedvirtual |
Removes all samples from the stream's buffer.
Implements DynExpInstr::DataStreamBase.
Definition at line 511 of file DataStreamInstrument.h.
|
inlineconstexprnoexcept |
Determines the size of a single sample in bytes.
sizeof(SampleT)
. Definition at line 379 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the amount of samples which can be read from the stream's current get pointer position till the stream's end.
Implements DynExpInstr::CircularDataStreamBase.
Definition at line 381 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the amount of samples which can be written to the stream untill the stream's end is reached.
Implements DynExpInstr::CircularDataStreamBase.
Definition at line 382 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the number of samples which have been written to the stream in total. Before overflowing, this function should keep continuing to return the largest possible value.
Implements DynExpInstr::DataStreamBase.
Definition at line 434 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the current position of the stream's read (get) pointer in samples.
Implements DynExpInstr::CircularDataStreamBase.
Definition at line 383 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the stream's read buffer size in samples.
Implements DynExpInstr::DataStreamBase.
Definition at line 432 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the stream's write buffer size in samples.
Implements DynExpInstr::DataStreamBase.
Definition at line 433 of file DataStreamInstrument.h.
|
inlineoverridevirtualnoexcept |
Determines the current position of the stream's write (put) pointer in samples.
Implements DynExpInstr::CircularDataStreamBase.
Definition at line 384 of file DataStreamInstrument.h.
|
inline |
Reads a single sample from the stream's buffer StreamBuffer.
Definition at line 475 of file DataStreamInstrument.h.
|
inline |
Reads multiple samples from the stream's buffer StreamBuffer.
Count | Amount of samples to read |
Definition at line 500 of file DataStreamInstrument.h.
|
inlineoverridevirtual |
Moves the stream's read/write pointer(s) to an absolute position.
PositionInSamples | Destiny position |
Which | Combination of flags std::ios_base::in (read) and std::ios_base::out (write) specifying the pointers to move. |
Implements DynExpInstr::CircularDataStreamBase.
Definition at line 393 of file DataStreamInstrument.h.
|
inlineoverridevirtual |
Moves the read/write pointer to the first sample in the stream.
Which | Combination of flags std::ios_base::in (read) and std::ios_base::out (write) specifying the pointers to move. |
Implements DynExpInstr::DataStreamBase.
Definition at line 400 of file DataStreamInstrument.h.
|
inlineoverridevirtual |
Moves the read pointer to the last sample in the stream and/or moves the write pointer after the last written sample in the stream.
Which | Combination of flags std::ios_base::in (read) and std::ios_base::out (write) specifying the pointers to move. |
Implements DynExpInstr::DataStreamBase.
Definition at line 405 of file DataStreamInstrument.h.
|
inlineoverridevirtual |
Moves the read/write pointer to the respective other one.
Which | Combination of flags std::ios_base::in (read) and std::ios_base::out (write) specifying the pointers to move. |
Implements DynExpInstr::DataStreamBase.
Definition at line 413 of file DataStreamInstrument.h.
|
inlineoverridevirtual |
Moves the stream's read/write pointer(s) to a position relative to SeekDir
.
OffsetInSamples | Destiny position (relative to SeekDir ) |
SeekDir | Set position relative to stream's beginning (std::ios_base::beg ), its end (std::ios_base::end ) or the current position (std::ios_base::cur ). |
Which | Combination of flags std::ios_base::in (read) and std::ios_base::out (write) specifying the pointers to move. |
Implements DynExpInstr::CircularDataStreamBase.
Definition at line 386 of file DataStreamInstrument.h.
|
inlineoverridevirtual |
Sets the stream size in samples.
BufferSizeInSamples | New stream size in samples |
Implements DynExpInstr::DataStreamBase.
Definition at line 435 of file DataStreamInstrument.h.
|
inlineprivatevirtual |
Checks whether a sample is considered valid. Derived classes can define rules to check the sample for validity. Does nothing if the sample is valid.
Sample | Sample to check |
Util::InvalidDataException | is thrown if Sample is invalid. |
Reimplemented in DynExpInstr::NumericSampleStream< SampleT, >.
Definition at line 529 of file DataStreamInstrument.h.
|
inline |
Writes a single sample to the stream's buffer StreamBuffer.
Sample | Sample to write |
Definition at line 445 of file DataStreamInstrument.h.
|
inline |
Writes a single sample to the stream's buffer StreamBuffer by implicitly constructing the sample from a std::chrono::duration
instance.
Rep | Type of the number of ticks of a std::chrono::duration instance. |
Period | std::ratio representing the type of a fraction, which denotes the time in seconds in between subsequent ticks, of a std::chrono::duration instance. |
Sample | Time sample to write |
Definition at line 466 of file DataStreamInstrument.h.
|
inline |
Writes multiple samples to the stream's buffer StreamBuffer.
T | Type implicitly convertible to SampleT |
Samples | List of samples to write |
Definition at line 489 of file DataStreamInstrument.h.
|
private |
Amount of samples which have been written to Stream in total.
Definition at line 534 of file DataStreamInstrument.h.
|
private |
Stream to operate on StreamBuffer.
Definition at line 533 of file DataStreamInstrument.h.
|
mutableprivate |
Circular stream buffer.
Definition at line 532 of file DataStreamInstrument.h.