Skip to content

Instantly share code, notes, and snippets.

@dminuoso

dminuoso/f.hs Secret

Created October 17, 2022 07:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dminuoso/a888cc62b0d5d862f5db157e8519e2dc to your computer and use it in GitHub Desktop.
Save dminuoso/a888cc62b0d5d862f5db157e8519e2dc to your computer and use it in GitHub Desktop.
bytestring :: BS.ByteString -> Parser e ()
bytestring (BS.PS (ForeignPtr fp con) _ len) = go64 fp 0#
where
go64 :: Addr# -> Int# -> Parser e ()
go64 addr n | tagToEnum# (n <# w64s)
= do scan64# (W# (indexWord64OffAddr# addr 0#))
go64 (addr `plusAddr#` 8#) (n -# 1#)
| otherwise = go32 addr w32s
go32 addr 1# = scan32# (W32# (indexWord32OffAddr# addr 0#)) >> go16 (addr `plusAddr#` 4#) r32
go32 addr 0# = go16 addr w16s
go32 _ _ = empty
go16 addr 1# = scan16# (W16# (indexWord16OffAddr# addr 0#)) >> go8 (addr `plusAddr#` 2#) w8s
go16 addr 0# = go8 addr w8s
go16 _ _ = empty
go8 addr 1# = scan8# (W8# (indexWord8OffAddr# addr 0#))
go8 addr 0# = pure ()
go8 _ _ = empty
!(I# w64s,I# r64) = len `quotRem` 8
!(I# w32s,I# r32) = I# r64 `quotRem` 4
!(I# w16s,I# w8s) = I# r32 `quotRem` 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment