module PureSAT.Boost where
import Data.Bits (unsafeShiftR)
boost :: Word -> Word
boost :: Word -> Word
boost !Word
n =
let !m :: Word
m = Word
n Word -> Word -> Word
forall a. Num a => a -> a -> a
+ Word
64
in if Word
m Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
< Word
n then Word
forall a. Bounded a => a
maxBound else Word
m
{-# INLINE [1] boost #-}
decay :: Word -> Word
decay :: Word -> Word
decay Word
0 = Word
0
decay Word
n = Word
n Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word -> Word -> Word
forall a. Ord a => a -> a -> a
max Word
1 (Word -> Int -> Word
forall a. Bits a => a -> Int -> a
unsafeShiftR Word
n Int
6)
{-# INLINE [1] decay #-}