skeleton for Words.getWordsLossless
authorPHO <pho@cielonegro.org>
Sun, 10 Jul 2011 09:24:24 +0000 (18:24 +0900)
committerPHO <pho@cielonegro.org>
Sun, 10 Jul 2011 09:24:24 +0000 (18:24 +0900)
Codec/Audio/WavPack/Words.hs

index 09235472ba308379a99659ffd0218a94e82ee3c9..36471e10ec0c9a2cefce755006d7e6d085981d50 100644 (file)
@@ -1,5 +1,7 @@
 {-# LANGUAGE
     BangPatterns
+  , FlexibleContexts
+  , ScopedTypeVariables
   , UnboxedTuples
   , UnicodeSyntax
   #-}
@@ -13,6 +15,8 @@ import Codec.Audio.WavPack.Internal
 import Data.Bits
 import Data.Bitstream.Generic (Bitstream)
 import qualified Data.Bitstream.Generic as B
+import Data.Int
+import qualified Data.Vector.Generic as GV
 import Data.Word
 import Prelude.Unicode
 
@@ -30,13 +34,26 @@ data WordsData
       }
     deriving (Eq, Show)
 
--- This is an optimized version of 'getWord' that is used for lossless
--- only (error_limit ≡ 0). Also, rather than obtaining a single
--- sample, it can be used to obtain an entire buffer of either mono or
--- stereo samples.
---getWordsLossless ∷ 
+-- | This is an optimized version of 'getWord' that is used for
+-- lossless only ('edErrorLimit' ≡ 0). Also, rather than obtaining a
+-- single sample, it can be used to obtain an entire buffer of either
+-- mono or stereo samples.
+getWordsLossless ∷ ∀bs n v. (Bitstream bs, Integral n, GV.Vector v Int32)
+                 ⇒ Bool -- ^ Is the stream monaural?
+                 → WordsData
+                 → bs -- ^ WV bitstream.
+                 → n  -- ^ Number of samples to get.
+                 → (# WordsData, bs, v Int32 #)
+{-# INLINEABLE getWordsLossless #-}
+getWordsLossless isMono w bs nSamples0
+    = error "FIXME"
+    where
+      nSamples ∷ n
+      nSamples = if isMono
+                 then nSamples0
+                 else nSamples0 ⋅ 2
 
--- Read a single unsigned value from the specified bitstream with a
+-- Read a single unsigned value from the specified bitstream with a
 -- value from 0 to maxCode. If there are exactly a power of two number
 -- of possible codes then this will read a fixed number of bits;
 -- otherwise it reads the minimum number of bits and then determines