endian.hpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Copyright 2005 Caleb Epstein
  2. // Copyright 2006 John Maddock
  3. // Distributed under the Boost Software License, Version 1.0. (See accompany-
  4. // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. /*
  6. * Copyright (c) 1997
  7. * Silicon Graphics Computer Systems, Inc.
  8. *
  9. * Permission to use, copy, modify, distribute and sell this software
  10. * and its documentation for any purpose is hereby granted without fee,
  11. * provided that the above copyright notice appear in all copies and
  12. * that both that copyright notice and this permission notice appear
  13. * in supporting documentation. Silicon Graphics makes no
  14. * representations about the suitability of this software for any
  15. * purpose. It is provided "as is" without express or implied warranty.
  16. */
  17. /*
  18. * Copyright notice reproduced from <boost/detail/limits.hpp>, from
  19. * which this code was originally taken.
  20. *
  21. * Modified by Caleb Epstein to use <endian.h> with GNU libc and to
  22. * defined the BOOST_ENDIAN macro.
  23. */
  24. #ifndef BOOST_DETAIL_ENDIAN_HPP
  25. #define BOOST_DETAIL_ENDIAN_HPP
  26. // GNU libc offers the helpful header <endian.h> which defines
  27. // __BYTE_ORDER
  28. #if defined (__GLIBC__)
  29. # include <endian.h>
  30. # if (__BYTE_ORDER == __LITTLE_ENDIAN)
  31. # define BOOST_LITTLE_ENDIAN
  32. # elif (__BYTE_ORDER == __BIG_ENDIAN)
  33. # define BOOST_BIG_ENDIAN
  34. # elif (__BYTE_ORDER == __PDP_ENDIAN)
  35. # define BOOST_PDP_ENDIAN
  36. # else
  37. # error Unknown machine endianness detected.
  38. # endif
  39. # define BOOST_BYTE_ORDER __BYTE_ORDER
  40. #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
  41. # define BOOST_BIG_ENDIAN
  42. # define BOOST_BYTE_ORDER 4321
  43. #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
  44. # define BOOST_LITTLE_ENDIAN
  45. # define BOOST_BYTE_ORDER 1234
  46. #elif defined(__sparc) || defined(__sparc__) \
  47. || defined(_POWER) || defined(__powerpc__) \
  48. || defined(__ppc__) || defined(__hpux) \
  49. || defined(_MIPSEB) || defined(_POWER) \
  50. || defined(__s390__)
  51. # define BOOST_BIG_ENDIAN
  52. # define BOOST_BYTE_ORDER 4321
  53. #elif defined(__i386__) || defined(__alpha__) \
  54. || defined(__ia64) || defined(__ia64__) \
  55. || defined(_M_IX86) || defined(_M_IA64) \
  56. || defined(_M_ALPHA) || defined(__amd64) \
  57. || defined(__amd64__) || defined(_M_AMD64) \
  58. || defined(__x86_64) || defined(__x86_64__) \
  59. || defined(_M_X64) || defined(__bfin__)
  60. # define BOOST_LITTLE_ENDIAN
  61. # define BOOST_BYTE_ORDER 1234
  62. #else
  63. # error The file boost/detail/endian.hpp needs to be set up for your CPU type.
  64. #endif
  65. #endif