X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2FPrelPack.lhs;h=65fed7d97e7d86d8aae7f9656b44c8bbfe4bdb8e;hb=ea138284b7343bb1810cfbd0284a608dc57f7d46;hp=934ffa7b4bd49e651dd9bed253c3cc6a1c7498ba;hpb=5ca77490a603e0175bb717343884533ad8de017d;p=ghc-hetmet.git diff --git a/ghc/lib/std/PrelPack.lhs b/ghc/lib/std/PrelPack.lhs index 934ffa7..65fed7d 100644 --- a/ghc/lib/std/PrelPack.lhs +++ b/ghc/lib/std/PrelPack.lhs @@ -1,6 +1,9 @@ +% ------------------------------------------------------------------------------ +% $Id: PrelPack.lhs,v 1.16 2001/01/11 17:25:57 simonmar Exp $ % -% (c) The GRASP/AQUA Project, Glasgow University, 1997 +% (c) The University of Glasgow, 1997-2000 % + \section[PrelPack]{Packing/unpacking bytes} This module provides a small set of low-level functions for packing @@ -22,11 +25,12 @@ module PrelPack packStringST, -- :: [Char] -> ST s (ByteArray Int) packNBytesST, -- :: Int -> [Char] -> ST s (ByteArray Int) - unpackCString, -- :: Addr -> [Char] - unpackCStringST, -- :: Addr -> ST s [Char] - unpackNBytes, -- :: Addr -> Int -> [Char] - unpackNBytesST, -- :: Addr -> Int -> ST s [Char] - unpackNBytesAccST, -- :: Addr -> Int -> [Char] -> ST s [Char] + unpackCString, -- :: Ptr a -> [Char] + unpackCStringST, -- :: Ptr a -> ST s [Char] + unpackNBytes, -- :: Ptr a -> Int -> [Char] + unpackNBytesST, -- :: Ptr a -> Int -> ST s [Char] + unpackNBytesAccST, -- :: Ptr a -> Int -> [Char] -> ST s [Char] + unpackNBytesAccST#,-- :: Ptr a -> Int -> [Char] -> ST s [Char] unpackCString#, -- :: Addr# -> [Char] ** unpackNBytes#, -- :: Addr# -> Int# -> [Char] ** unpackNBytesST#, -- :: Addr# -> Int# -> ST s [Char] @@ -52,15 +56,14 @@ import {-# SOURCE #-} PrelErr ( error ) import PrelList ( length ) import PrelST import PrelNum -import PrelArr import PrelByteArr -import PrelAddr +import PrelPtr \end{code} %********************************************************* %* * -\subsection{Unpacking Addrs} +\subsection{Unpacking Ptrs} %* * %********************************************************* @@ -68,17 +71,17 @@ Primitives for converting Addrs pointing to external sequence of bytes into a list of @Char@s: \begin{code} -unpackCString :: Addr -> [Char] -unpackCString a@(A# addr) - | a == nullAddr = [] +unpackCString :: Ptr a -> [Char] +unpackCString a@(Ptr addr) + | a == nullPtr = [] | otherwise = unpackCString# addr -unpackNBytes :: Addr -> Int -> [Char] -unpackNBytes (A# addr) (I# l) = unpackNBytes# addr l +unpackNBytes :: Ptr a -> Int -> [Char] +unpackNBytes (Ptr addr) (I# l) = unpackNBytes# addr l -unpackCStringST :: Addr{- ptr. to NUL terminated string-} -> ST s [Char] -unpackCStringST a@(A# addr) - | a == nullAddr = return [] +unpackCStringST :: Ptr a{- ptr. to NUL terminated string-} -> ST s [Char] +unpackCStringST a@(Ptr addr) + | a == nullPtr = return [] | otherwise = unpack 0# where unpack nh @@ -89,11 +92,11 @@ unpackCStringST a@(A# addr) where ch = indexCharOffAddr# addr nh -unpackNBytesST :: Addr -> Int -> ST s [Char] -unpackNBytesST (A# addr) (I# l) = unpackNBytesAccST# addr l [] +unpackNBytesST :: Ptr a -> Int -> ST s [Char] +unpackNBytesST (Ptr addr) (I# l) = unpackNBytesAccST# addr l [] -unpackNBytesAccST :: Addr -> Int -> [Char] -> ST s [Char] -unpackNBytesAccST (A# addr) (I# l) rest = unpackNBytesAccST# addr l rest +unpackNBytesAccST :: Ptr a -> Int -> [Char] -> ST s [Char] +unpackNBytesAccST (Ptr addr) (I# l) rest = unpackNBytesAccST# addr l rest unpackNBytesST# :: Addr# -> Int# -> ST s [Char] unpackNBytesST# addr# l# = unpackNBytesAccST# addr# l# [] @@ -210,7 +213,7 @@ write_ps_array :: MutableByteArray s Int -> Int# -> Char# -> ST s () freeze_ps_array :: MutableByteArray s Int -> Int# -> ST s (ByteArray Int) new_ps_array size = ST $ \ s -> - case (newCharArray# size s) of { (# s2#, barr# #) -> + case (newByteArray# size s) of { (# s2#, barr# #) -> (# s2#, MutableByteArray bot bot barr# #) } where bot = error "new_ps_array"