module HaskellWorks.Data.BalancedParens.Internal.Slow.FindCloseN.Generic
( findCloseN
) where
import HaskellWorks.Data.BalancedParens.CloseAt
import HaskellWorks.Data.Bits.BitLength
import HaskellWorks.Data.Bits.BitWise
import HaskellWorks.Data.Positioning
findCloseN :: (BitLength a, CloseAt a, TestBit a) => a -> Count -> Count -> Maybe Count
findCloseN :: forall a.
(BitLength a, CloseAt a, TestBit a) =>
a -> Count -> Count -> Maybe Count
findCloseN a
v Count
c Count
p = if Count
0 forall a. Ord a => a -> a -> Bool
< Count
p
then if a
v forall v. CloseAt v => v -> Count -> Bool
`closeAt` Count
p
then if Count
c forall a. Ord a => a -> a -> Bool
<= Count
1
then forall a. a -> Maybe a
Just Count
p
else forall a.
(BitLength a, CloseAt a, TestBit a) =>
a -> Count -> Count -> Maybe Count
findCloseN a
v (Count
c forall a. Num a => a -> a -> a
- Count
1) (Count
p forall a. Num a => a -> a -> a
+ Count
1)
else forall a.
(BitLength a, CloseAt a, TestBit a) =>
a -> Count -> Count -> Maybe Count
findCloseN a
v (Count
c forall a. Num a => a -> a -> a
+ Count
1) (Count
p forall a. Num a => a -> a -> a
+ Count
1)
else forall a. Maybe a
Nothing
{-# INLINE findCloseN #-}