module Data.ByteString.Lazy.Builder.BasicEncoding.Internal.Floating
(
encodeFloatViaWord32F
, encodeDoubleViaWord64F
) where
import Foreign
import Data.ByteString.Lazy.Builder.BasicEncoding.Internal
encodeFloatViaWord32F :: FixedEncoding Word32 -> FixedEncoding Float
encodeFloatViaWord32F w32fe
| size w32fe < sizeOf (undefined :: Float) =
error $ "encodeFloatViaWord32F: encoding not wide enough"
| otherwise = fixedEncoding (size w32fe) $ \x op -> do
poke (castPtr op) x
x' <- peek (castPtr op)
runF w32fe x' op
encodeDoubleViaWord64F :: FixedEncoding Word64 -> FixedEncoding Double
encodeDoubleViaWord64F w64fe
| size w64fe < sizeOf (undefined :: Float) =
error $ "encodeDoubleViaWord64F: encoding not wide enough"
| otherwise = fixedEncoding (size w64fe) $ \x op -> do
poke (castPtr op) x
x' <- peek (castPtr op)
runF w64fe x' op