content: {-# LANGUAGE CPP #-}
  -- | Endian utilities
  --
  -- Exported for testing purposes, but not meant to be used outside this package.
  module Flat.Endian
      (
      toBE32
      , toBE64
      , toBE16
      , isBigEndian
      -- , fix64
      ) where
  
  #include "MachDeps.h"
  
  import           Data.Word (Word16, Word32, Word64, byteSwap16, byteSwap32,
                              byteSwap64)
  
  -- #ifdef ghcjs_HOST_OS
  -- import Data.Bits
  -- #endif
  
  -- $setup
  -- >>> import Numeric (showHex)
  
  isBigEndian :: Bool
  isBigEndian =
  #if defined(WORDS_BIGENDIAN) || defined(ETA_VERSION)
      True
  #else
      False
  #endif
  
  
  {- |
  Convert a 64 bit value in cpu endianess to big endian
  
  >>> toBE64 0xF0F1F2F3F4F5F6F7 == if isBigEndian then 0xF0F1F2F3F4F5F6F7 else 0xF7F6F5F4F3F2F1F0
  True
  -}
  toBE64 :: Word64 -> Word64
  #if defined(WORDS_BIGENDIAN) || defined(ETA_VERSION)
  toBE64 = id
  #else
  toBE64 = byteSwap64
  #endif
  
  {- |
  Convert a 32 bit value in cpu endianess to big endian
  
  >>> toBE32 0xF0F1F2F3 == if isBigEndian then 0xF0F1F2F3 else 0xF3F2F1F0
  True
  -}
  toBE32 :: Word32 -> Word32
  #if defined(WORDS_BIGENDIAN) || defined(ETA_VERSION)
  toBE32 = id
  #else
  toBE32 = byteSwap32
  #endif
  
  {- |
  Convert a 16 bit value in cpu endianess to big endian
  
  >>> toBE16 0xF0F1 == if isBigEndian then 0xF0F1 else 0xF1F0
  True
  -}
  toBE16 :: Word16 -> Word16
  #if defined(WORDS_BIGENDIAN) || defined(ETA_VERSION)
  toBE16 = id
  #else
  toBE16 = byteSwap16
  #endif
  