bytestring-lexing-0.3.0: src/Data/ByteString/Lex/Internal.hs
{-# OPTIONS_GHC -Wall -fwarn-tabs #-}
{-# LANGUAGE ForeignFunctionInterface #-}
----------------------------------------------------------------
-- 2012.01.25
-- |
-- Module : Data.ByteString.Lex.Internal
-- Copyright : Copyright (c) 2008--2011 Don Stewart.
-- License : BSD2/MIT
-- Maintainer : wren@community.haskell.org
-- Stability : stable
-- Portability : Haskell98 + FFI
--
-- Efficiently parse floating point literals from a 'ByteString'.
----------------------------------------------------------------
module Data.ByteString.Lex.Internal (strtod, c_strtod) where
import qualified Data.ByteString.Internal as BSI (inlinePerformIO)
import qualified Data.ByteString as BS
import Foreign.C.String (CString)
import Foreign.Ptr (Ptr, nullPtr)
----------------------------------------------------------------
-- | Safe, minimal copy of substring identified by Alex.
strtod :: BS.ByteString -> Double
{-# INLINE strtod #-}
strtod b =
BSI.inlinePerformIO . BS.useAsCString b $ \ptr -> c_strtod ptr nullPtr
foreign import ccall unsafe "stdlib.h strtod"
c_strtod :: CString -> Ptr CString -> IO Double
----------------------------------------------------------------
----------------------------------------------------------- fin.