Isis Developer Reference
Endian.h
Go to the documentation of this file.
1 #ifndef Endian_h
2 #define Endian_h
3 
8 /* SPDX-License-Identifier: CC0-1.0 */
9 
10 #include <QString>
11 
12 namespace Isis {
42  enum ByteOrder {
44  Lsb,
45  Msb
46  };
47 
48  inline QString ByteOrderName(Isis::ByteOrder byteOrder) {
49  if(byteOrder == Isis::NoByteOrder) return "None";
50  if(byteOrder == Isis::Lsb) return "Lsb";
51  if(byteOrder == Isis::Msb) return "Msb";
52  return "Error";
53  }
54 
55  inline Isis::ByteOrder ByteOrderEnumeration(const QString &order) {
56  QString temp = order.toUpper();
57  if(temp == "LSB") return Isis::Lsb;
58  if(temp == "MSB") return Isis::Msb;
59  return Isis::NoByteOrder;
60  }
61 
67  inline bool IsLsb() {
68  union {
69  short a;
70  char b[2];
71  } test;
72 
73  test.a = 1;
74  if(test.b[0] == 0) return false;
75  return true;
76  }
77 
83  inline bool IsMsb() {
84  return !Isis::IsLsb();
85  }
86 
94  inline bool IsLittleEndian() {
95  return IsLsb();
96  }
97 
105  inline bool IsBigEndian() {
106  return !Isis::IsLsb();
107  }
108 }
109 
110 #endif
111 
Isis::IsLsb
bool IsLsb()
Return true if this host is an LSB first machine and false if it is not.
Definition: Endian.h:67
Isis::ByteOrder
ByteOrder
Tests the current architecture for byte order.
Definition: Endian.h:42
Isis::ByteOrderEnumeration
Isis::ByteOrder ByteOrderEnumeration(const QString &order)
Definition: Endian.h:55
Isis::NoByteOrder
@ NoByteOrder
Definition: Endian.h:43
Isis::IsMsb
bool IsMsb()
Return true if this host is an MSB first machine and false if it is not.
Definition: Endian.h:83
Isis::IsLittleEndian
bool IsLittleEndian()
Definition: Endian.h:94
Isis::IsBigEndian
bool IsBigEndian()
Definition: Endian.h:105
Isis::Msb
@ Msb
Definition: Endian.h:45
Isis::ByteOrderName
QString ByteOrderName(Isis::ByteOrder byteOrder)
Definition: Endian.h:48
Isis::Lsb
@ Lsb
Definition: Endian.h:44
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16