-- This is the hash function for content addressing. module Database.VCache.Hash ( hash , hashVal ) where import qualified Data.Digest.Murmur3 as M3 import Data.ByteString (ByteString) import qualified Data.ByteString as BS import qualified Data.ByteString.Internal as BSI import Foreign.ForeignPtr import Database.LMDB.Raw (MDB_val(..)) hash :: ByteString -> ByteString hash = BS.take 8 . M3.asByteString . M3.hash hashVal :: MDB_val -> IO ByteString hashVal mv = do fp <- newForeignPtr_ (mv_data mv) -- no finalizer let bs = BSI.PS fp 0 (fromIntegral (mv_size mv)) return $! hash bs