module HaskellWorks.Data.BalancedParens.Internal.Broadword.FindClose.Vector64
( findClose
) where
import Data.Word
import HaskellWorks.Data.BalancedParens.CloseAt
import HaskellWorks.Data.Positioning
import qualified Data.Vector.Storable as DVS
import qualified HaskellWorks.Data.BalancedParens.Internal.Broadword.FindUnmatchedCloseFar.Vector64 as BWV64
findClose :: DVS.Vector Word64 -> Count -> Maybe Count
findClose :: Vector Word64 -> Word64 -> Maybe Word64
findClose Vector Word64
v Word64
p = if Word64
p Word64 -> Word64 -> Bool
forall a. Ord a => a -> a -> Bool
> Word64
0
then if Vector Word64 -> Word64 -> Bool
forall v. CloseAt v => v -> Word64 -> Bool
closeAt Vector Word64
v Word64
p
then Word64 -> Maybe Word64
forall a. a -> Maybe a
Just Word64
p
else Word64 -> Maybe Word64
forall a. a -> Maybe a
Just (Word64 -> Word64 -> Vector Word64 -> Word64
BWV64.findUnmatchedCloseFar Word64
0 Word64
p Vector Word64
v Word64 -> Word64 -> Word64
forall a. Num a => a -> a -> a
+ Word64
1)
else Word64 -> Maybe Word64
forall a. a -> Maybe a
Just (Word64 -> Word64 -> Vector Word64 -> Word64
BWV64.findUnmatchedCloseFar Word64
1 Word64
p Vector Word64
v)
{-# INLINE findClose #-}