nidas  v1.2-1520
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Static Private Member Functions | Static Private Attributes | List of all members
nidas::util::EndianConverter Class Referenceabstract

Virtual base class declaring methods for converting numeric values between little-endian and big-endian representations, and for determining the endian represenation of the host system. More...

#include <EndianConverter.h>

Inheritance diagram for nidas::util::EndianConverter:
Inheritance graph
[legend]

Public Types

enum  endianness { EC_UNKNOWN_ENDIAN, EC_BIG_ENDIAN, EC_LITTLE_ENDIAN }
 

Public Member Functions

virtual ~EndianConverter ()
 
virtual double doubleValue (const void *) const =0
 Get 8 byte double at address, do endian conversion. More...
 
virtual double doubleValue (const double &) const =0
 
virtual float floatValue (const void *) const =0
 Get 4 byte float at address, do endian conversion. More...
 
virtual float floatValue (const float &) const =0
 
virtual int32_t int32Value (const void *) const =0
 Get 4 byte int32 at address, do endian conversion. More...
 
virtual int32_t int32Value (const int32_t &) const =0
 
virtual int64_t int64Value (const void *) const =0
 Get 8 byte int64_t at address, do endian conversion. More...
 
virtual int64_t int64Value (const int64_t &) const =0
 
virtual uint32_t uint32Value (const void *) const =0
 Get 4 byte unsigned int32_t at address, do endian conversion. More...
 
virtual uint32_t uint32Value (const uint32_t &) const =0
 
virtual int16_t int16Value (const void *) const =0
 
virtual int16_t int16Value (const int16_t &) const =0
 
virtual uint16_t uint16Value (const void *) const =0
 
virtual uint16_t uint16Value (const uint16_t &) const =0
 
virtual void doubleCopy (const double &, void *) const =0
 Copy 8 byte double to the given address, doing endian conversion. More...
 
virtual void floatCopy (const float &, void *) const =0
 Copy 4 byte float to the given address, doing endian conversion. More...
 
virtual void int32Copy (const int32_t &, void *) const =0
 Copy 4 byte int to the given address, doing endian conversion. More...
 
virtual void int64Copy (const int64_t &, void *) const =0
 Copy 8 byte int64_t to the given address, doing endian conversion. More...
 
virtual void uint32Copy (const uint32_t &, void *) const =0
 Copy 4 byte unsigned int to the given address, doing endian conversion. More...
 
virtual void int16Copy (const int16_t &, void *) const =0
 
virtual void uint16Copy (const uint16_t &, void *) const =0
 

Static Public Member Functions

static endianness getHostEndianness ()
 Return endianness value for this host. More...
 
static const EndianConvertergetConverter (endianness input, endianness output)
 Return an EndianConverter for converting from one endian to another. More...
 
static const EndianConvertergetConverter (endianness input)
 Return an EndianConverter for converting from an endian represenation to the endian representation of th host. More...
 

Static Public Attributes

static endianness hostEndianness = EndianConverter::EC_UNKNOWN_ENDIAN
 

Static Private Member Functions

static endianness privGetHostEndianness ()
 

Static Private Attributes

static EndianConverterflipConverter = 0
 
static EndianConverternoflipConverter = 0
 
static Mutex staticInitMutex = Mutex()
 

Detailed Description

Virtual base class declaring methods for converting numeric values between little-endian and big-endian representations, and for determining the endian represenation of the host system.

Implementations of this class are meant for serializing/de-serializing binary data. The methods read from an address or write to an address. The addresses do not have to be aligned correctly for the data value type.

Member Enumeration Documentation

Enumerator
EC_UNKNOWN_ENDIAN 
EC_BIG_ENDIAN 
EC_LITTLE_ENDIAN 

Constructor & Destructor Documentation

virtual nidas::util::EndianConverter::~EndianConverter ( )
inlinevirtual

Member Function Documentation

virtual void nidas::util::EndianConverter::doubleCopy ( const double &  ,
void *   
) const
pure virtual

Copy 8 byte double to the given address, doing endian conversion.

Pointer to address does not need to be 8-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

virtual double nidas::util::EndianConverter::doubleValue ( const void *  ) const
pure virtual

Get 8 byte double at address, do endian conversion.

Pointer to address does not need to be 8-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

virtual double nidas::util::EndianConverter::doubleValue ( const double &  ) const
pure virtual
virtual void nidas::util::EndianConverter::floatCopy ( const float &  ,
void *   
) const
pure virtual

Copy 4 byte float to the given address, doing endian conversion.

Pointer to address does not need to be 4-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

virtual float nidas::util::EndianConverter::floatValue ( const void *  ) const
pure virtual

Get 4 byte float at address, do endian conversion.

Pointer to address does not need to be 4-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

virtual float nidas::util::EndianConverter::floatValue ( const float &  ) const
pure virtual
const EndianConverter * EndianConverter::getConverter ( EndianConverter::endianness  input,
EndianConverter::endianness  output 
)
static

Return an EndianConverter for converting from one endian to another.

If both are the same, then the converter that is returned just does memcpy's and does not change the representation. It is a const pointer since all its methods are const, and the pointer is owned by EndianConverter.

Referenced by nidas::dynld::isff::CSI_IRGA_Sonic::checkSampleTags(), nidas::dynld::isff::DAUSensor::init(), nidas::dynld::IEEE_Float::init(), nidas::dynld::DSC_Event::init(), nidas::dynld::DSC_PulseCounter::init(), and nidas::dynld::DSC_FreqCounter::init().

const EndianConverter * EndianConverter::getConverter ( EndianConverter::endianness  input)
static

Return an EndianConverter for converting from an endian represenation to the endian representation of th host.

If both are the same, then the converter that is returned just does memcpy's and does not change the representation. It is a const pointer since all its methods are const, and the pointer is owned by EndianConverter.

EndianConverter::endianness EndianConverter::getHostEndianness ( )
static

Return endianness value for this host.

Referenced by nidas::dynld::isff::CSI_IRGA_Sonic::checkSampleTags(), and nidas::dynld::IEEE_Float::init().

virtual void nidas::util::EndianConverter::int16Copy ( const int16_t &  ,
void *   
) const
pure virtual
virtual int16_t nidas::util::EndianConverter::int16Value ( const void *  ) const
pure virtual
virtual int16_t nidas::util::EndianConverter::int16Value ( const int16_t &  ) const
pure virtual
virtual void nidas::util::EndianConverter::int32Copy ( const int32_t &  ,
void *   
) const
pure virtual

Copy 4 byte int to the given address, doing endian conversion.

Pointer to address does not need to be 4-byte aligned.

Implemented in nidas::util::FlipConverter.

virtual int32_t nidas::util::EndianConverter::int32Value ( const void *  ) const
pure virtual
virtual int32_t nidas::util::EndianConverter::int32Value ( const int32_t &  ) const
pure virtual
virtual void nidas::util::EndianConverter::int64Copy ( const int64_t &  ,
void *   
) const
pure virtual

Copy 8 byte int64_t to the given address, doing endian conversion.

Pointer to address does not need to be 8-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

virtual int64_t nidas::util::EndianConverter::int64Value ( const void *  ) const
pure virtual

Get 8 byte int64_t at address, do endian conversion.

Pointer to address does not need to be 8-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

Referenced by nidas::dynld::raf::TwoD64_USB::processImageRecord().

virtual int64_t nidas::util::EndianConverter::int64Value ( const int64_t &  ) const
pure virtual
EndianConverter::endianness EndianConverter::privGetHostEndianness ( )
staticprivate

References VLOG.

virtual void nidas::util::EndianConverter::uint16Copy ( const uint16_t &  ,
void *   
) const
pure virtual
virtual uint16_t nidas::util::EndianConverter::uint16Value ( const void *  ) const
pure virtual
virtual uint16_t nidas::util::EndianConverter::uint16Value ( const uint16_t &  ) const
pure virtual
virtual void nidas::util::EndianConverter::uint32Copy ( const uint32_t &  ,
void *   
) const
pure virtual

Copy 4 byte unsigned int to the given address, doing endian conversion.

Pointer to address does not need to be 4-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

virtual uint32_t nidas::util::EndianConverter::uint32Value ( const void *  ) const
pure virtual

Get 4 byte unsigned int32_t at address, do endian conversion.

Pointer to address does not need to be 4-byte aligned.

Implemented in nidas::util::NoFlipConverter, and nidas::util::FlipConverter.

Referenced by nidas::dynld::raf::UDPArincSensor::decodeTIMER(), nidas::dynld::isff::CU_Coldwire::process(), and nidas::dynld::raf::UDPArincSensor::process().

virtual uint32_t nidas::util::EndianConverter::uint32Value ( const uint32_t &  ) const
pure virtual

Member Data Documentation

EndianConverter * EndianConverter::flipConverter = 0
staticprivate
EndianConverter::endianness EndianConverter::hostEndianness = EndianConverter::EC_UNKNOWN_ENDIAN
static
EndianConverter * EndianConverter::noflipConverter = 0
staticprivate
Mutex EndianConverter::staticInitMutex = Mutex()
staticprivate

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