27 #ifndef NIDAS_UTIL_ENDIANCONVERTER_H
28 #define NIDAS_UTIL_ENDIANCONVERTER_H
35 namespace 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;
343 virtual double doubleValue(
const void* )
const = 0;
345 virtual double doubleValue(
const double& )
const = 0;
351 virtual float floatValue(
const void* )
const = 0;
353 virtual float floatValue(
const float& )
const = 0;
359 virtual int32_t
int32Value(
const void* )
const = 0;
361 virtual int32_t
int32Value(
const int32_t& )
const = 0;
367 virtual int64_t
int64Value(
const void* )
const = 0;
369 virtual int64_t
int64Value(
const int64_t& )
const = 0;
375 virtual uint32_t
uint32Value(
const void* )
const = 0;
377 virtual uint32_t
uint32Value(
const uint32_t& )
const = 0;
379 virtual int16_t
int16Value(
const void* )
const = 0;
381 virtual int16_t
int16Value(
const int16_t& )
const = 0;
383 virtual uint16_t
uint16Value(
const void* )
const = 0;
385 virtual uint16_t
uint16Value(
const uint16_t& )
const = 0;
391 virtual void doubleCopy(
const double&,
void* )
const = 0;
397 virtual void floatCopy(
const float&,
void* )
const = 0;
403 virtual void int32Copy(
const int32_t&,
void* )
const = 0;
409 virtual void int64Copy(
const int64_t&,
void* )
const = 0;
415 virtual void uint32Copy(
const uint32_t&,
void* )
const = 0;
417 virtual void int16Copy(
const int16_t&,
void* )
const = 0;
419 virtual void uint16Copy(
const uint16_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];
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 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
endianness
Definition: EndianConverter.h:309
int32_t int32Value(const void *p) const
Get 4 byte int32 at address, do endian conversion.
Definition: EndianConverter.h:470
uint16_t uint16Value(const void *p) const
Definition: EndianConverter.h:629
void uint16Copy(const uint16_t &v, void *p) const
Definition: EndianConverter.h:540
virtual int64_t int64Value(const void *) const =0
Get 8 byte int64_t at address, do endian conversion.
virtual uint16_t uint16Value(const void *) const =0
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 int16Copy(const int16_t &v, void *p) const
Definition: EndianConverter.h:670
int64_t int64Value(const void *p) const
Get 8 byte int64_t at address, do endian conversion.
Definition: EndianConverter.h:460
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
void int32Copy(const int &v, void *p) const
Definition: EndianConverter.h:660
virtual void doubleCopy(const double &, void *) const =0
Copy 8 byte double to the given address, doing endian conversion.
int64_t int64Value(const void *p) const
Get 8 byte int64_t at address, do endian conversion.
Definition: EndianConverter.h:577
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
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
virtual uint32_t uint32Value(const void *) const =0
Get 4 byte unsigned int32_t at address, do endian conversion.
int16_t int16Value(const void *p) const
Definition: EndianConverter.h:613
void floatCopy(const float &v, void *p) const
Copy 4 byte float to the given address, doing endian conversion.
Definition: EndianConverter.h:650
virtual double doubleValue(const void *) const =0
Get 8 byte double at address, do endian conversion.
void doubleCopy(const double &v, void *p) const
Copy 8 byte double to the given address, doing endian conversion.
Definition: EndianConverter.h:510
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
EndianConverter that doesn't flip bytes.
Definition: EndianConverter.h:549
void uint16Copy(const uint16_t &v, void *p) const
Definition: EndianConverter.h:684
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
int32_t flipInt32(const int32_t &p)
Definition: EndianConverter.h:115
static Mutex staticInitMutex
Definition: EndianConverter.h:428
virtual void int64Copy(const int64_t &, void *) const =0
Copy 8 byte int64_t to the given address, doing endian conversion.
void int16Copy(const int16_t &v, void *p) const
Definition: EndianConverter.h:535
double doubleValue(const double &p) const
Definition: EndianConverter.h:560
float floatValue(const void *p) const
Get 4 byte float at address, do endian conversion.
Definition: EndianConverter.h:450
static const EndianConverter * getConverter(endianness input, endianness output)
Return an EndianConverter for converting from one endian to another.
Definition: EndianConverter.cc:84
double flipDouble(const double &p)
Definition: EndianConverter.h:53
virtual void uint32Copy(const uint32_t &, void *) const =0
Copy 4 byte unsigned int to the given address, doing endian conversion.
static EndianConverter * noflipConverter
Definition: EndianConverter.h:426
uint16_t flipUint16(const uint16_t &p)
Definition: EndianConverter.h:178
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
static endianness getHostEndianness()
Return endianness value for this host.
Definition: EndianConverter.cc:73
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
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
float floatValue(const float &p) const
Definition: EndianConverter.h:455
static EndianConverter * flipConverter
Definition: EndianConverter.h:424
float floatValue(const void *p) const
Get 4 byte float at address, do endian conversion.
Definition: EndianConverter.h:565
float flipFloat(const float &p)
Definition: EndianConverter.h:73
uint16_t uint16Value(const void *p) const
Definition: EndianConverter.h:500
int16_t flipInt16(const int16_t &p)
Definition: EndianConverter.h:157
Virtual base class declaring methods for converting numeric values between little-endian and big-endi...
Definition: EndianConverter.h:304
int16_t int16Value(const void *p) const
Definition: EndianConverter.h:490
int16_t int16Value(const int16_t &p) const
Definition: EndianConverter.h:495
virtual ~FlipConverter()
Definition: EndianConverter.h:438
uint32_t uint32Value(const uint32_t &p) const
Definition: EndianConverter.h:608
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
int32_t int32Value(const int32_t &p) const
Definition: EndianConverter.h:596
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
EndianConverter that flips bytes, used for conversion of little-to-big and big-to-little.
Definition: EndianConverter.h:435
virtual int32_t int32Value(const void *) const =0
Get 4 byte int32 at address, do endian conversion.
int16_t int16Value(const int16_t &p) const
Definition: EndianConverter.h:624
void int32Copy(const int32_t &v, void *p) const
Copy 4 byte int to the given address, doing endian conversion.
Definition: EndianConverter.h:525
virtual ~EndianConverter()
Definition: EndianConverter.h:307
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
virtual void int32Copy(const int32_t &, void *) const =0
Copy 4 byte int to the given address, doing endian conversion.
static endianness hostEndianness
Definition: EndianConverter.h:313
int64_t int64Value(const int64_t &p) const
Definition: EndianConverter.h:584
Definition: EndianConverter.h:309
static endianness privGetHostEndianness()
Definition: EndianConverter.cc:49
float floatValue(const float &p) const
Definition: EndianConverter.h:572
virtual ~NoFlipConverter()
Definition: EndianConverter.h:551
uint32_t uint32Value(const void *p) const
Get 4 byte unsigned int32_t at address, do endian conversion.
Definition: EndianConverter.h:480
virtual void uint16Copy(const uint16_t &, void *) const =0
virtual int16_t int16Value(const void *) const =0
Definition: EndianConverter.h:309
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
uint32_t flipUint32(const uint32_t &p)
Definition: EndianConverter.h:136
double doubleValue(const double &p) const
Definition: EndianConverter.h:445
uint32_t uint32Value(const uint32_t &p) const
Definition: EndianConverter.h:485
virtual float floatValue(const void *) const =0
Get 4 byte float at address, do endian conversion.
virtual void floatCopy(const float &, void *) const =0
Copy 4 byte float to the given address, doing endian conversion.
int32_t int32Value(const void *p) const
Get 4 byte int32 at address, do endian conversion.
Definition: EndianConverter.h:589
uint16_t uint16Value(const uint16_t &p) const
Definition: EndianConverter.h:640
void doubleCopy(const double &v, void *p) const
Copy 8 byte double to the given address, doing endian conversion.
Definition: EndianConverter.h:645
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
void floatCopy(const float &v, void *p) const
Copy 4 byte float to the given address, doing endian conversion.
Definition: EndianConverter.h:515
int64_t int64Value(const int64_t &p) const
Definition: EndianConverter.h:465
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
uint32_t uint32Value(const void *p) const
Get 4 byte unsigned int32_t at address, do endian conversion.
Definition: EndianConverter.h:601
A C++ wrapper for a POSIX mutex.
Definition: ThreadSupport.h:154
int64_t flipInt64(const int64_t &p)
Definition: EndianConverter.h:94
uint16_t uint16Value(const uint16_t &p) const
Definition: EndianConverter.h:505
double doubleValue(const void *p) const
Get 8 byte double at address, do endian conversion.
Definition: EndianConverter.h:440
int32_t int32Value(const int32_t &p) const
Definition: EndianConverter.h:475
double doubleValue(const void *p) const
Get 8 byte double at address, do endian conversion.
Definition: EndianConverter.h:553
Definition: EndianConverter.h:309
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
virtual void int16Copy(const int16_t &, void *) const =0