Copyright | © 2022 Julian Ospald |
---|---|
License | MIT |
Maintainer | Julian Ospald <hasufell@posteo.de> |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Internal low-level utilities mostly for Word16
,
such as byte-array operations and other stuff not meant to be exported from Word16 module.
Synopsis
- _nul :: Word16
- isSpace :: Word16 -> Bool
- word16ToChar :: Word16 -> Char
- create :: Int -> (forall s. MBA s -> ST s ()) -> ShortByteString
- asBA :: ShortByteString -> BA
- data BA = BA# ByteArray#
- data MBA s = MBA# (MutableByteArray# s)
- newPinnedByteArray :: Int -> ST s (MBA s)
- newByteArray :: Int -> ST s (MBA s)
- copyByteArray :: BA -> Int -> MBA s -> Int -> Int -> ST s ()
- unsafeFreezeByteArray :: MBA s -> ST s BA
- copyAddrToByteArray :: Ptr a -> MBA RealWorld -> Int -> Int -> ST RealWorld ()
- packCWString :: Ptr Word16 -> IO ShortByteString
- packCWStringLen :: (Ptr Word16, Int) -> IO ShortByteString
- useAsCWString :: ShortByteString -> (Ptr Word16 -> IO a) -> IO a
- useAsCWStringLen :: ShortByteString -> ((Ptr Word16, Int) -> IO a) -> IO a
- newCWString :: ShortByteString -> IO (Ptr Word16)
- moduleErrorIO :: String -> String -> IO a
- moduleErrorMsg :: String -> String -> String
- packWord16 :: [Word16] -> ShortByteString
- packLenWord16 :: Int -> [Word16] -> ShortByteString
- unpackWord16 :: ShortByteString -> [Word16]
- packWord16Rev :: [Word16] -> ShortByteString
- packLenWord16Rev :: Int -> [Word16] -> ShortByteString
- writeWord16Array :: MBA s -> Int -> Word16 -> ST s ()
- indexWord16Array :: BA -> Int -> Word16
- encodeWord16LE# :: Word# -> (# Word#, Word# #)
- decodeWord16LE# :: (# Word#, Word# #) -> Word#
- setByteArray :: MBA s -> Int -> Int -> Int -> ST s ()
- copyMutableByteArray :: MBA s -> Int -> MBA s -> Int -> Int -> ST s ()
- createAndTrim :: Int -> (forall s. MBA s -> ST s (Int, a)) -> (ShortByteString, a)
- createAndTrim' :: Int -> (forall s. MBA s -> ST s Int) -> ShortByteString
- createAndTrim'' :: Int -> (forall s. MBA s -> MBA s -> ST s (Int, Int)) -> (ShortByteString, ShortByteString)
- findIndexOrLength :: (Word16 -> Bool) -> ShortByteString -> Int
- findFromEndUntil :: (Word16 -> Bool) -> ShortByteString -> Int
- assertEven :: ShortByteString -> ShortByteString
- errorEmptySBS :: HasCallStack => String -> a
- moduleError :: HasCallStack => String -> String -> a
Documentation
word16ToChar :: Word16 -> Char Source #
Total conversion to char.
create :: Int -> (forall s. MBA s -> ST s ()) -> ShortByteString Source #
asBA :: ShortByteString -> BA Source #
newPinnedByteArray :: Int -> ST s (MBA s) Source #
newByteArray :: Int -> ST s (MBA s) Source #
copyByteArray :: BA -> Int -> MBA s -> Int -> Int -> ST s () Source #
unsafeFreezeByteArray :: MBA s -> ST s BA Source #
copyAddrToByteArray :: Ptr a -> MBA RealWorld -> Int -> Int -> ST RealWorld () Source #
packCWString :: Ptr Word16 -> IO ShortByteString Source #
O(n). Construct a new ShortByteString
from a CWString
. The
resulting ShortByteString
is an immutable copy of the original
CWString
, and is managed on the Haskell heap. The original
CWString
must be null terminated.
Since: 0.10.10.0
packCWStringLen :: (Ptr Word16, Int) -> IO ShortByteString Source #
O(n). Construct a new ShortByteString
from a CWStringLen
. The
resulting ShortByteString
is an immutable copy of the original CWStringLen
.
The ShortByteString
is a normal Haskell value and will be managed on the
Haskell heap.
Since: 0.10.10.0
useAsCWString :: ShortByteString -> (Ptr Word16 -> IO a) -> IO a Source #
O(n) construction. Use a ShortByteString
with a function requiring a
null-terminated CWString
. The CWString
is a copy and will be freed
automatically; it must not be stored or used after the
subcomputation finishes.
Since: 0.10.10.0
useAsCWStringLen :: ShortByteString -> ((Ptr Word16, Int) -> IO a) -> IO a Source #
O(n) construction. Use a ShortByteString
with a function requiring a CWStringLen
.
As for useAsCWString
this function makes a copy of the original ShortByteString
.
It must not be stored or used after the subcomputation finishes.
Since: 0.10.10.0
newCWString :: ShortByteString -> IO (Ptr Word16) Source #
O(n) construction. Use a ShortByteString
with a function requiring a CWStringLen
.
As for useAsCWString
this function makes a copy of the original ShortByteString
.
It must not be stored or used after the subcomputation finishes.
Since: 0.10.10.0
moduleErrorIO :: String -> String -> IO a Source #
moduleErrorMsg :: String -> String -> String Source #
packWord16 :: [Word16] -> ShortByteString Source #
packLenWord16 :: Int -> [Word16] -> ShortByteString Source #
unpackWord16 :: ShortByteString -> [Word16] Source #
packWord16Rev :: [Word16] -> ShortByteString Source #
packLenWord16Rev :: Int -> [Word16] -> ShortByteString Source #
:: MBA s | |
-> Int | Word8 index (not Word16) |
-> Word16 | |
-> ST s () |
This isn't strictly Word16 array write. Instead it's two consecutive Word8 array writes to avoid endianness issues due to primops doing automatic alignment based on host platform. We want to always write LE to the byte array.
:: BA | |
-> Int | Word8 index (not Word16) |
-> Word16 |
This isn't strictly Word16 array read. Instead it's two Word8 array reads to avoid endianness issues due to primops doing automatic alignment based on host platform. We expect the byte array to be LE always.
:: Word# | Word16 |
-> (# Word#, Word# #) | Word8 (LSB, MSB) |
:: (# Word#, Word# #) | Word8 (LSB, MSB) |
-> Word# | Word16 |
setByteArray :: MBA s -> Int -> Int -> Int -> ST s () Source #
copyMutableByteArray :: MBA s -> Int -> MBA s -> Int -> Int -> ST s () Source #
createAndTrim :: Int -> (forall s. MBA s -> ST s (Int, a)) -> (ShortByteString, a) Source #
Given the maximum size needed and a function to make the contents
of a ShortByteString, createAndTrim makes the ShortByteString
.
The generating function is required to return the actual final size
(<= the maximum size) and the result value. The resulting byte array
is realloced to this size.
createAndTrim' :: Int -> (forall s. MBA s -> ST s Int) -> ShortByteString Source #
createAndTrim'' :: Int -> (forall s. MBA s -> MBA s -> ST s (Int, Int)) -> (ShortByteString, ShortByteString) Source #
findIndexOrLength :: (Word16 -> Bool) -> ShortByteString -> Int Source #
findFromEndUntil :: (Word16 -> Bool) -> ShortByteString -> Int Source #
Returns the length of the substring matching, not the index. If no match, returns 0.
errorEmptySBS :: HasCallStack => String -> a Source #
moduleError :: HasCallStack => String -> String -> a Source #