A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://hackage.haskell.org/package/ghc-prim-0.13.0/docs/src/GHC.CString.html below:

{-# LANGUAGE MagicHash, NoImplicitPrelude, BangPatterns, UnliftedFFITypes #-}
















module GHC.CString (
        
        unpackCString#, unpackAppendCString#, unpackFoldrCString#,
        cstringLength#,

        
        unpackCStringUtf8#, unpackAppendCStringUtf8#, unpackFoldrCStringUtf8#,

        
        unpackNBytes#,
    ) where

import GHC.Types hiding (One)
import GHC.Prim


















unpackCString# :: Addr# -> [Char]
{-# NOINLINE CONLIKE unpackCString# #-}
unpackCString# :: Addr# -> [Char]
unpackCString# Addr#
addr
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`eqChar#` Char#
'\0'#) = []
    | Bool
True                         = Char# -> Char
C# Char#
ch Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: Addr# -> [Char]
unpackCString# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#)
      where
        
        !ch :: Char#
ch = Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
0#


unpackAppendCString# :: Addr# -> [Char] -> [Char]
{-# NOINLINE unpackAppendCString# #-}
     
unpackAppendCString# :: Addr# -> [Char] -> [Char]
unpackAppendCString# Addr#
addr [Char]
rest
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`eqChar#` Char#
'\0'#) = [Char]
rest
    | Bool
True                         = Char# -> Char
C# Char#
ch Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: Addr# -> [Char] -> [Char]
unpackAppendCString# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#) [Char]
rest
      where
        
        !ch :: Char#
ch = Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
0#




{-# NOINLINE[0] unpackFoldrCString# #-}
unpackFoldrCString# :: Addr# -> (Char -> a -> a) -> a -> a
unpackFoldrCString# :: forall a. Addr# -> (Char -> a -> a) -> a -> a
unpackFoldrCString# Addr#
str Char -> a -> a
f a
z_init = Addr# -> a -> a
go Addr#
str a
z_init
  where
    go :: Addr# -> a -> a
go Addr#
addr a
z
      | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`eqChar#` Char#
'\0'#) = a
z
      | Bool
True                         = Char# -> Char
C# Char#
ch Char -> a -> a
`f` Addr# -> a -> a
go (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#) a
z
      where
        
        !ch :: Char#
ch = Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
0#



unpackCStringUtf8# :: Addr# -> [Char]
{-# NOINLINE CONLIKE unpackCStringUtf8# #-}
unpackCStringUtf8# :: Addr# -> [Char]
unpackCStringUtf8# Addr#
addr
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`eqChar#` Char#
'\0'#  ) = []
    | Bool
True =
        let !byte_count :: Bytes
byte_count = Char# -> Bytes
getByteCount Char#
ch
            !utf_ch :: Char#
utf_ch = Bytes -> Char# -> Addr# -> Char#
unpackUtf8Char# Bytes
byte_count Char#
ch Addr#
addr
            !addr' :: Addr#
addr' = Addr#
addr Addr# -> Bytes -> Addr#
`plusBytes` Bytes
byte_count
        in  Char# -> Char
C# Char#
utf_ch Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: Addr# -> [Char]
unpackCStringUtf8# Addr#
addr'
      where
        
        !ch :: Char#
ch = Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
0#

unpackAppendCStringUtf8# :: Addr# -> [Char] -> [Char]
{-# NOINLINE unpackAppendCStringUtf8# #-}
     
unpackAppendCStringUtf8# :: Addr# -> [Char] -> [Char]
unpackAppendCStringUtf8# Addr#
addr [Char]
rest
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`eqChar#` Char#
'\0'#) = [Char]
rest
    | Bool
True =
        let !byte_count :: Bytes
byte_count = Char# -> Bytes
getByteCount Char#
ch
            !utf_ch :: Char#
utf_ch = Bytes -> Char# -> Addr# -> Char#
unpackUtf8Char# Bytes
byte_count Char#
ch Addr#
addr
            !addr' :: Addr#
addr' = (Addr#
addr Addr# -> Bytes -> Addr#
`plusBytes` Bytes
byte_count)
        in  Char# -> Char
C# Char#
utf_ch Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: Addr# -> [Char] -> [Char]
unpackAppendCStringUtf8# Addr#
addr' [Char]
rest
      where
        
        !ch :: Char#
ch = Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
0#


{-# NOINLINE[0] unpackFoldrCStringUtf8# #-}
unpackFoldrCStringUtf8# :: Addr# -> (Char -> a -> a) -> a -> a
unpackFoldrCStringUtf8# :: forall a. Addr# -> (Char -> a -> a) -> a -> a
unpackFoldrCStringUtf8# Addr#
addr_init Char -> a -> a
f a
z_init
  = Addr# -> a -> a
go Addr#
addr_init a
z_init
  where
    go :: Addr# -> a -> a
go Addr#
addr a
z
      | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`eqChar#` Char#
'\0'#) = a
z
      | Bool
True =
          let !byte_count :: Bytes
byte_count = Char# -> Bytes
getByteCount Char#
ch
              !utf_ch :: Char#
utf_ch = Bytes -> Char# -> Addr# -> Char#
unpackUtf8Char# Bytes
byte_count Char#
ch Addr#
addr
              !addr' :: Addr#
addr' = (Addr#
addr Addr# -> Bytes -> Addr#
`plusBytes` Bytes
byte_count)
          in Char# -> Char
C# Char#
utf_ch Char -> a -> a
`f` Addr# -> a -> a
go Addr#
addr' a
z
      where
        
        !ch :: Char#
ch = Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
0#



unpackNBytes# :: Addr# -> Int# -> [Char]
{-# NOINLINE unpackNBytes# #-}
unpackNBytes# :: Addr# -> Int# -> [Char]
unpackNBytes# Addr#
_addr Int#
0#   = []
unpackNBytes#  Addr#
addr Int#
len# = [Char] -> Int# -> [Char]
unpack [] (Int#
len# Int# -> Int# -> Int#
-# Int#
1#)
    where
     unpack :: [Char] -> Int# -> [Char]
     unpack :: [Char] -> Int# -> [Char]
unpack [Char]
acc Int#
i#
      | Int# -> Bool
isTrue# (Int#
i# Int# -> Int# -> Int#
<# Int#
0#)  = [Char]
acc
      | Bool
True                =
         case Addr# -> Int# -> Char#
indexCharOffAddr# Addr#
addr Int#
i# of
            Char#
ch -> [Char] -> Int# -> [Char]
unpack (Char# -> Char
C# Char#
ch Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: [Char]
acc) (Int#
i# Int# -> Int# -> Int#
-# Int#
1#)





foreign import ccall unsafe "strlen" c_strlen :: Addr# -> Int#






cstringLength# :: Addr# -> Int#
{-# INLINE[0] cstringLength# #-}
cstringLength# :: Addr# -> Int#
cstringLength# = Addr# -> Int#
c_strlen




















data Bytes = One | Two | Three | Four

{-# INLINE getByteCount #-}
getByteCount :: Char# -> Bytes
getByteCount :: Char# -> Bytes
getByteCount Char#
ch
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`leChar#` Char#
'\x7F'#) = Bytes
One
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`leChar#` Char#
'\xDF'#) = Bytes
Two
    | Int# -> Bool
isTrue# (Char#
ch Char# -> Char# -> Int#
`leChar#` Char#
'\xEF'#) = Bytes
Three
    | Bool
True                           = Bytes
Four

{-# INLINE plusBytes #-}
plusBytes :: Addr# -> Bytes -> Addr#
plusBytes :: Addr# -> Bytes -> Addr#
plusBytes Addr#
addr Bytes
bytes =
  case Bytes
bytes of
    Bytes
One   -> Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#
    Bytes
Two   -> Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
2#
    Bytes
Three -> Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
3#
    Bytes
Four  -> Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
4#










{-# INLINE unpackUtf8Char# #-}
unpackUtf8Char# :: Bytes -> Char# -> Addr# -> Char#
unpackUtf8Char# :: Bytes -> Char# -> Addr# -> Char#
unpackUtf8Char# Bytes
bytes Char#
ch Addr#
addr =
  case Bytes
bytes of
    Bytes
One -> Char#
ch
    Bytes
Two ->   (Int# -> Char#
chr# (((Char# -> Int#
ord# Char#
ch                                           Int# -> Int# -> Int#
-# Int#
0xC0#) Int# -> Int# -> Int#
`uncheckedIShiftL#`  Int#
6#) Int# -> Int# -> Int#
+#
                     (Char# -> Int#
ord# (Addr# -> Int# -> Char#
indexCharOffAddr# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#) Int#
0#) Int# -> Int# -> Int#
-# Int#
0x80#)))
    Bytes
Three -> (Int# -> Char#
chr# (((Char# -> Int#
ord# Char#
ch                                           Int# -> Int# -> Int#
-# Int#
0xE0#) Int# -> Int# -> Int#
`uncheckedIShiftL#` Int#
12#) Int# -> Int# -> Int#
+#
                    ((Char# -> Int#
ord# (Addr# -> Int# -> Char#
indexCharOffAddr# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#) Int#
0#) Int# -> Int# -> Int#
-# Int#
0x80#) Int# -> Int# -> Int#
`uncheckedIShiftL#`  Int#
6#) Int# -> Int# -> Int#
+#
                     (Char# -> Int#
ord# (Addr# -> Int# -> Char#
indexCharOffAddr# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
2#) Int#
0#) Int# -> Int# -> Int#
-# Int#
0x80#)))
    Bytes
Four ->  (Int# -> Char#
chr# (((Char# -> Int#
ord# Char#
ch                                           Int# -> Int# -> Int#
-# Int#
0xF0#) Int# -> Int# -> Int#
`uncheckedIShiftL#` Int#
18#) Int# -> Int# -> Int#
+#
                    ((Char# -> Int#
ord# (Addr# -> Int# -> Char#
indexCharOffAddr# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
1#) Int#
0#) Int# -> Int# -> Int#
-# Int#
0x80#) Int# -> Int# -> Int#
`uncheckedIShiftL#` Int#
12#) Int# -> Int# -> Int#
+#
                    ((Char# -> Int#
ord# (Addr# -> Int# -> Char#
indexCharOffAddr# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
2#) Int#
0#) Int# -> Int# -> Int#
-# Int#
0x80#) Int# -> Int# -> Int#
`uncheckedIShiftL#`  Int#
6#) Int# -> Int# -> Int#
+#
                     (Char# -> Int#
ord# (Addr# -> Int# -> Char#
indexCharOffAddr# (Addr#
addr Addr# -> Int# -> Addr#
`plusAddr#` Int#
3#) Int#
0#) Int# -> Int# -> Int#
-# Int#
0x80#)))

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4