module Data.Repa.Flow.Default.SizedIO
( module Data.Repa.Flow.IO.Bucket
, sourceBytes
, sourceChars
, sourceLines
, sourceRecords
, sourceTSV
, sourceCSV
, sinkBytes
, sinkChars
, sinkLines)
where
import Data.Repa.Flow.Default
import Data.Repa.Flow.IO.Bucket
import Data.Repa.Flow.Default.IO.TSV as F
import Data.Repa.Flow.Default.IO.CSV as F
import Data.Repa.Eval.Array as A
import Data.Repa.Array.Material as A
import Data.Repa.Fusion.Unpack as F
import Data.Repa.Array as A
import qualified Data.Repa.Flow.Generic as G
import qualified Data.Repa.Flow.Generic.IO as G
import Data.Word
import Data.Char
#include "repa-flow.h"
sourceBytes
:: BulkI l Bucket
=> Integer -> Array l Bucket -> IO (Sources F Word8)
sourceBytes i bs = G.sourceBytes i bs
sourceChars
:: BulkI l Bucket
=> Integer -> Array l Bucket -> IO (Sources F Char)
sourceChars i bs = G.sourceChars i bs
sourceLines
:: BulkI l Bucket
=> Integer
-> IO ()
-> Array l Bucket
-> IO (Sources N (Array F Char))
sourceLines nChunk fails bs
= G.map_i chopChunk
=<< G.sourceRecords nChunk isNewLine fails bs
where
isNewLine :: Word8 -> Bool
isNewLine x = x == nl
chopChunk chunk
= A.mapElems (A.computeS name . A.map (chr . fromIntegral))
$ A.trimEnds (== nl) chunk
nl :: Word8
!nl = fromIntegral $ ord '\n'
sourceRecords
:: BulkI l Bucket
=> Integer
-> (Word8 -> Bool)
-> IO ()
-> Array l Bucket
-> IO (Sources N (Array F Word8))
sourceRecords i pSep aFail bs
= G.sourceRecords i pSep aFail bs
sinkBytes
:: BulkI l Bucket
=> Array l Bucket -> IO (Sinks F Word8)
sinkBytes bs = G.sinkBytes bs
sinkChars
:: BulkI l Bucket
=> Array l Bucket -> IO (Sinks F Char)
sinkChars bs = G.sinkChars bs
sinkLines
:: ( BulkI l Bucket
, BulkI l1 (Array l2 Char)
, BulkI l2 Char, Unpack (Array l2 Char) t2)
=> Name l1
-> Name l2
-> Array l Bucket
-> IO (Sinks l1 (Array l2 Char))
sinkLines n1 n2 bs
= G.sinkLines n1 n2 bs