packages feed

HPDF-1.1: Graphics/PDF/LowLevel/Serializer.hs

---------------------------------------------------------
-- |
-- Copyright   : (c) alpha 2006
-- License     : BSD-style
--
-- Maintainer  : misc@NOSPAMalpheccar.org
-- Stability   : experimental
-- Portability : portable
--
-- Serializer
---------------------------------------------------------
-- #hide
module Graphics.PDF.LowLevel.Serializer(
  SerializeValue(..)
 ) where
   
import Data.Word 
import qualified Data.ByteString.Lazy as B
import qualified Data.Binary.Builder as BU
import qualified Data.ByteString.Lazy.Char8 as C
import Data.Encoding
import Data.Encoding.UTF8
import Foreign.Ptr(Ptr)
import Data.Monoid
import Data.ByteString.Base

foreign import ccall "conversion.h c_floatToString" cfloatToString :: Double -> Ptr Word8 -> IO Int
foreign import ccall "conversion.h c_shortToString" cshortToString :: Int -> Ptr Word8 -> IO Int



class (Monoid s) => SerializeValue s a where
    serialize :: a -> s
    cons :: a -> s -> s
    cons a b = (serialize a) `mappend` b
    
instance SerializeValue B.ByteString Word8 where
    serialize = B.singleton
    cons = B.cons
    
instance SerializeValue B.ByteString Char where
    serialize = C.singleton
    cons = C.cons  
    
instance SerializeValue B.ByteString [Char] where
    serialize = encodeLazy UTF8
    
instance SerializeValue B.ByteString B.ByteString where
    serialize = id
    
instance SerializeValue B.ByteString Int where
    serialize a = LPS [inlinePerformIO (createAndTrim 12 (cshortToString a))]
 
instance SerializeValue B.ByteString Double where
    serialize a = LPS [inlinePerformIO (createAndTrim 12 (cfloatToString a))]

    
instance SerializeValue BU.Builder Word8 where
    serialize = BU.singleton

instance SerializeValue BU.Builder Char where
    serialize = BU.singleton . c2w
    
instance SerializeValue BU.Builder [Char] where
    serialize = BU.fromLazyByteString . serialize

instance SerializeValue BU.Builder B.ByteString where
    serialize = BU.fromLazyByteString

instance SerializeValue BU.Builder Int where
    serialize = BU.fromLazyByteString . serialize

instance SerializeValue BU.Builder Double where
    serialize = BU.fromLazyByteString . serialize