packages feed

heatshrink-0.1.0.0: src/Codec/Compression/Heatshrink/Internal.chs

{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}


--------------------------------------------------------------------------------
module Codec.Compression.Heatshrink.Internal where

import Foreign.C.Types
import Foreign.Ptr
import Foreign.Storable
import Foreign.Marshal.Alloc
import Data.Word


--------------------------------------------------------------------------------
{#pointer *size_t as CSizePtr -> CSize #}
{#pointer *uint8_t as CUCharPtr -> CUChar #}


-- * decoding
--------------------------------------------------------------------------------
#include "heatshrink_decoder.h"

--------------------------------------------------------------------------------
{#enum HSD_sink_res as HsdSinkRes {underscoreToCase} deriving (Show, Eq) #}
{#enum HSD_poll_res as HsdPollRes {underscoreToCase} deriving (Show, Eq) #}
{#enum HSD_finish_res as HsdFinishRes {underscoreToCase} deriving (Show, Eq) #}

--------------------------------------------------------------------------------
data HeatshrinkDecoderT

--------------------------------------------------------------------------------
{#pointer *heatshrink_decoder as HeatshrinkDecoderTPtr foreign finalizer heatshrink_decoder_free #}
--{#pointer *heatshrink_decoder as HeatshrinkDecoderTPtr foreign #}

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------
{#fun pure unsafe heatshrink_decoder_alloc as ^
  { `Int'
  , `Int'
  , `Int'} -> `HeatshrinkDecoderTPtr'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_decoder_free as ^
  { `HeatshrinkDecoderTPtr' } -> `()'
#}

--------------------------------------------------------------------------------
{#fun unsafe heatshrink_decoder_reset as ^
  { `HeatshrinkDecoderTPtr' } -> `()'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_decoder_sink as ^
  { `HeatshrinkDecoderTPtr'
  , castPtr `Ptr Word8'
  , cIntConv `CSize'
  , alloca- `CSize' peek* } -> `HsdSinkRes'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_decoder_poll as ^
  { `HeatshrinkDecoderTPtr'
  , castPtr `Ptr Word8'
  , cIntConv `CSize'
  , alloca- `CSize' peek* } -> `HsdPollRes'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_decoder_finish as ^
  { `HeatshrinkDecoderTPtr' } -> `HsdFinishRes'
#}


--------------------------------------------------------------------------------
cIntConv :: (Integral a, Num b) =>  a -> b
cIntConv = fromIntegral


--------------------------------------------------------------------------------

-- encoding
#include "heatshrink_encoder.h"

{#enum HSE_sink_res as HseSinkRes {underscoreToCase} deriving (Show, Eq) #}
{#enum HSE_poll_res as HsePollRes {underscoreToCase} deriving (Show, Eq) #}
{#enum HSE_finish_res as HseFinishRes {underscoreToCase} deriving (Show, Eq) #}

data HeatshrinkEncoderT

{#pointer *heatshrink_encoder as HeatshrinkEncoderTPtr foreign finalizer heatshrink_encoder_free #}

{#fun pure unsafe heatshrink_encoder_alloc as ^
  { `Int'
  , `Int'} -> `HeatshrinkEncoderTPtr'
#}

--------------------------------------------------------------------------------
{#fun unsafe heatshrink_encoder_free as ^
  { `HeatshrinkEncoderTPtr' } -> `()'
#}

--------------------------------------------------------------------------------
{#fun unsafe heatshrink_encoder_reset as ^
  { `HeatshrinkEncoderTPtr' } -> `()'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_encoder_sink as ^
  { `HeatshrinkEncoderTPtr'
  , castPtr `Ptr Word8'
  , cIntConv `CSize'
  , alloca- `CSize' peek* } -> `HseSinkRes'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_encoder_poll as ^
  { `HeatshrinkEncoderTPtr'
  , castPtr `Ptr Word8'
  , cIntConv `CSize'
  , alloca- `CSize' peek* } -> `HsePollRes'
#}


--------------------------------------------------------------------------------
{#fun unsafe heatshrink_encoder_finish as ^
  { `HeatshrinkEncoderTPtr' } -> `HseFinishRes'
#}