System.OsString.Data.ByteString.Short.Internal

os-string-2.0.2.1: Library for manipulating Operating system strings.

Copyright | © 2022 Julian Ospald
License | MIT
Maintainer | Julian Ospald <hasufell@posteo.de>
Stability | experimental
Portability | portable
Safe Haskell | None
Language | Haskell2010

System.OsString.Data.ByteString.Short.Internal

Description

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 ()
- indexWord8Array :: BA -> Int -> Word8
- indexWord16Array :: BA -> Int -> Word16
- word16ToLE# :: Word16# -> Word16#
- word16FromLE# :: Word16# -> Word16#
- 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
- compareByteArraysOff :: BA -> Int -> BA -> Int -> Int -> Int

# Documentation

_nul :: Word16 #

isSpace :: Word16 -> Bool #

word16ToChar :: Word16 -> Char #

Total conversion to char.

create :: Int -> (forall s. MBA s -> ST s ()) -> ShortByteString #

asBA :: ShortByteString -> BA #

data BA #

Constructors

BA# ByteArray# |

data MBA s #

Constructors

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 #

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 #

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 #

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 #

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) #

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 #

moduleErrorMsg :: String -> String -> String #

packWord16 :: [Word16] -> ShortByteString #

packLenWord16 :: Int -> [Word16] -> ShortByteString #

unpackWord16 :: ShortByteString -> [Word16] #

packWord16Rev :: [Word16] -> ShortByteString #

packLenWord16Rev :: Int -> [Word16] -> ShortByteString #

writeWord16Array #

Arguments

:: MBA s |
-> Int | Word8 index (not Word16)
-> Word16 |
-> ST s () |

Encode Word16 as little-endian.

indexWord8Array #

Arguments

:: BA |
-> Int | Word8 index
-> Word8 |

indexWord16Array #

Arguments

:: BA |
-> Int | Word8 index (not Word16)
-> Word16 |

Decode Word16 from little-endian.

word16ToLE# :: Word16# -> Word16# #

word16FromLE# :: Word16# -> Word16# #

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) #

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 #

createAndTrim'' :: Int -> (forall s. MBA s -> MBA s -> ST s (Int, Int)) -> (ShortByteString, ShortByteString) #

findIndexOrLength :: (Word16 -> Bool) -> ShortByteString -> Int #

findFromEndUntil :: (Word16 -> Bool) -> ShortByteString -> Int #

Returns the length of the substring matching, not the index. If no match, returns 0.

assertEven :: ShortByteString -> ShortByteString #

errorEmptySBS :: HasCallStack => String -> a #

moduleError :: HasCallStack => String -> String -> a #

compareByteArraysOff #

Arguments

:: BA | array 1
-> Int | offset for array 1
-> BA | array 2
-> Int | offset for array 2
-> Int | length to compare
-> Int | like memcmp