27#ifndef NIDAS_UTIL_ENDIANCONVERTER_H
28#define NIDAS_UTIL_ENDIANCONVERTER_H
35namespace nidas {
namespace util {
48 const char* cp = (
const char*)p;
49 for (
int i = 7; i >= 0; i--) u.b[i] = *cp++;
69 const char* cp = (
const char*)p;
70 for (
int i = 3; i >= 0; i--) u.b[i] = *cp++;
90 const char* cp = (
const char*)p;
91 for (
int i = 7; i >= 0; i--) u.b[i] = *cp++;
111 const char* cp = (
const char*)p;
112 for (
int i = 3; i >= 0; i--) u.b[i] = *cp++;
132 const char* cp = (
const char*)p;
133 for (
int i = 3; i >= 0; i--) u.b[i] = *cp++;
153 u.b[1] = ((
const char*)p)[0];
154 u.b[0] = ((
const char*)p)[1];
174 u.b[1] = ((
const char*)p)[0];
175 u.b[0] = ((
const char*)p)[1];
196 char* cp = (
char*) p;
197 for (
int i = 7; i >= 0; i--) *cp++ = u.b[i];
212 char* cp = (
char*) p;
213 for (
int i = 3; i >= 0; i--) *cp++ = u.b[i];
228 char* cp = (
char*) p;
229 for (
int i = 7; i >= 0; i--) *cp++ = u.b[i];
244 char* cp = (
char*) p;
245 for (
int i = 3; i >= 0; i--) *cp++ = u.b[i];
259 char* cp = (
char*) p;
260 for (
int i = 3; i >= 0; i--) *cp++ = u.b[i];
274 char* cp = (
char*) p;
290 char* cp = (
char*) p;
403 virtual void int32Copy(
const int32_t&,
void* )
const = 0;
409 virtual void int64Copy(
const int64_t&,
void* )
const = 0;
417 virtual void int16Copy(
const int16_t&,
void* )
const = 0;
556 memcpy(&v,p,
sizeof(
double));
568 memcpy(&v,p,
sizeof(
float));
580 memcpy(&v,p,
sizeof(int64_t));
592 memcpy(&v,p,
sizeof(int32_t));
604 memcpy(&v,p,
sizeof(uint32_t));
619 u.b[0] = ((
const char*)p)[0];
620 u.b[1] = ((
const char*)p)[1];
635 u.b[0] = ((
const char*)p)[0];
636 u.b[1] = ((
const char*)p)[1];
647 memcpy(p,&v,
sizeof(
double));
652 memcpy(p,&v,
sizeof(
float));
657 memcpy(p,&v,
sizeof(int64_t));
662 memcpy(p,&v,
sizeof(int32_t));
667 memcpy(p,&v,
sizeof(uint32_t));
672 memcpy(p,&v,
sizeof(int16_t));
679 ((
char*)p)[0] = u.b[1];
680 ((
char*)p)[1] = u.b[0];
685 memcpy(p,&v,
sizeof(uint16_t));
692 ((
char*)p)[0] = u.b[1];
693 ((
char*)p)[1] = u.b[0];
Virtual base class declaring methods for converting numeric values between little-endian and big-endi...
Definition EndianConverter.h:304
virtual void int16Copy(const int16_t &, void *) const =0
static EndianConverter * flipConverter
Definition EndianConverter.h:424
virtual uint16_t uint16Value(const uint16_t &) const =0
virtual void int64Copy(const int64_t &, void *) const =0
Copy 8 byte int64_t to the given address, doing endian conversion.
static endianness getHostEndianness()
Return endianness value for this host.
Definition EndianConverter.cc:73
virtual int32_t int32Value(const int32_t &) const =0
endianness
Definition EndianConverter.h:309
@ EC_LITTLE_ENDIAN
Definition EndianConverter.h:309
@ EC_BIG_ENDIAN
Definition EndianConverter.h:309
@ EC_UNKNOWN_ENDIAN
Definition EndianConverter.h:309
virtual int16_t int16Value(const void *) const =0
static endianness privGetHostEndianness()
Definition EndianConverter.cc:49
virtual int16_t int16Value(const int16_t &) const =0
virtual int32_t int32Value(const void *) const =0
Get 4 byte int32 at address, do endian conversion.
virtual float floatValue(const float &) const =0
virtual double doubleValue(const void *) const =0
Get 8 byte double at address, do endian conversion.
virtual void floatCopy(const float &, void *) const =0
Copy 4 byte float to the given address, doing endian conversion.
virtual ~EndianConverter()
Definition EndianConverter.h:307
virtual uint16_t uint16Value(const void *) const =0
virtual float floatValue(const void *) const =0
Get 4 byte float at address, do endian conversion.
virtual uint32_t uint32Value(const void *) const =0
Get 4 byte unsigned int32_t at address, do endian conversion.
static endianness hostEndianness
Definition EndianConverter.h:313
virtual uint32_t uint32Value(const uint32_t &) const =0
virtual double doubleValue(const double &) const =0
virtual void int32Copy(const int32_t &, void *) const =0
Copy 4 byte int to the given address, doing endian conversion.
virtual void uint32Copy(const uint32_t &, void *) const =0
Copy 4 byte unsigned int to the given address, doing endian conversion.
static Mutex staticInitMutex
Definition EndianConverter.h:428
virtual int64_t int64Value(const int64_t &) const =0
virtual void doubleCopy(const double &, void *) const =0
Copy 8 byte double to the given address, doing endian conversion.
virtual int64_t int64Value(const void *) const =0
Get 8 byte int64_t at address, do endian conversion.
static const EndianConverter * getConverter(endianness input, endianness output)
Return an EndianConverter for converting from one endian to another.
Definition EndianConverter.cc:84
static EndianConverter * noflipConverter
Definition EndianConverter.h:426
virtual void uint16Copy(const uint16_t &, void *) const =0
EndianConverter that flips bytes, used for conversion of little-to-big and big-to-little.
Definition EndianConverter.h:435
virtual ~FlipConverter()
Definition EndianConverter.h:438
void doubleCopy(const double &v, void *p) const
Copy 8 byte double to the given address, doing endian conversion.
Definition EndianConverter.h:510
float floatValue(const void *p) const
Get 4 byte float at address, do endian conversion.
Definition EndianConverter.h:450
void int32Copy(const int32_t &v, void *p) const
Copy 4 byte int to the given address, doing endian conversion.
Definition EndianConverter.h:525
uint32_t uint32Value(const uint32_t &p) const
Definition EndianConverter.h:485
void uint16Copy(const uint16_t &v, void *p) const
Definition EndianConverter.h:540
void int64Copy(const int64_t &v, void *p) const
Copy 8 byte int64_t to the given address, doing endian conversion.
Definition EndianConverter.h:520
void int16Copy(const int16_t &v, void *p) const
Definition EndianConverter.h:535
void uint32Copy(const uint32_t &v, void *p) const
Copy 4 byte unsigned int to the given address, doing endian conversion.
Definition EndianConverter.h:530
double doubleValue(const double &p) const
Definition EndianConverter.h:445
double doubleValue(const void *p) const
Get 8 byte double at address, do endian conversion.
Definition EndianConverter.h:440
int32_t int32Value(const void *p) const
Get 4 byte int32 at address, do endian conversion.
Definition EndianConverter.h:470
void floatCopy(const float &v, void *p) const
Copy 4 byte float to the given address, doing endian conversion.
Definition EndianConverter.h:515
uint16_t uint16Value(const uint16_t &p) const
Definition EndianConverter.h:505
int16_t int16Value(const int16_t &p) const
Definition EndianConverter.h:495
int16_t int16Value(const void *p) const
Definition EndianConverter.h:490
uint32_t uint32Value(const void *p) const
Get 4 byte unsigned int32_t at address, do endian conversion.
Definition EndianConverter.h:480
float floatValue(const float &p) const
Definition EndianConverter.h:455
int64_t int64Value(const int64_t &p) const
Definition EndianConverter.h:465
int32_t int32Value(const int32_t &p) const
Definition EndianConverter.h:475
int64_t int64Value(const void *p) const
Get 8 byte int64_t at address, do endian conversion.
Definition EndianConverter.h:460
uint16_t uint16Value(const void *p) const
Definition EndianConverter.h:500
A C++ wrapper for a POSIX mutex.
Definition ThreadSupport.h:161
EndianConverter that doesn't flip bytes.
Definition EndianConverter.h:549
float floatValue(const float &p) const
Definition EndianConverter.h:572
void int32Copy(const int &v, void *p) const
Definition EndianConverter.h:660
void int64Copy(const int64_t &v, void *p) const
Copy 8 byte int64_t to the given address, doing endian conversion.
Definition EndianConverter.h:655
void floatCopy(const float &v, void *p) const
Copy 4 byte float to the given address, doing endian conversion.
Definition EndianConverter.h:650
double doubleValue(const double &p) const
Definition EndianConverter.h:560
double doubleValue(const void *p) const
Get 8 byte double at address, do endian conversion.
Definition EndianConverter.h:553
int16_t int16Value(const void *p) const
Definition EndianConverter.h:613
int32_t int32Value(const void *p) const
Get 4 byte int32 at address, do endian conversion.
Definition EndianConverter.h:589
uint32_t uint32Value(const void *p) const
Get 4 byte unsigned int32_t at address, do endian conversion.
Definition EndianConverter.h:601
virtual ~NoFlipConverter()
Definition EndianConverter.h:551
int32_t int32Value(const int32_t &p) const
Definition EndianConverter.h:596
int16_t int16Value(const int16_t &p) const
Definition EndianConverter.h:624
void uint16Copy(const uint16_t &v, void *p) const
Definition EndianConverter.h:684
int64_t int64Value(const int64_t &p) const
Definition EndianConverter.h:584
uint32_t uint32Value(const uint32_t &p) const
Definition EndianConverter.h:608
void int16Copy(const int16_t &v, void *p) const
Definition EndianConverter.h:670
float floatValue(const void *p) const
Get 4 byte float at address, do endian conversion.
Definition EndianConverter.h:565
void uint32Copy(const uint32_t &v, void *p) const
Copy 4 byte unsigned int to the given address, doing endian conversion.
Definition EndianConverter.h:665
int64_t int64Value(const void *p) const
Get 8 byte int64_t at address, do endian conversion.
Definition EndianConverter.h:577
uint16_t uint16Value(const void *p) const
Definition EndianConverter.h:629
void doubleCopy(const double &v, void *p) const
Copy 8 byte double to the given address, doing endian conversion.
Definition EndianConverter.h:645
uint16_t uint16Value(const uint16_t &p) const
Definition EndianConverter.h:640
float flipFloatIn(const void *p)
Function for reading 4 bytes from an address, flipping the bytes, and returning the float value.
Definition EndianConverter.h:63
double flipDouble(const double &p)
Definition EndianConverter.h:53
float flipFloat(const float &p)
Definition EndianConverter.h:73
double flipDoubleIn(const void *p)
Function for reading 8 bytes from an address, flipping the bytes, and returning the double value.
Definition EndianConverter.h:42
void flipInt32Out(const int32_t &v, void *p)
Function for writing a 4 byte, 32 bit int value to an address, flipping the bytes.
Definition EndianConverter.h:237
uint16_t flipUint16In(const void *p)
Function for reading 2 bytes from an address, flipping the bytes, and returning the unsigned 16 bit i...
Definition EndianConverter.h:168
int16_t flipInt16In(const void *p)
Function for reading 2 bytes from an address, flipping the bytes, and returning the 16 bit int value.
Definition EndianConverter.h:147
int32_t flipInt32In(const void *p)
Function for reading 4 bytes from an address, flipping the bytes, and returning the 32 bit int value.
Definition EndianConverter.h:105
uint32_t flipUint32(const uint32_t &p)
Definition EndianConverter.h:136
int32_t flipInt32(const int32_t &p)
Definition EndianConverter.h:115
uint32_t flipUint32In(const void *p)
Function for reading 4 bytes from an address, flipping the bytes, and returning the unsigned 32 bit i...
Definition EndianConverter.h:126
void flipDoubleOut(const double &v, void *p)
Function for writing an 8 byte double value to an address, flipping the bytes.
Definition EndianConverter.h:189
int16_t flipInt16(const int16_t &p)
Definition EndianConverter.h:157
void flipUint16Out(const uint16_t &v, void *p)
Function for writing a 2 byte unsigned 16 bit int value to an address, flipping the bytes.
Definition EndianConverter.h:283
void flipInt16Out(const int16_t &v, void *p)
Function for writing a 2 byte 16 bit int value to an address, flipping the bytes.
Definition EndianConverter.h:267
void flipUint32Out(const uint32_t &v, void *p)
Function for writing a 4 byte unsigned 32 bit int value to an address, flipping the bytes.
Definition EndianConverter.h:252
int64_t flipInt64(const int64_t &p)
Definition EndianConverter.h:94
void flipInt64Out(const int64_t &v, void *p)
Function for writing an 8 byte, 64 bit int value to an address, flipping the bytes.
Definition EndianConverter.h:221
void flipFloatOut(const float &v, void *p)
Function for writing a 4 byte float value to an address, flipping the bytes.
Definition EndianConverter.h:205
int64_t flipInt64In(const void *p)
Function for reading 8 bytes from an address, flipping the bytes, and returning the int64_t value.
Definition EndianConverter.h:84
uint16_t flipUint16(const uint16_t &p)
Definition EndianConverter.h:178
Root namespace for the NCAR In-Situ Data Acquisition Software.
Definition A2DConverter.h:31