module Synthesizer.ChunkySize where

import qualified Synthesizer.Generic.Signal as SigG
import qualified Number.NonNegativeChunky as Chunky
import qualified Numeric.NonNegative.Chunky as Chunky98

import qualified Data.StorableVector.Lazy as SigSt
import qualified Data.StorableVector.Lazy.Pattern as SigStV

import qualified Data.List as List


type T = Chunky.T SigG.LazySize


fromStorableVectorSize ::
   SigStV.LazySize -> T
fromStorableVectorSize :: LazySize -> T
fromStorableVectorSize =
   [LazySize] -> T
forall a. C a => [a] -> T a
Chunky.fromChunks ([LazySize] -> T) -> (LazySize -> [LazySize]) -> LazySize -> T
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   (ChunkSize -> LazySize) -> [ChunkSize] -> [LazySize]
forall a b. (a -> b) -> [a] -> [b]
List.map (\(SigSt.ChunkSize Int
size) -> (Int -> LazySize
SigG.LazySize Int
size)) ([ChunkSize] -> [LazySize])
-> (LazySize -> [ChunkSize]) -> LazySize -> [LazySize]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   LazySize -> [ChunkSize]
forall a. T a -> [a]
Chunky98.toChunks

toStorableVectorSize ::
   T -> SigStV.LazySize
toStorableVectorSize :: T -> LazySize
toStorableVectorSize =
   [ChunkSize] -> LazySize
forall a. C a => [a] -> T a
Chunky98.fromChunks ([ChunkSize] -> LazySize) -> (T -> [ChunkSize]) -> T -> LazySize
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   (LazySize -> ChunkSize) -> [LazySize] -> [ChunkSize]
forall a b. (a -> b) -> [a] -> [b]
List.map (\(SigG.LazySize Int
size) -> (Int -> ChunkSize
SigSt.ChunkSize Int
size)) ([LazySize] -> [ChunkSize])
-> (T -> [LazySize]) -> T -> [ChunkSize]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   T -> [LazySize]
forall a. C a => T a -> [a]
Chunky.toChunks

toNullList :: T -> [()]
toNullList :: T -> [()]
toNullList =
   (LazySize -> [()]) -> [LazySize] -> [()]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
List.concatMap (\(SigG.LazySize Int
n) -> Int -> () -> [()]
forall a. Int -> a -> [a]
List.replicate Int
n ()) ([LazySize] -> [()]) -> (T -> [LazySize]) -> T -> [()]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   T -> [LazySize]
forall a. C a => T a -> [a]
Chunky.toChunks