{-# LANGUAGE NoImplicitPrelude, Strict #-} {-# OPTIONS_HADDOCK show-extensions #-} -- | -- Module : Rhythmicity.BasicF -- Copyright : (c) Oleksandr Zhabenko 2023 -- License : MIT -- Stability : Experimental -- Maintainer : oleksandr.zhabenko@yahoo.com -- -- Functions for Rhythmicity.MarkerSeqs module that additionally \"catches\" some hashing logics -- so that they can influence in the predictable way the peculiarities of the results -- for PhLADiPreLiO. module Rhythmicity.BasicF where import Data.Bits import GHC.Num import GHC.Base import GHC.Real import GHC.List import GHC.Int import GHC.Enum (fromEnum) hashPosLF2 :: Int8 -> [Integer] -> Integer hashPosLF2 i ns = shift (sum ns) . fromEnum $ i {-# INLINE hashPosLF2 #-} hashBalancingLF2 :: Int8 -> [Integer] -> Integer hashBalancingLF2 = hashBalancingLF2G 20 {-# INLINE hashBalancingLF2 #-} hashBasicLF2 :: Int8 -> [Integer] -> Integer hashBasicLF2 _ = sum {-# INLINE hashBasicLF2 #-} -- | Here semantically the first argument must be greater than at least 2. But this is not checked for -- performance reasons. hashBalancingLF2G :: Int -> Int8 -> [Integer] -> Integer hashBalancingLF2G k _ = sum . zipWith (\pos n -> shiftR n (k*pos)) [6,5..0] {-# INLINE hashBalancingLF2G #-}