nidas v1.2.3
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
nidas::dynld::SampleOutputStream Class Reference

A class for serializing Samples on an OutputStream. More...

#include <SampleOutputStream.h>

Inheritance diagram for nidas::dynld::SampleOutputStream:
Inheritance graph
[legend]

Public Member Functions

 SampleOutputStream ()
 
 SampleOutputStream (IOChannel *iochan, SampleConnectionRequester *rqstr=0)
 Create a SampleOutputStream with a connected IOChannel.
 
virtual ~SampleOutputStream ()
 
SampleOutputconnected (IOChannel *ochan) throw ()
 Implementation of IOChannelRequester::connected().
 
IOStreamgetIOStream ()
 Get the IOStream of this SampleOutputStream.
 
void close ()
 
bool receive (const Sample *s) throw ()
 Return true if SampleOutputBase considers the sample handled, such as if it is outside the clipping window.
 
void flush () throw ()
 Ask that this SampleClient send out any buffered Samples that it may be holding.
 
size_t write (const void *buf, size_t len, bool streamFlush)
 
void setLatency (float val)
 Outgoing data is buffered in an IOStream.
 
virtual void setIOChannel (IOChannel *val)
 Set the IOChannel for this SampleOutput.
 
SampleOutputgetOriginal () const
 Get pointer to SampleOutput that was cloned.
 
void setName (const std::string &val)
 
const std::string & getName () const
 
bool isRaw () const
 
void addRequestedSampleTag (SampleTag *tag)
 
std::list< const SampleTag * > getRequestedSampleTags () const
 
void addSourceSampleTag (const SampleTag *tag)
 
void addSourceSampleTags (const std::list< const SampleTag * > &tags)
 
std::list< const SampleTag * > getSourceSampleTags () const
 
void requestConnection (SampleConnectionRequester *)
 Request a connection, but don't wait for it.
 
int getReconnectDelaySecs () const
 Base class implementation.
 
void setReconnectDelaySecs (int val)
 
int getFd () const
 
dsm_time_t getNextFileTime () const
 
void createNextFile (dsm_time_t)
 
size_t write (const void *buf, size_t len)
 Raw write method, typically used to write the initial header.
 
void fromDOMElement (const xercesc::DOMElement *node)
 
IOChannelgetIOChannel () const
 
void setHeaderSource (HeaderSource *val)
 
void setDSMConfig (const DSMConfig *val)
 
const DSMConfiggetDSMConfig () const
 
size_t getNumDiscardedSamples () const
 
void addParameter (Parameter *val)
 Add a parameter to this DSMSensor.
 
const std::list< const Parameter * > & getParameters () const
 Get list of parameters.
 
const ParametergetParameter (const std::string &name) const
 Fetch a parameter by name.
 
float getLatency () const
 
void setTimeClippingWindow (const nidas::util::UTime &startTime, const nidas::util::UTime &endTime)
 The sample output can have a time window which clips the samples outside the window.
 
virtual xercesc::DOMElement * toDOMParent (xercesc::DOMElement *parent, bool complete) const
 Create a DOMElement and append it to the parent.
 
virtual xercesc::DOMElement * toDOMElement (xercesc::DOMElement *node, bool complete) const
 Add my content into a DOMElement.
 

Static Public Member Functions

static const XMLChgetNamespaceURI ()
 

Protected Member Functions

SampleOutputStreamclone (IOChannel *iochannel)
 
 SampleOutputStream (SampleOutputStream &, IOChannel *)
 Copy constructor, with a new IOChannel.
 
size_t write (const Sample *samp, bool streamFlush)
 
size_t incrementDiscardedSamples ()
 
SampleConnectionRequestergetSampleConnectionRequester ()
 
void disconnect ()
 Close the IOChannel and notify whoever did the requestConnection that it is time to disconnect, perhaps because of an IOException.
 

Protected Attributes

IOStream_iostream
 
std::string _name
 

Private Member Functions

 SampleOutputStream (const SampleOutputStream &)
 No copy.
 
SampleOutputStreamoperator= (const SampleOutputStream &)
 No assignment.
 

Private Attributes

int _maxUsecs
 Maximum number of microseconds between physical writes.
 
dsm_time_t _lastFlushTT
 Timetag of last flush of IOStream.
 
nidas::util::Mutex _tagsMutex
 
std::list< SampleTag * > _requestedTags
 
std::list< const SampleTag * > _constRequestedTags
 
IOChannel_iochan
 
SampleConnectionRequester_connectionRequester
 
dsm_time_t _nextFileTime
 
HeaderSource_headerSource
 
const DSMConfig_dsm
 
size_t _nsamplesDiscarded
 
std::map< std::string, Parameter * > _parameters
 Map of parameters by name.
 
std::list< const Parameter * > _constParameters
 List of const pointers to Parameters for providing via getParameters().
 
std::list< const SampleTag * > _sourceTags
 
SampleOutput_original
 Pointer to the SampleOutput that I was cloned from.
 
float _latency
 
int _reconnectDelaySecs
 
dsm_time_t _startTime
 Clipping time window.
 
dsm_time_t _endTime
 

Static Private Attributes

static XMLChnamespaceURI = 0
 

Detailed Description

A class for serializing Samples on an OutputStream.

Constructor & Destructor Documentation

◆ SampleOutputStream() [1/4]

SampleOutputStream::SampleOutputStream ( )

References nidas::core::getSample(), and USECS_PER_SEC.

Referenced by clone().

◆ SampleOutputStream() [2/4]

SampleOutputStream::SampleOutputStream ( IOChannel * iochan,
SampleConnectionRequester * rqstr = 0 )

◆ ~SampleOutputStream()

SampleOutputStream::~SampleOutputStream ( )
virtual

References _iostream, and VLOG.

◆ SampleOutputStream() [3/4]

SampleOutputStream::SampleOutputStream ( SampleOutputStream & x,
IOChannel * ioc )
protected

◆ SampleOutputStream() [4/4]

nidas::dynld::SampleOutputStream::SampleOutputStream ( const SampleOutputStream & )
private

No copy.

Member Function Documentation

◆ addParameter()

void SampleOutputBase::addParameter ( Parameter * val)
inherited

Add a parameter to this DSMSensor.

DSMSensor will then own the pointer and will delete it in its destructor. If a Parameter exists with the same name, it will be replaced with the new Parameter.

References nidas::core::SampleOutputBase::_constParameters, nidas::core::SampleOutputBase::_parameters, and nidas::core::getSample().

Referenced by nidas::core::SampleOutputBase::fromDOMElement().

◆ addRequestedSampleTag()

void SampleOutputBase::addRequestedSampleTag ( SampleTag * tag)
virtualinherited

◆ addSourceSampleTag()

void SampleOutputBase::addSourceSampleTag ( const SampleTag * tag)
virtualinherited

◆ addSourceSampleTags()

void SampleOutputBase::addSourceSampleTags ( const std::list< const SampleTag * > & tags)
virtualinherited

◆ clone()

SampleOutputStream * SampleOutputStream::clone ( IOChannel * iochannel)
protectedvirtual

◆ close()

void SampleOutputStream::close ( )
virtual

◆ connected()

SampleOutput * SampleOutputStream::connected ( IOChannel * ochan)
throw ( )
virtual

Implementation of IOChannelRequester::connected().

How an IOChannel indicates that it has received a connection.

Reimplemented from nidas::core::SampleOutputBase.

References nidas::core::SampleOutputBase::connected(), and nidas::core::getSample().

◆ createNextFile()

void SampleOutputBase::createNextFile ( dsm_time_t tt)
inherited

◆ disconnect()

void SampleOutputBase::disconnect ( )
protectedinherited

Close the IOChannel and notify whoever did the requestConnection that it is time to disconnect, perhaps because of an IOException.

This is typically called in the receive() method of a SampleOutput if it gets an IOException when writing data. A common implementation of a connection requester is to delete this SampleOutput after the removing it from the sample stream. So the caller method should immediately return after calling disconnect().

Exceptions
nidas::util::IOException

References nidas::core::SampleOutputBase::_connectionRequester, nidas::core::SampleOutputBase::close(), nidas::core::SampleConnectionRequester::disconnect(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), and ILOG.

Referenced by nidas::dynld::AsciiOutput::receive(), and nidas::dynld::raf::CVIOutput::receive().

◆ flush()

void SampleOutputStream::flush ( )
throw ( )
virtual

Ask that this SampleClient send out any buffered Samples that it may be holding.

Exceptions

)

Implements nidas::core::SampleClient.

References _iostream, nidas::core::IOStream::flush(), nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), VLOG, and WLOG.

Referenced by ARLIngest::run(), NidsMerge::run(), SensorExtract::run(), and write().

◆ fromDOMElement()

void SampleOutputBase::fromDOMElement ( const xercesc::DOMElement * node)
virtualinherited

◆ getDSMConfig()

const DSMConfig * nidas::core::SampleOutputBase::getDSMConfig ( ) const
inlinevirtualinherited

◆ getFd()

int SampleOutputBase::getFd ( ) const
virtualinherited

◆ getIOChannel()

IOChannel * nidas::core::SampleOutputBase::getIOChannel ( ) const
inlinevirtualinherited

◆ getIOStream()

IOStream * nidas::dynld::SampleOutputStream::getIOStream ( )
inline

Get the IOStream of this SampleOutputStream.

SampleOutputStream owns the pointer and will delete the IOStream in its destructor. The IOStream is available after a SammpleOutputStream is constructed with an connected IOChannel, or after the connected() method has been called and before close().

References _iostream.

◆ getLatency()

float nidas::core::SampleOutputBase::getLatency ( ) const
inlinevirtualinherited

◆ getName()

const std::string & nidas::core::SampleOutputBase::getName ( ) const
inlinevirtualinherited

◆ getNamespaceURI()

static const XMLCh * nidas::core::DOMable::getNamespaceURI ( )
inlinestaticinherited

◆ getNextFileTime()

dsm_time_t nidas::core::SampleOutputBase::getNextFileTime ( ) const
inlineinherited

◆ getNumDiscardedSamples()

size_t nidas::core::SampleOutputBase::getNumDiscardedSamples ( ) const
inlineinherited

◆ getOriginal()

SampleOutput * nidas::core::SampleOutputBase::getOriginal ( ) const
inlinevirtualinherited

Get pointer to SampleOutput that was cloned.

Will be NULL if this SampleOutput is an un-cloned original.

Implements nidas::core::SampleOutput.

References nidas::core::SampleOutputBase::_original.

◆ getParameter()

const Parameter * SampleOutputBase::getParameter ( const std::string & name) const
inherited

Fetch a parameter by name.

Returns a NULL pointer if no such parameter exists.

References nidas::core::SampleOutputBase::_parameters.

◆ getParameters()

const std::list< const Parameter * > & nidas::core::SampleOutputBase::getParameters ( ) const
inlineinherited

◆ getReconnectDelaySecs()

int SampleOutputBase::getReconnectDelaySecs ( ) const
virtualinherited

Base class implementation.

If setReconnectDelaySecs() has been called on this SampleOutput, then that value will be returned. Otherwise this will return the value of the IOChannel.

Implements nidas::core::SampleOutput.

References nidas::core::SampleOutputBase::_iochan, nidas::core::SampleOutputBase::_reconnectDelaySecs, and nidas::core::IOChannel::getReconnectDelaySecs().

◆ getRequestedSampleTags()

std::list< const SampleTag * > SampleOutputBase::getRequestedSampleTags ( ) const
virtualinherited

◆ getSampleConnectionRequester()

SampleConnectionRequester * nidas::core::SampleOutputBase::getSampleConnectionRequester ( )
inlineprotectedinherited

◆ getSourceSampleTags()

list< const SampleTag * > SampleOutputBase::getSourceSampleTags ( ) const
virtualinherited

◆ incrementDiscardedSamples()

size_t nidas::core::SampleOutputBase::incrementDiscardedSamples ( )
inlineprotectedinherited

◆ isRaw()

bool nidas::core::SampleOutputBase::isRaw ( ) const
inlinevirtualinherited

◆ operator=()

SampleOutputStream & nidas::dynld::SampleOutputStream::operator= ( const SampleOutputStream & )
private

No assignment.

◆ receive()

bool SampleOutputStream::receive ( const Sample * s)
throw ( )
virtual

Return true if SampleOutputBase considers the sample handled, such as if it is outside the clipping window.

Otherwise return false to indicate the subclass should handle the sample.

Reimplemented from nidas::core::SampleOutputBase.

References nidas::core::getSample(), NLOG, VLOG, and WLOG.

Referenced by SensorExtract::run().

◆ requestConnection()

void SampleOutputBase::requestConnection ( SampleConnectionRequester * requester)
virtualinherited

Request a connection, but don't wait for it.

Requester will be notified via SampleConnectionRequester interface when the connection has been made. It is not necessary to call this method if a SampleOutput is constructed with a connected IOChannel.

Exceptions
nidas::util::IOException

Implements nidas::core::SampleOutput.

References nidas::core::SampleOutputBase::_connectionRequester, nidas::core::SampleOutputBase::_iochan, nidas::core::getSample(), and nidas::core::IOChannel::requestConnection().

Referenced by nidas::dynld::AsciiOutput::requestConnection(), and nidas::dynld::raf::CVIOutput::requestConnection().

◆ setDSMConfig()

void nidas::core::SampleOutputBase::setDSMConfig ( const DSMConfig * val)
inlinevirtualinherited

◆ setHeaderSource()

void nidas::core::SampleOutputBase::setHeaderSource ( HeaderSource * val)
inlinevirtualinherited

◆ setIOChannel()

void SampleOutputBase::setIOChannel ( IOChannel * val)
virtualinherited

Set the IOChannel for this SampleOutput.

This IOChannel is not yet connected. The IOChannel must be connected before the SampleOutput is used for I/O, using the requestConnection() method, or by IOChannel::connect() followed by SampleOutput::connected(IOChannel*).

Reimplemented in nidas::dynld::raf::CVIOutput.

References nidas::core::SampleOutputBase::_iochan, nidas::core::SampleOutputBase::getDSMConfig(), nidas::core::getSample(), and nidas::core::IOChannel::setDSMConfig().

Referenced by nidas::dynld::AsciiOutput::connect(), nidas::core::SampleOutputBase::connected(), nidas::core::SampleOutputBase::fromDOMElement(), and nidas::dynld::raf::CVIOutput::setIOChannel().

◆ setLatency()

void SampleOutputStream::setLatency ( float val)
virtual

Outgoing data is buffered in an IOStream.

The stream will be flushed when the difference between successive time tags exceeds this value. This is a useful parameter for real-time applications.

Parameters
valNumber of seconds between physical writes. Default is set in SampleOutputBase.
Exceptions
nidas::util::InvalidParameterException

Reimplemented from nidas::core::SampleOutputBase.

References _maxUsecs, nidas::core::SampleOutputBase::getName(), nidas::core::getSample(), nidas::core::SampleOutputBase::setLatency(), and USECS_PER_SEC.

◆ setName()

void nidas::core::SampleOutputBase::setName ( const std::string & val)
inlinevirtualinherited

◆ setReconnectDelaySecs()

void SampleOutputBase::setReconnectDelaySecs ( int val)
virtualinherited

◆ setTimeClippingWindow()

void SampleOutputBase::setTimeClippingWindow ( const nidas::util::UTime & startTime,
const nidas::util::UTime & endTime )
inherited

The sample output can have a time window which clips the samples outside the window.

Only samples at or after startTime and before endTime will be passed along. One or both of start and end time can be zero, in which case only the non-zero times are used to clip samples.

References nidas::core::SampleOutputBase::_endTime, nidas::core::SampleOutputBase::_startTime, and nidas::util::UTime::toUsecs().

Referenced by nidas::core::NidasApp::setOutputClipping().

◆ toDOMElement()

xercesc::DOMElement * DOMable::toDOMElement ( xercesc::DOMElement * node,
bool complete ) const
virtualinherited

◆ toDOMParent()

xercesc::DOMElement * DOMable::toDOMParent ( xercesc::DOMElement * parent,
bool complete ) const
virtualinherited

Create a DOMElement and append it to the parent.

Exceptions
xercesc::DOMException

Reimplemented in nidas::core::DSMConfig, nidas::core::DSMSensor, nidas::core::Project, nidas::core::SampleTag, nidas::core::Site, nidas::core::ServerSocket, and nidas::core::Variable.

◆ write() [1/3]

size_t SampleOutputStream::write ( const Sample * samp,
bool streamFlush )
protected

◆ write() [2/3]

size_t SampleOutputBase::write ( const void * buf,
size_t len )
virtualinherited

Raw write method, typically used to write the initial header.

Exceptions
nidas::util::IOException

Implements nidas::core::SampleOutput.

References nidas::core::SampleOutputBase::_iochan, nidas::core::getSample(), len, and nidas::core::IOChannel::write().

◆ write() [3/3]

size_t SampleOutputStream::write ( const void * buf,
size_t len,
bool streamFlush )

Member Data Documentation

◆ _connectionRequester

SampleConnectionRequester* nidas::core::SampleOutputBase::_connectionRequester
privateinherited

◆ _constParameters

std::list<const Parameter*> nidas::core::SampleOutputBase::_constParameters
privateinherited

List of const pointers to Parameters for providing via getParameters().

Referenced by nidas::core::SampleOutputBase::addParameter(), and nidas::core::SampleOutputBase::getParameters().

◆ _constRequestedTags

std::list<const SampleTag*> nidas::core::SampleOutputBase::_constRequestedTags
privateinherited

◆ _dsm

const DSMConfig* nidas::core::SampleOutputBase::_dsm
privateinherited

◆ _endTime

dsm_time_t nidas::core::SampleOutputBase::_endTime
privateinherited

◆ _headerSource

HeaderSource* nidas::core::SampleOutputBase::_headerSource
privateinherited

◆ _iochan

IOChannel* nidas::core::SampleOutputBase::_iochan
privateinherited

◆ _iostream

IOStream* nidas::dynld::SampleOutputStream::_iostream
protected

◆ _lastFlushTT

dsm_time_t nidas::dynld::SampleOutputStream::_lastFlushTT
private

Timetag of last flush of IOStream.

◆ _latency

float nidas::core::SampleOutputBase::_latency
privateinherited

◆ _maxUsecs

int nidas::dynld::SampleOutputStream::_maxUsecs
private

Maximum number of microseconds between physical writes.

Referenced by SampleOutputStream(), SampleOutputStream(), and setLatency().

◆ _name

std::string nidas::core::SampleOutputBase::_name
protectedinherited

◆ _nextFileTime

dsm_time_t nidas::core::SampleOutputBase::_nextFileTime
privateinherited

◆ _nsamplesDiscarded

size_t nidas::core::SampleOutputBase::_nsamplesDiscarded
privateinherited

◆ _original

SampleOutput* nidas::core::SampleOutputBase::_original
privateinherited

Pointer to the SampleOutput that I was cloned from.

Referenced by nidas::core::SampleOutputBase::getOriginal().

◆ _parameters

std::map<std::string,Parameter*> nidas::core::SampleOutputBase::_parameters
privateinherited

◆ _reconnectDelaySecs

int nidas::core::SampleOutputBase::_reconnectDelaySecs
privateinherited

◆ _requestedTags

std::list<SampleTag*> nidas::core::SampleOutputBase::_requestedTags
privateinherited

◆ _sourceTags

std::list<const SampleTag*> nidas::core::SampleOutputBase::_sourceTags
privateinherited

◆ _startTime

dsm_time_t nidas::core::SampleOutputBase::_startTime
privateinherited

Clipping time window.

Samples outside the given time window will not pass.

Referenced by nidas::core::SampleOutputBase::receive(), and nidas::core::SampleOutputBase::setTimeClippingWindow().

◆ _tagsMutex

nidas::util::Mutex nidas::core::SampleOutputBase::_tagsMutex
mutableprivateinherited

◆ namespaceURI

XMLCh * DOMable::namespaceURI = 0
staticprivateinherited

The documentation for this class was generated from the following files: