Stability | experimental |
---|---|
Maintainer | Bas van Dijk <v.dijk.bas@gmail.com> |
A module containing semi-public ByteString
internals. This exposes the
ByteString
representation and low level construction functions. As such
all the functions in this module are unsafe. The API is also not stable.
Where possible application should instead use the functions from the normal public interface modules, such as Data.Vector.Storable.ByteString.Unsafe. Packages that extend the ByteString system at a low level will need to use this module.
- type ByteString = Vector Word8
- create :: Int -> (Ptr Word8 -> IO ()) -> IO ByteString
- createAndTrim :: Int -> (Ptr Word8 -> IO Int) -> IO ByteString
- createAndTrim' :: Int -> (Ptr Word8 -> IO (Int, Int, a)) -> IO (ByteString, a)
- unsafeCreate :: Int -> (Ptr Word8 -> IO ()) -> ByteString
- mallocByteString :: Int -> IO (ForeignPtr a)
- fromForeignPtr :: ForeignPtr Word8 -> Int -> Int -> ByteString
- toForeignPtr :: ByteString -> (ForeignPtr Word8, Int, Int)
- inlinePerformIO :: IO a -> a
- nullForeignPtr :: ForeignPtr Word8
- c_strlen :: CString -> IO CSize
- c_free_finalizer :: FunPtr (Ptr Word8 -> IO ())
- memchr :: Ptr Word8 -> Word8 -> CSize -> IO (Ptr Word8)
- memcmp :: Ptr Word8 -> Ptr Word8 -> CSize -> IO CInt
- memcpy :: Ptr Word8 -> Ptr Word8 -> CSize -> IO ()
- memset :: Ptr Word8 -> Word8 -> CSize -> IO (Ptr Word8)
- c_reverse :: Ptr Word8 -> Ptr Word8 -> CULong -> IO ()
- c_intersperse :: Ptr Word8 -> Ptr Word8 -> CULong -> Word8 -> IO ()
- c_maximum :: Ptr Word8 -> CULong -> IO Word8
- c_minimum :: Ptr Word8 -> CULong -> IO Word8
- c_count :: Ptr Word8 -> CULong -> Word8 -> IO CULong
- w2c :: Word8 -> Char
- c2w :: Char -> Word8
- isSpaceWord8 :: Word8 -> Bool
- isSpaceChar8 :: Char -> Bool
The ByteString
type and representation
type ByteString = Vector Word8Source
A space-efficient representation of a Word8
vector, supporting many
efficient operations. A ByteString
contains 8-bit characters only.
Low level introduction and elimination
create :: Int -> (Ptr Word8 -> IO ()) -> IO ByteStringSource
Create ByteString of size l
and use action f
to fill it's contents.
createAndTrim :: Int -> (Ptr Word8 -> IO Int) -> IO ByteStringSource
Given the maximum size needed and a function to make the contents
of a ByteString, createAndTrim makes the ByteString
. The generating
function is required to return the actual final size (<= the maximum
size), and the resulting byte array is realloced to this size.
createAndTrim is the main mechanism for creating custom, efficient ByteString functions, using Haskell or C functions to fill the space.
createAndTrim' :: Int -> (Ptr Word8 -> IO (Int, Int, a)) -> IO (ByteString, a)Source
unsafeCreate :: Int -> (Ptr Word8 -> IO ()) -> ByteStringSource
A way of creating ByteStrings outside the IO monad. The Int
argument gives the final size of the ByteString. Unlike
createAndTrim
the ByteString is not reallocated if the final size
is less than the estimated size.
mallocByteString :: Int -> IO (ForeignPtr a)Source
Wrapper of mallocForeignPtrBytes
with faster implementation for GHC.
Conversion to and from ForeignPtrs
:: ForeignPtr Word8 | |
-> Int | Offset |
-> Int | Length |
-> ByteString |
O(1) Build a ByteString from a ForeignPtr.
If you do not need the offset parameter then you do should be using
Data.Vector.Storable.ByteString.Unsafe.unsafePackCStringLen
or
Data.Vector.Storable.ByteString.Unsafe.unsafePackCStringFinalizer
instead.
:: ByteString | |
-> (ForeignPtr Word8, Int, Int) | (ptr, offset, length) |
O(1) Deconstruct a ForeignPtr from a ByteString
Utilities
inlinePerformIO :: IO a -> aSource
Just like unsafePerformIO, but we inline it. Big performance gains as
it exposes lots of things to further inlining. Very unsafe. In
particular, you should do no memory allocation inside an
inlinePerformIO
block. On Hugs this is just unsafePerformIO
.
nullForeignPtr :: ForeignPtr Word8Source
The 0 pointer. Used to indicate the empty Bytestring.
Standard C Functions
cbits functions
Chars
isSpaceWord8 :: Word8 -> BoolSource
Selects words corresponding to white-space characters in the Latin-1 range ordered by frequency.
isSpaceChar8 :: Char -> BoolSource
Selects white-space characters in the Latin-1 range