Portability | unknown |
---|---|
Stability | unstable |
Maintainer | Conrad Parker <conrad@metadecks.org> |
This module re-exports the required interfaces and some useful functions for developing zoom-cache codecs.
To implement a codec, specify SummaryData
and SummaryWork
types, and
implement the methods of the ZoomReadable and ZoomWritable classes.
For sample implementations, read the source of the provided instances Data.ZoomCache.Int and Data.ZoomCache.Double.
- class Typeable a => ZoomReadable a where
- data SummaryData a :: *
- trackIdentifier :: a -> ByteString
- readRaw :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m a
- readSummary :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m (SummaryData a)
- prettyRaw :: a -> String
- prettySummaryData :: SummaryData a -> String
- class ZoomReadable a => ZoomWritable a where
- data SummaryWork a :: *
- fromRaw :: a -> Builder
- fromSummaryData :: SummaryData a -> Builder
- initSummaryWork :: TimeStamp -> SummaryWork a
- updateSummaryData :: TimeStamp -> a -> SummaryWork a -> SummaryWork a
- toSummaryData :: TimeStampDiff -> SummaryWork a -> SummaryData a
- appendSummaryData :: TimeStampDiff -> SummaryData a -> TimeStampDiff -> SummaryData a -> SummaryData a
- class ZoomWrite t where
- identifyCodec :: ZoomReadable a => a -> IdentifyCodec
- readInt8 :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m a
- readInt16be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m a
- readInt32be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m a
- readInt64be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m a
- readFloat32be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m Float
- readDouble64be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m Double
- readRational64be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m Rational
- writeData :: (Typeable a, ZoomWrite a, ZoomWritable a) => TrackNo -> a -> ZoomW ()
- writeDataVBR :: (Typeable a, ZoomWrite a, ZoomWritable a) => TrackNo -> (TimeStamp, a) -> ZoomW ()
- fromRational64 :: Rational -> Builder
- fromIntegral32be :: forall a. Integral a => a -> Builder
- fromFloat :: Float -> Builder
- fromDouble :: Double -> Builder
- data Codec
- data TimeStamp = TS {}
- data TimeStampDiff = TSDiff {}
- timeStampDiff :: TimeStamp -> TimeStamp -> TimeStampDiff
- module Data.ZoomCache.Numeric.FloatMinMax
Required interfaces
class Typeable a => ZoomReadable a whereSource
A codec instance must specify a SummaryData
type,
and implement all methods of this class.
data SummaryData a :: *Source
trackIdentifier :: a -> ByteStringSource
The track identifier used for streams of type a
.
The value of the argument should be ignored by any instance of
ZoomReadable
, so that is safe to pass undefined
as the
argument.
readRaw :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m aSource
An iteratee to read one value of type a
from a stream of something
like '[Word8]' or ByteString
.
readSummary :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m (SummaryData a)Source
An iteratee to read one value of type 'SummaryData a' from a stream
of something like '[Word8]' or ByteString
.
prettyRaw :: a -> StringSource
Pretty printing, used for dumping values of type a
.
prettySummaryData :: SummaryData a -> StringSource
Pretty printing for values of type 'SummaryData a'.
class ZoomReadable a => ZoomWritable a whereSource
A codec instance must additionally specify a SummaryWork
type
data SummaryWork a :: *Source
Intermediate calculations
Serialize a value of type a
fromSummaryData :: SummaryData a -> BuilderSource
Serialize a 'SummaryData a'
initSummaryWork :: TimeStamp -> SummaryWork aSource
Generate a new 'SummaryWork a', given an initial timestamp.
updateSummaryData :: TimeStamp -> a -> SummaryWork a -> SummaryWork aSource
Update a SummaryData
with the value of a
occuring at the
given TimeStamp
.
toSummaryData :: TimeStampDiff -> SummaryWork a -> SummaryData aSource
Finalize a 'SummaryWork a', generating a 'SummaryData a'.
appendSummaryData :: TimeStampDiff -> SummaryData a -> TimeStampDiff -> SummaryData a -> SummaryData aSource
Append two SummaryData
The ZoomWrite class provides write
, a method to write a
Haskell value to an open ZoomCache file.
Identification
identifyCodec :: ZoomReadable a => a -> IdentifyCodecSource
Generate an IdentifyTrack
function for a given type.
Raw data reading iteratees
readInt8 :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m aSource
Read 1 byte as an Integral
readInt16be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m aSource
Read 2 bytes as a big-endian Integral
readInt32be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m aSource
Read 4 bytes as a big-endian Integral
readInt64be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m, Integral a) => Iteratee s m aSource
Read 8 bytes as a big-endian Integral
readFloat32be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m FloatSource
Read 4 bytes as a big-endian Float
readDouble64be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m DoubleSource
Read 8 bytes as a big-endian Double
readRational64be :: (Nullable s, ListLike s Word8, Functor m, MonadIO m) => Iteratee s m RationalSource
Read 16 bytes as a big-endian Rational, encoded as an 8 byte big endian numerator followed by an 8 byte big endian denominator.
ZoomWrite instance helpers
writeDataVBR :: (Typeable a, ZoomWrite a, ZoomWritable a) => TrackNo -> (TimeStamp, a) -> ZoomW ()Source
Builders
fromRational64 :: Rational -> BuilderSource
Serialize a Rational
as a sequence of two 64bit big endian format
integers.
fromIntegral32be :: forall a. Integral a => a -> BuilderSource
Serialize an Integral
in 32bit big endian format.
fromFloat :: Float -> BuilderSource
Serialize a Float
in big-endian IEEE 754-2008 binary32 format
(IEEE 754-1985 single format).
fromDouble :: Double -> BuilderSource
Serialize a Double
in big-endian IEEE 754-2008 binary64 format
(IEEE 754-1985 double format).
ZoomCache Types
data TimeStampDiff Source
timeStampDiff :: TimeStamp -> TimeStamp -> TimeStampDiffSource
timeStampDiff (TS t1) (TS t2) = TSDiff (t1 - t2)