on master help sign in
Fix build on i386_HOST_ARCH

Fixes #452

commit42fe1a1932468fe9951bd8a1b0e479d09bca40c0 authorJulian Ospald <hasufell@posteo.de> dateSat 21 Mar 2020, 09:44 (7 years ago) parentc5d0871
3 files changed+22−16
examples/WordClassifier.hs+3−3 src/Streamly/FileSystem/IOVec.hsc+11−2 src/Streamly/Internal/Data/Fold.hs+8−11
examples/WordClassifier.hs+3−3
@@ -27,9 +27,9 @@ import qualified Streamly.Prelude as S
2727import System.Environment (getArgs)
2828
2929instance (Enum a, Storable a) => Hashable (A.Array a) where
30− hash arr = runIdentity $ IUF.fold A.read IFL.rollingHash arr
31− hashWithSalt salt arr = runIdentity $
32− IUF.fold A.read (IFL.rollingHashWithSalt salt) arr
30+ hash arr = fromIntegral $ runIdentity $ IUF.fold A.read IFL.rollingHash arr
31+ hashWithSalt salt arr = fromIntegral $ runIdentity $
32+ IUF.fold A.read (IFL.rollingHashWithSalt $ fromIntegral salt) arr
3333
3434{-# INLINE toLower #-}
3535toLower :: Char -> Char
src/Streamly/FileSystem/IOVec.hsc+11−2
@@ -22,7 +22,12 @@ module Streamly.FileSystem.IOVec
2222 )
2323where
2424
25−import Data.Word (Word8, Word64)
25+import Data.Word (Word8)
26+#if defined(i386_HOST_ARCH)
27+import Data.Word (Word32)
28+#else
29+import Data.Word (Word64)
30+#endif
2631import Foreign.C.Types (CInt(..))
2732import Foreign.Ptr (Ptr)
2833import System.Posix.Types (CSsize(..))
@@ -36,7 +41,11 @@ import Foreign.Storable (Storable(..))
3641
3742data IOVec = IOVec
3843 { iovBase :: {-# UNPACK #-} !(Ptr Word8)
44+#if defined(i386_HOST_ARCH)
45+ , iovLen :: {-# UNPACK #-} !Word32
46+#else
3947 , iovLen :: {-# UNPACK #-} !Word64
48+#endif
4049 } deriving (Eq, Show)
4150
4251#if !defined(mingw32_HOST_OS)
@@ -56,7 +65,7 @@ instance Storable IOVec where
5665 return $ IOVec base len
5766 poke ptr vec = do
5867 let base = iovBase vec
59− len :: #{type size_t} = iovLen vec
68+ len :: #{type size_t} = iovLen vec
6069 #{poke struct iovec, iov_base} ptr base
6170 #{poke struct iovec, iov_len} ptr len
6271#endif
src/Streamly/Internal/Data/Fold.hs+8−11
@@ -211,6 +211,7 @@ where
211211import Control.Monad (void)
212212import Control.Monad.IO.Class (MonadIO(..))
213213import Data.Functor.Identity (Identity(..))
214+import Data.Int (Int64)
214215import Data.Map.Strict (Map)
215216
216217import Prelude
@@ -556,22 +557,18 @@ stdDev = sqrt variance
556557--
557558-- @since 0.7.0
558559{-# INLINABLE rollingHashWithSalt #-}
559−rollingHashWithSalt :: (Monad m, Enum a) => Int -> Fold m a Int
560+rollingHashWithSalt :: (Monad m, Enum a) => Int64 -> Fold m a Int64
560561rollingHashWithSalt salt = Fold step initial extract
561562 where
562− k = 2891336453
563+ k = 2891336453 :: Int64
563564 initial = return salt
564− step cksum a = return $ cksum * k + fromEnum a
565+ step cksum a = return $ cksum * k + fromIntegral (fromEnum a)
565566 extract = return
566567
567568-- | A default salt used in the implementation of 'rollingHash'.
568569{-# INLINE defaultSalt #-}
569−defaultSalt :: Int
570−#if WORD_SIZE_IN_BITS == 64
571−defaultSalt = 0xdc36d1615b7400a4
572−#else
573−defaultSalt = 0x087fc72c
574−#endif
570+defaultSalt :: Int64
571+defaultSalt = -2578643520546668380
575572
576573-- | Compute an 'Int' sized polynomial rolling hash of a stream.
577574--
@@ -579,7 +576,7 @@ defaultSalt = 0x087fc72c
579576--
580577-- @since 0.7.0
581578{-# INLINABLE rollingHash #-}
582−rollingHash :: (Monad m, Enum a) => Fold m a Int
579+rollingHash :: (Monad m, Enum a) => Fold m a Int64
583580rollingHash = rollingHashWithSalt defaultSalt
584581
585582-- | Compute an 'Int' sized polynomial rolling hash of the first n elements of
@@ -587,7 +584,7 @@ rollingHash = rollingHashWithSalt defaultSalt
587584--
588585-- > rollingHashFirstN = ltake n rollingHash
589586{-# INLINABLE rollingHashFirstN #-}
590−rollingHashFirstN :: (Monad m, Enum a) => Int -> Fold m a Int
587+rollingHashFirstN :: (Monad m, Enum a) => Int -> Fold m a Int64
591588rollingHashFirstN n = ltake n rollingHash
592589
593590------------------------------------------------------------------------------