----------------------------------------------------------------------------- -- | -- Module : OpenAFP.Types -- Copyright : (c) Audrey Tang 2004-2011 -- License : PublicDomain -- -- Maintainer : audreyt@audreyt.org -- Stability : experimental -- Portability : non-portable (GHC-only) -- -- This module imports and re-exports the fundamental types in the OpenAFP -- framework: Buffer, Chunk and Record. -- ----------------------------------------------------------------------------- module OpenAFP.Types ( module OpenAFP.Types.Buffer, module OpenAFP.Types.Chunk, module OpenAFP.Types.Record, module OpenAFP.Types.View, T_(..), viewChunks, viewData, viewNumber, viewString, viewNStr, viewAStr, viewField, viewRecord ) where import OpenAFP.Types.Buffer import OpenAFP.Types.Chunk import OpenAFP.Types.Record import OpenAFP.Types.View import OpenAFP.Internals import qualified Data.ByteString as S import qualified Data.ByteString.Char8 as C data T_ = T_ !N1 !Buffer1 deriving (Show, Typeable) viewChunks cs = ViewChunks (typeOf cs) (map viewChunk cs) viewChunk c = withChunk c recView withChunk :: Chunk a => a -> (forall r. (Rec r) => r -> x) -> x withChunk c = chunkApply (fst . chunkDecon $ c) c viewData ds = ViewData (typeOf ds) (map recView ds) viewNumber n = ViewNumber (typeOf n) (fromEnum n) viewString a = ViewString (typeOf a) (S.reverse $ S.pack [ toAsc n | n <- [ 0..((sizeOf a)-1) ] ]) where toAsc n = ebc2ascW8 ! fromIntegral ((a `shiftR` (8 * n)) .&. 0xFF) viewNStr nstr = ViewNStr (typeOf nstr) (S.take 80 $ packBuf nstr) viewAStr nstr = ViewString (typeOf nstr) (S.map (ebc2ascW8 !) (S.take 80 $ packBuf nstr)) viewField l content = ViewField (C.pack l) content viewRecord = ViewRecord