100% Haddock

This commit is contained in:
Nicole Dresselhaus 2014-04-26 17:12:19 +02:00
parent 2e22e77d75
commit 5223c34da2
2 changed files with 26 additions and 3 deletions

View File

@ -196,6 +196,9 @@ skipToCounter a = do
put d put d
-- | Parses an IQM-File and handles back the Haskell-Structure -- | Parses an IQM-File and handles back the Haskell-Structure
--
-- Does a 2-Pass-Parsing. Reads in Structure on first pass (O(n))and
-- fills the Structure in a 2nd Pass from Offsets (O(memcpy'd bytes)).
parseIQM :: String -> IO IQM parseIQM :: String -> IO IQM
parseIQM a = parseIQM a =
do do
@ -212,6 +215,11 @@ parseIQM a =
vertexArrays = va' vertexArrays = va'
} }
-- | Allocates memory for the Vertex-data and copies it over there
-- from the given input-String
--
-- Note: The String-Operations are O(1), so only O(numberOfCopiedBytes)
-- is needed in term of computation.
readInVAO :: ByteString -> IQMVertexArray -> IO IQMVertexArray readInVAO :: ByteString -> IQMVertexArray -> IO IQMVertexArray
readInVAO d (IQMVertexArray type' a format num offset ptr) = readInVAO d (IQMVertexArray type' a format num offset ptr) =
do do
@ -225,6 +233,10 @@ readInVAO d (IQMVertexArray type' a format num offset ptr) =
unsafeUseAsCString data' (\s -> copyBytes p s byteLen) unsafeUseAsCString data' (\s -> copyBytes p s byteLen)
return $ IQMVertexArray type' a format num offset $ castPtr p return $ IQMVertexArray type' a format num offset $ castPtr p
-- | Real internal Parser.
--
-- Consumes the String only once, thus in O(n). But all Data-Structures are
-- not allocated and copied. readInVAO has to be called on each one.
doIQMparse :: Parser IQM doIQMparse :: Parser IQM
doIQMparse = doIQMparse =
flip evalStateT 0 $ --evaluate parser with state starting at 0 flip evalStateT 0 $ --evaluate parser with state starting at 0
@ -244,5 +256,9 @@ doIQMparse =
, vertexArrays = vaf , vertexArrays = vaf
} }
-- | Helper-Function for Extracting a random substring out of a Bytestring
-- by the Offsets provided.
--
-- O(1).
skipDrop :: Int -> Int -> ByteString -> ByteString skipDrop :: Int -> Int -> ByteString -> ByteString
skipDrop a b= B.drop b . B.take a skipDrop a b= B.drop b . B.take a

View File

@ -20,10 +20,19 @@ newtype Mesh = Mesh Word32 deriving (Show, Eq)
-- Bytes read for offset-gap reasons -- Bytes read for offset-gap reasons
type CParser a = StateT Int64 Parser a type CParser a = StateT Int64 Parser a
-- | Alias
type Flags = GLbitfield -- ^ Alias for UInt32 type Flags = GLbitfield -- ^ Alias for UInt32
-- | Alias
type Offset = Word32 -- ^ Alias for UInt32 type Offset = Word32 -- ^ Alias for UInt32
-- | Alias
type Index = GLuint -- ^ Alias for UInt32 type Index = GLuint -- ^ Alias for UInt32
-- | Alias
type NumComponents = GLsizei -- ^ Alias for UInt32 type NumComponents = GLsizei -- ^ Alias for UInt32
-- | Data-BLOB inside IQM
type IQMData = Ptr IQMVertexArrayFormat -- ^ Pointer for Data type IQMData = Ptr IQMVertexArrayFormat -- ^ Pointer for Data
-- | Header of IQM-Format. -- | Header of IQM-Format.
@ -104,7 +113,6 @@ data IQM = IQM
-- | Different Vertex-Array-Types in IQM -- | Different Vertex-Array-Types in IQM
-- --
-- Custom Types have to be > 0x10 as of specification -- Custom Types have to be > 0x10 as of specification
data IQMVertexArrayType = IQMPosition data IQMVertexArrayType = IQMPosition
| IQMTexCoord | IQMTexCoord
| IQMNormal | IQMNormal
@ -116,7 +124,6 @@ data IQMVertexArrayType = IQMPosition
deriving (Show, Eq) deriving (Show, Eq)
-- | Lookup-Function for internal enum to VertexArrayFormat -- | Lookup-Function for internal enum to VertexArrayFormat
rawEnumToVAT :: Word32 -> CParser IQMVertexArrayType rawEnumToVAT :: Word32 -> CParser IQMVertexArrayType
rawEnumToVAT 0 = return IQMPosition rawEnumToVAT 0 = return IQMPosition
rawEnumToVAT 1 = return IQMTexCoord rawEnumToVAT 1 = return IQMTexCoord
@ -140,6 +147,7 @@ data IQMVertexArrayFormat = IQMbyte
-- | Unknown Word32 -- | Unknown Word32
deriving (Show, Eq) deriving (Show, Eq)
-- | Get the Size (in Bytes) of the given IQMVertexArrayFormat-Struct
vaSize :: IQMVertexArrayFormat -> Int vaSize :: IQMVertexArrayFormat -> Int
vaSize IQMbyte = sizeOf (undefined :: CSChar) vaSize IQMbyte = sizeOf (undefined :: CSChar)
vaSize IQMubyte = sizeOf (undefined :: CUChar) vaSize IQMubyte = sizeOf (undefined :: CUChar)
@ -156,7 +164,6 @@ vaSize IQMdouble = sizeOf (undefined :: CDouble)
--mallocVArray IQMubyte n = mallocArray n :: IO (Ptr CUChar) --mallocVArray IQMubyte n = mallocArray n :: IO (Ptr CUChar)
-- | Lookup-Function for internal enum to VertexArrayFormat -- | Lookup-Function for internal enum to VertexArrayFormat
rawEnumToVAF :: Word32 -> CParser IQMVertexArrayFormat rawEnumToVAF :: Word32 -> CParser IQMVertexArrayFormat
rawEnumToVAF 0 = return IQMbyte rawEnumToVAF 0 = return IQMbyte
rawEnumToVAF 1 = return IQMubyte rawEnumToVAF 1 = return IQMubyte