{-|
Module      : ChibiHash
Description : A simple and fast 64-bit hash function
Copyright   : (c) Ville Vesilehto, 2024
License     : MIT
Maintainer  : ville@vesilehto.fi
Stability   : experimental
Portability : portable

ChibiHash is a simple and fast 64-bit hash function suitable for hash tables and
hash-based data structures. This module provides both V1 and V2 implementations.

Example usage:

@
import ChibiHash (chibihash64)  -- Uses V1 by default
import qualified ChibiHash.V2 as V2

main :: IO ()
main = do
    let input = BS.pack [1,2,3,4]
    let seed = 0
    print $ chibihash64 input seed        -- V1 hash
    print $ V2.chibihash64 input seed     -- V2 hash
@
-}

module ChibiHash
  ( -- * Hash Functions
    chibihash64           -- Default (V1 implementation)
  , chibihash64V1         -- Explicit V1 implementation
  , chibihash64V2         -- Explicit V2 implementation
  ) where

import qualified ChibiHash.V1 as V1
import qualified ChibiHash.V2 as V2

import Data.ByteString (ByteString)
import Data.Word (Word64)

-- | Hash a ByteString with the default (V1) implementation
chibihash64 :: ByteString -> Word64 -> Word64
chibihash64 :: ByteString -> Word64 -> Word64
chibihash64 = ByteString -> Word64 -> Word64
V1.chibihash64

-- | Hash a ByteString with the V1 implementation
chibihash64V1 :: ByteString -> Word64 -> Word64
chibihash64V1 :: ByteString -> Word64 -> Word64
chibihash64V1 = ByteString -> Word64 -> Word64
V1.chibihash64

-- | Hash a ByteString with the V2 implementation
chibihash64V2 :: ByteString -> Word64 -> Word64
chibihash64V2 :: ByteString -> Word64 -> Word64
chibihash64V2 = ByteString -> Word64 -> Word64
V2.chibihash64