text-2.1: src/Data/Text/Internal/Validate/Simd.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnliftedFFITypes #-}
-- | Validate that a byte sequence is UTF-8-encoded text. All of these
-- functions return zero when the byte sequence is not UTF-8-encoded text,
-- and they return an unspecified non-zero value when the byte sequence
-- is UTF-8-encoded text.
--
-- Variants are provided for both @ByteArray#@ and @Ptr@. Additionally,
-- variants are provided that use both the @safe@ and @unsafe@ FFI.
--
-- If compiling with SIMDUTF turned off, this module exports nothing.
module Data.Text.Internal.Validate.Simd
( c_is_valid_utf8_ptr_unsafe
, c_is_valid_utf8_ptr_safe
, c_is_valid_utf8_bytearray_unsafe
, c_is_valid_utf8_bytearray_safe
) where
import Data.Word (Word8)
import Foreign.C.Types (CSize(..),CInt(..))
import GHC.Exts (Ptr,ByteArray#)
foreign import ccall unsafe "_hs_text_is_valid_utf8" c_is_valid_utf8_ptr_unsafe
:: Ptr Word8 -- ^ Bytes
-> CSize -- ^ Length
-> IO CInt
foreign import ccall safe "_hs_text_is_valid_utf8" c_is_valid_utf8_ptr_safe
:: Ptr Word8 -- ^ Bytes
-> CSize -- ^ Length
-> IO CInt
foreign import ccall unsafe "_hs_text_is_valid_utf8_offset" c_is_valid_utf8_bytearray_unsafe
:: ByteArray# -- ^ Bytes
-> CSize -- ^ Offset into bytes
-> CSize -- ^ Length
-> IO CInt
foreign import ccall safe "_hs_text_is_valid_utf8_offset" c_is_valid_utf8_bytearray_safe
:: ByteArray# -- ^ Bytes
-> CSize -- ^ Offset into bytes
-> CSize -- ^ Length
-> IO CInt