module Ptr.ByteString where import qualified Data.ByteString.Internal as B import qualified Ptr.Parse as C import qualified Ptr.Peek as D import qualified Ptr.Poking as A import Ptr.Prelude {-# INLINE poking #-} poking :: A.Poking -> B.ByteString poking :: Poking -> ByteString poking (A.Poking Int size Ptr Word8 -> IO () population) = Int -> (Ptr Word8 -> IO ()) -> ByteString B.unsafeCreate Int size Ptr Word8 -> IO () population {-# INLINE parse #-} parse :: B.ByteString -> C.Parse result -> (Int -> result) -> (Text -> result) -> result parse :: forall result. ByteString -> Parse result -> (Int -> result) -> (Text -> result) -> result parse (B.PS ForeignPtr Word8 fp Int offset Int length) (C.Parse Int -> Ptr Word8 -> forall result. (Int -> IO result) -> (Text -> IO result) -> (result -> Int -> Ptr Word8 -> IO result) -> IO result parseIO) Int -> result eoi Text -> result error = {-# SCC "parse" #-} IO result -> result forall a. IO a -> a unsafePerformIO (IO result -> result) -> IO result -> result forall a b. (a -> b) -> a -> b $ ForeignPtr Word8 -> (Ptr Word8 -> IO result) -> IO result forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b withForeignPtr ForeignPtr Word8 fp ((Ptr Word8 -> IO result) -> IO result) -> (Ptr Word8 -> IO result) -> IO result forall a b. (a -> b) -> a -> b $ \Ptr Word8 ptr -> Int -> Ptr Word8 -> forall result. (Int -> IO result) -> (Text -> IO result) -> (result -> Int -> Ptr Word8 -> IO result) -> IO result parseIO Int length (Ptr Word8 -> Int -> Ptr Word8 forall a b. Ptr a -> Int -> Ptr b plusPtr Ptr Word8 ptr Int offset) (result -> IO result forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (result -> IO result) -> (Int -> result) -> Int -> IO result forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Int -> result eoi) (result -> IO result forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (result -> IO result) -> (Text -> result) -> Text -> IO result forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Text -> result error) (\result result Int _ Ptr Word8 _ -> result -> IO result forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return result result) {-# INLINE peek #-} peek :: B.ByteString -> D.Peek result -> Maybe result peek :: forall result. ByteString -> Peek result -> Maybe result peek (B.PS ForeignPtr Word8 fp Int offset Int length) (D.Peek Int amount Ptr Word8 -> IO result io) = {-# SCC "peek" #-} if Int amount Int -> Int -> Bool forall a. Ord a => a -> a -> Bool <= Int length then result -> Maybe result forall a. a -> Maybe a Just (result -> Maybe result) -> result -> Maybe result forall a b. (a -> b) -> a -> b $ IO result -> result forall a. IO a -> a unsafePerformIO (IO result -> result) -> IO result -> result forall a b. (a -> b) -> a -> b $ ForeignPtr Word8 -> (Ptr Word8 -> IO result) -> IO result forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b withForeignPtr ForeignPtr Word8 fp ((Ptr Word8 -> IO result) -> IO result) -> (Ptr Word8 -> IO result) -> IO result forall a b. (a -> b) -> a -> b $ \Ptr Word8 ptr -> Ptr Word8 -> IO result io (Ptr Word8 -> Int -> Ptr Word8 forall a b. Ptr a -> Int -> Ptr b plusPtr Ptr Word8 ptr Int offset) else Maybe result forall a. Maybe a Nothing