module Data.Repa.Array.Material.Auto.Operator.Lines
(findRowsStartEnd)
where
import Data.Repa.Array.Material.Auto.Base
import Data.Repa.Array.Material.Auto.InstInt ()
import Data.Repa.Array.Material.Auto.InstWord
import Data.Repa.Array.Material.Auto.InstTuple
import qualified Data.Repa.Array.Generic as G
import qualified Data.Repa.Array.Generic.Target as G
import qualified Data.Repa.Array.Generic.Index as G
import qualified Data.Repa.Stream as S
import qualified Data.Repa.Eval.Stream as S
import qualified Data.Vector.Fusion.Stream.Monadic as S
import Data.Word
import System.IO.Unsafe
findRowsStartEnd
:: Word8
-> G.Array A Word8
-> (G.Buffer A Int, G.Buffer A Int)
findRowsStartEnd wSepLine (AArray_Word8 arrWords)
= unsafePerformIO
$ do
let len = G.extent $ G.layout arrWords
let (AArray_T2 (T2Array arr1 arr2))
= S.unstreamToArray A
$ S.findSegmentsS (const True) (== wSepLine) (len 1)
$ S.indexed
$ S.streamOfArray
$ arrWords
buf1 <- G.unsafeThawBuffer arr1
buf2 <- G.unsafeThawBuffer arr2
return (buf1, buf2)