packer 0.1.4 → 0.1.5
raw patch · 2 files changed
+56/−1 lines, 2 files
Files
- Data/Packer/IEEE754.hs +54/−0
- packer.cabal +2/−1
+ Data/Packer/IEEE754.hs view
@@ -0,0 +1,54 @@+-- |+-- Module : Data.Packer.IEEE754+-- License : BSD-style+-- Maintainer : Vincent Hanquez <vincent@snarc.org>+-- Stability : experimental+-- Portability : unknown+--+-- IEEE-754 parsing, lifted from the cereal package by Christian Marie <pingu@ponies.io>+--+-- Implementation is described here:+-- <http://stackoverflow.com/questions/6976684/converting-ieee-754-floating-point-in-haskell-word32-64-to-and-from-haskell-float/7002812#7002812>+--+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-}++module Data.Packer.IEEE754 (+ wordToDouble+ , wordToFloat+ , doubleToWord+ , floatToWord+) where++import Control.Monad.ST (runST, ST)++import Data.Array.ST (newArray, readArray, MArray, STUArray)+import Data.Word (Word32, Word64)++#if __GLASGOW_HASKELL__ >= 704+import Data.Array.Unsafe (castSTUArray)+#else+import Data.Array.ST (castSTUArray)+#endif++{-# INLINE wordToFloat #-}+wordToFloat :: Word32 -> Float+wordToFloat x = runST (cast x)++{-# INLINE floatToWord #-}+floatToWord :: Float -> Word32+floatToWord x = runST (cast x)++{-# INLINE wordToDouble #-}+wordToDouble :: Word64 -> Double+wordToDouble x = runST (cast x)++{-# INLINE doubleToWord #-}+doubleToWord :: Double -> Word64+doubleToWord x = runST (cast x)++{-# INLINE cast #-}+cast :: (MArray (STUArray s) a (ST s),+ MArray (STUArray s) b (ST s)) =>+ a -> ST s b+cast x = newArray (0 :: Int, 0) x >>= castSTUArray >>= flip readArray 0
packer.cabal view
@@ -1,5 +1,5 @@ Name: packer-Version: 0.1.4+Version: 0.1.5 Description: Fast byte serializer and unserializer License: BSD3 License-file: LICENSE@@ -22,6 +22,7 @@ Data.Packer.Unsafe Data.Packer.IO Other-modules: Data.Packer.Internal+ Data.Packer.IEEE754 Data.Packer.Endian Test-Suite test-packer