module Data.ReinterpretCast.Internal.ImplFFI
( floatToWord
, wordToFloat
, doubleToWord
, wordToDouble
) where
import qualified Foreign as F
import System.IO.Unsafe (unsafePerformIO)
floatToWord :: Float -> F.Word32
floatToWord = fromFloat
wordToFloat :: F.Word32 -> Float
wordToFloat = toFloat
doubleToWord :: Double -> F.Word64
doubleToWord = fromFloat
wordToDouble :: F.Word64 -> Double
wordToDouble = toFloat
toFloat :: (F.Storable word, F.Storable float) => word -> float
toFloat word = unsafePerformIO $ F.alloca $ \buf -> do
F.poke (F.castPtr buf) word
F.peek buf
fromFloat :: (F.Storable word, F.Storable float) => float -> word
fromFloat float = unsafePerformIO $ F.alloca $ \buf -> do
F.poke (F.castPtr buf) float
F.peek buf