AnCH Framework  0.1
Another C++ Hack Framework
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
endianness.hpp
1 /*
2  ANCH Framework: ANother C++ Hack is a C++ framework based on C++11 standard
3  Copyright (C) 2012 Vincent Lachenal
4 
5  This file is part of ANCH Framework.
6 
7  ANCH Framework is free software: you can redistribute it and/or modify
8  it under the terms of the GNU Lesser General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  ANCH Framework is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public License
18  along with ANCH Framework. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef _ANCH_UTILS_ENDIANNESS_H_
21 #define _ANCH_UTILS_ENDIANNESS_H_
22 
23 #include <cstddef>
24 
25 
26 namespace anch {
27 
38  template<typename T>
39  inline void byteSwap(T src, uint8_t* dest) {
40  const uint8_t* words = reinterpret_cast<const uint8_t*>(&src);
41  std::size_t size = sizeof(T);
42  for(std::size_t i = 0 ; i < size ; i++) {
43  dest[i] = words[size - 1 - i];
44  }
45  }
46 
56  inline bool isBigEndian() {
57  const uint32_t byteOrderTest = 0x01;
58  return (reinterpret_cast<const uint8_t*>(&byteOrderTest)[0] == 0);
59  }
60 
70  inline bool isLittleEndian() {
71  return !isBigEndian();
72  }
73 
74 }
75 
76 #endif // _ANCH_UTILS_ENDIANNESS_H_
AnCH framework base namespace.
Definition: base64.hpp:28
void byteSwap(T src, uint8_t *dest)
Definition: endianness.hpp:39
bool isBigEndian()
Definition: endianness.hpp:56
bool isLittleEndian()
Definition: endianness.hpp:70