/[svn]/libgig/trunk/src/RIFF.h
ViewVC logotype

Diff of /libgig/trunk/src/RIFF.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 780 by schoenebeck, Sun Sep 25 13:40:37 2005 UTC revision 1183 by persson, Sun May 13 10:34:29 2007 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2   *                                                                         *   *                                                                         *
3   *   libgig - C++ cross-platform Gigasampler format file loader library    *   *   libgig - C++ cross-platform Gigasampler format file access library    *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003-2005 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2007 by Christian Schoenebeck                      *
6   *                              <cuse@users.sourceforge.net>               *   *                              <cuse@users.sourceforge.net>               *
7   *                                                                         *   *                                                                         *
8   *   This library is free software; you can redistribute it and/or modify  *   *   This library is free software; you can redistribute it and/or modify  *
# Line 24  Line 24 
24  #ifndef __RIFF_H__  #ifndef __RIFF_H__
25  #define __RIFF_H__  #define __RIFF_H__
26    
27  #define POSIX 1  #ifdef WIN32
28  #define DEBUG 0  # define POSIX 0
29    #endif
30    
31    #ifndef POSIX
32    # define POSIX 1
33    #endif
34    
35    #ifndef DEBUG
36    # define DEBUG 0
37    #endif
38    
39  #include <string>  #include <string>
40  #include <list>  #include <list>
# Line 45  Line 54 
54    
55  #include <stdint.h>  #include <stdint.h>
56    
57  //typedef unsigned char  uint8_t;  #ifdef WIN32
58  //typedef unsigned short uint16_t;  # include "../win32/libgig_private.h" // like config.h, automatically generated by Dev-C++
59  //typedef unsigned int   uint32_t;  # include <windows.h>
60      typedef unsigned int   uint;
61      typedef unsigned char  uint8_t;
62      typedef unsigned short uint16_t;
63      typedef unsigned int   uint32_t;
64    # define PACKAGE "libgig"
65    # define VERSION VER_STRING // VER_STRING defined in libgig_private.h
66    #endif // WIN32
67    
68  #include <stdio.h>  #include <stdio.h>
69    
# Line 78  namespace RIFF { Line 94  namespace RIFF {
94    
95      /** Whether file stream is open in read or in read/write mode. */      /** Whether file stream is open in read or in read/write mode. */
96      typedef enum {      typedef enum {
97          stream_mode_read,          stream_mode_read       = 0,
98          stream_mode_read_write          stream_mode_read_write = 1,
99            stream_mode_closed     = 2
100      } stream_mode_t;      } stream_mode_t;
101    
102      /** Current state of the file stream. */      /** Current state of the file stream. */
# Line 97  namespace RIFF { Line 114  namespace RIFF {
114          stream_end      = 3          stream_end      = 3
115      } stream_whence_t;      } stream_whence_t;
116    
117        typedef enum {
118            endian_little = 0,
119            endian_big    = 1,
120            endian_native = 2
121        } endian_t;
122    
123      /** Provides convenient methods to access data of RIFF chunks in general. */      /** Provides convenient methods to access data of RIFF chunks in general. */
124      class Chunk {      class Chunk {
125          public:          public:
# Line 144  namespace RIFF { Line 167  namespace RIFF {
167              unsigned long ulStartPos;           /* actual position in file where chunk (without header) starts */              unsigned long ulStartPos;           /* actual position in file where chunk (without header) starts */
168              unsigned long ulPos;                /* # of bytes from ulStartPos */              unsigned long ulPos;                /* # of bytes from ulStartPos */
169              uint8_t*      pChunkData;              uint8_t*      pChunkData;
170                unsigned long ulChunkDataSize;
171    
172              Chunk(File* pFile);              Chunk(File* pFile);
173              Chunk(File* pFile, List* pParent, uint32_t uiChunkID, uint uiBodySize);              Chunk(File* pFile, List* pParent, uint32_t uiChunkID, uint uiBodySize);
# Line 206  namespace RIFF { Line 230  namespace RIFF {
230              Chunk*       AddSubChunk(uint32_t uiChunkID, uint uiBodySize);              Chunk*       AddSubChunk(uint32_t uiChunkID, uint uiBodySize);
231              List*        AddSubList(uint32_t uiListType);              List*        AddSubList(uint32_t uiListType);
232              void         DeleteSubChunk(Chunk* pSubChunk);              void         DeleteSubChunk(Chunk* pSubChunk);
233                void         MoveSubChunk(Chunk* pSrc, Chunk* pDst);
234              virtual ~List();              virtual ~List();
235          protected:          protected:
236              typedef std::map<uint32_t, RIFF::Chunk*>  ChunkMap;              typedef std::map<uint32_t, RIFF::Chunk*>  ChunkMap;
# Line 222  namespace RIFF { Line 247  namespace RIFF {
247              void ReadHeader(unsigned long fPos);              void ReadHeader(unsigned long fPos);
248              void WriteHeader(unsigned long fPos);              void WriteHeader(unsigned long fPos);
249              void LoadSubChunks();              void LoadSubChunks();
250                void LoadSubChunksRecursively();
251              virtual unsigned long WriteChunk(unsigned long ulWritePos, unsigned long ulCurrentDataOffset);              virtual unsigned long WriteChunk(unsigned long ulWritePos, unsigned long ulCurrentDataOffset);
252              virtual void __resetPos(); ///< Sets List Chunk's read/write position to zero and causes all sub chunks to do the same.              virtual void __resetPos(); ///< Sets List Chunk's read/write position to zero and causes all sub chunks to do the same.
253      };      };
# Line 229  namespace RIFF { Line 255  namespace RIFF {
255      /** Parses arbitrary RIFF files and provides together with it's base classes convenient methods to walk through the RIFF tree. */      /** Parses arbitrary RIFF files and provides together with it's base classes convenient methods to walk through the RIFF tree. */
256      class File : public List {      class File : public List {
257          public:          public:
258              File();              File(uint32_t FileType);
259                File(uint32_t FileType, endian_t Endian);
260              File(const String& path);              File(const String& path);
261              stream_mode_t GetMode();              stream_mode_t GetMode();
262              bool          SetMode(stream_mode_t NewMode);              bool          SetMode(stream_mode_t NewMode);
# Line 241  namespace RIFF { Line 268  namespace RIFF {
268              #if POSIX              #if POSIX
269              int    hFileRead;  ///< handle / descriptor for reading from file              int    hFileRead;  ///< handle / descriptor for reading from file
270              int    hFileWrite; ///< handle / descriptor for writing to (some) file              int    hFileWrite; ///< handle / descriptor for writing to (some) file
271                #elif defined(WIN32)
272                HANDLE hFileRead;  ///< handle / descriptor for reading from file
273                HANDLE hFileWrite; ///< handle / descriptor for writing to (some) file
274              #else              #else
275              FILE*  hFileRead;  ///< handle / descriptor for reading from file              FILE*  hFileRead;  ///< handle / descriptor for reading from file
276              FILE*  hFileWrite; ///< handle / descriptor for writing to (some) file              FILE*  hFileWrite; ///< handle / descriptor for writing to (some) file
# Line 249  namespace RIFF { Line 279  namespace RIFF {
279              bool   bEndianNative;              bool   bEndianNative;
280    
281              void LogAsResized(Chunk* pResizedChunk);              void LogAsResized(Chunk* pResizedChunk);
282                void UnlogResized(Chunk* pResizedChunk);
283              friend class Chunk;              friend class Chunk;
284              friend class List;              friend class List;
285          private:          private:
# Line 257  namespace RIFF { Line 288  namespace RIFF {
288    
289              unsigned long GetFileSize();              unsigned long GetFileSize();
290              void ResizeFile(unsigned long ulNewSize);              void ResizeFile(unsigned long ulNewSize);
291                #if POSIX
292                unsigned long __GetFileSize(int hFile);
293                #elif defined(WIN32)
294                unsigned long __GetFileSize(HANDLE hFile);
295                #else
296                unsigned long __GetFileSize(FILE* hFile);
297                #endif
298      };      };
299    
300      /** Will be thrown whenever an error occurs while parsing a RIFF file. */      /** Will be thrown whenever an error occurs while parsing a RIFF file. */

Legend:
Removed from v.780  
changed lines
  Added in v.1183

  ViewVC Help
Powered by ViewVC