module HaskellWorks.Data.BalancedParens.Internal.Broadword.FindClose.Vector32
( 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.Vector32 as BWV32
findClose :: DVS.Vector Word32 -> Count -> Maybe Count
findClose :: Vector Word32 -> Count -> Maybe Count
findClose Vector Word32
v Count
p = if Count
p Count -> Count -> Bool
forall a. Ord a => a -> a -> Bool
> Count
0
then if Vector Word32 -> Count -> Bool
forall v. CloseAt v => v -> Count -> Bool
closeAt Vector Word32
v Count
p
then Count -> Maybe Count
forall a. a -> Maybe a
Just Count
p
else Count -> Maybe Count
forall a. a -> Maybe a
Just (Count -> Count -> Vector Word32 -> Count
BWV32.findUnmatchedCloseFar Count
0 Count
p Vector Word32
v Count -> Count -> Count
forall a. Num a => a -> a -> a
+ Count
1)
else Count -> Maybe Count
forall a. a -> Maybe a
Just (Count -> Count -> Vector Word32 -> Count
BWV32.findUnmatchedCloseFar Count
1 Count
p Vector Word32
v)
{-# INLINE findClose #-}