Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cRIFFFormat.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cRIFFFormat_H
6 #define _INC_cRIFFFormat_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "../UID/cFourCC.h"
13 #include "GrayCore/include/cBits.h"
14 
15 namespace GrayLib
16 {
17  typedef UINT32 RIFF_SIZE_t;
18 
20  {
30  };
31 
32 #pragma pack(1)
34  {
37 
38  public:
41 
42  public:
43  cRIFFHead(FOURCC nTypeChunk = FOURCC_0, RIFF_SIZE_t nDataSize = 0)
44  : m_nTypeChunk(nTypeChunk)
45  , m_nDataSize(nDataSize)
46  {
47  }
48  bool isListType() const
49  {
50  return(cFourCC(m_nTypeChunk).isListType());
51  }
52  bool isPadded() const
53  {
55  return (m_nDataSize % 2 == 1);
56  }
58  {
59  RIFF_SIZE_t nSize = m_nDataSize;
60  if (isPadded())
61  nSize++;
62  return nSize + sizeof(m_nTypeChunk) + sizeof(m_nDataSize);
63  }
65  {
67  return m_nDataSize;
68  }
69  HRESULT WriteChunk(cStreamOutput* pOut) const;
70  HRESULT ReadChunk(cStreamInput& stmIn);
71  };
72 
74  {
78 
79  typedef cRIFFHead SUPER_t;
80 
81  public:
83 
84  public:
85  cRIFFHeadList(FOURCC nTypeChunk = FOURCC_0, RIFF_SIZE_t nDataSize = 0, FOURCC nTypeList = FOURCC_0)
86  : cRIFFHead(nTypeChunk, nDataSize)
87  , m_nTypeList(nTypeList)
88  {
89  }
91  {
93  return SUPER_t::get_RawSize() + sizeof(m_nTypeList);
94  }
95  };
96 #pragma pack()
97 
99  {
102 
103  public:
106 
107  public:
108  cRIFFHeadX(FOURCC nTypeChunk = FOURCC_0, RIFF_SIZE_t nDataSize = 0, FOURCC nTypeList = FOURCC_0)
109  : cRIFFHeadList(nTypeChunk, nDataSize, nTypeList)
110  , m_nFileOffsetData(0)
111  , m_dwFlags(RIFFIO_NULL)
112  {
113  }
114 
115  HRESULT ReadChunk(cStreamInput& stmIn, BITOP_TYPE nList = BITOP_TOGGLE);
116  HRESULT WriteChunk(cStreamOutput* pOut, BITOP_TYPE nList = BITOP_TOGGLE) const;
117  };
118 
120  {
123 
124  public:
126 
127  private:
128  HRESULT Descend(cRIFFHeadX* pChunk, const cRIFFHeadX* pInfoRIFF, RIFFIO_TYPE dwFlags);
129 
130  public:
132  : m_rInp(s)
133  {
134  }
135 
136  HRESULT Ascend(cRIFFHeadX* pChunk);
137  HRESULT DescendRIFF(cRIFFHeadX* pChunkList, FOURCC nTypeList);
138  HRESULT DescendLIST(cRIFFHeadX* pChunk, const cRIFFHeadX* pChunkList, FOURCC nTypeList);
139  HRESULT DescendChunk(cRIFFHeadX* pChunk, const cRIFFHeadX* pChunkList, FOURCC nTypeChunk = FOURCC_0);
140  };
141 
143  {
146 
147  public:
149 
150  public:
152  : m_pOut(pOut)
153  {
154  }
155 
156  HRESULT Ascend(cRIFFHeadX* pChunk);
157  HRESULT CreateChunk(cRIFFHeadX* pChunk, RIFFIO_TYPE dwFlags = RIFFIO_NULL);
158  };
159 }
160 
161 #endif
#define CATTR_PACKED
Definition: GrayCore.h:87
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
UINT32 FOURCC
32 bit code. Also defined in _MMSYSTEM_H
Definition: cFourCC.h:19
Definition: cFourCC.h:96
Definition: cRIFFFormat.h:74
FOURCC m_nTypeList
'LIST' type or 'FORM' type. i.e. 'WAVE' FOURCC_WAVE, FOURCC_INFO. (MMCKINFO fccType)
Definition: cRIFFFormat.h:82
RIFF_SIZE_t get_RawSize() const
Definition: cRIFFFormat.h:90
cRIFFHeadList(FOURCC nTypeChunk=FOURCC_0, RIFF_SIZE_t nDataSize=0, FOURCC nTypeList=FOURCC_0)
Definition: cRIFFFormat.h:85
Definition: cRIFFFormat.h:99
cRIFFHeadX(FOURCC nTypeChunk=FOURCC_0, RIFF_SIZE_t nDataSize=0, FOURCC nTypeList=FOURCC_0)
Definition: cRIFFFormat.h:108
STREAM_POS_t m_nFileOffsetData
offset of data portion of chunk in the file.
Definition: cRIFFFormat.h:104
RIFFIO_TYPE m_dwFlags
RIFFIO_TYPE mask.
Definition: cRIFFFormat.h:105
Definition: cRIFFFormat.h:34
RIFF_SIZE_t get_DataSize() const
Definition: cRIFFFormat.h:64
bool isListType() const
Definition: cRIFFFormat.h:48
cRIFFHead(FOURCC nTypeChunk=FOURCC_0, RIFF_SIZE_t nDataSize=0)
Definition: cRIFFFormat.h:43
RIFF_SIZE_t get_RawSize() const
Definition: cRIFFFormat.h:57
RIFF_SIZE_t m_nDataSize
chunk size (bytes) including m_nTypeList not including align/pad byte. (MMCKINFO cksize)
Definition: cRIFFFormat.h:40
FOURCC m_nTypeChunk
chunk ID. i.e. 'RIFF','LIST','FORM' FOURCC_RIFF or 'data' for non list (MMCKINFO ckid)
Definition: cRIFFFormat.h:39
bool isPadded() const
Definition: cRIFFFormat.h:52
Definition: cRIFFFormat.h:120
cRIFFReader(cStreamInput &s)
Definition: cRIFFFormat.h:131
cStreamInput & m_rInp
File or memory stream input.
Definition: cRIFFFormat.h:125
Definition: cRIFFFormat.h:143
cRIFFWriter(cStreamOutput *pOut)
Definition: cRIFFFormat.h:151
cStreamOutput * m_pOut
File or memory stream output.
Definition: cRIFFFormat.h:148
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cMesh.h:22
RIFFIO_TYPE
Definition: cRIFFFormat.h:20
@ RIFFIO_NULL
Definition: cRIFFFormat.h:23
@ RIFFIO_FINDLIST
or FORM
Definition: cRIFFFormat.h:28
@ RIFFIO_FINDCHUNK
Definition: cRIFFFormat.h:29
@ RIFFIO_FINDRIFF
Definition: cRIFFFormat.h:27
@ RIFFIO_CREATECHUNK
Definition: cRIFFFormat.h:26
@ RIFFIO_CREATERIFF
Definition: cRIFFFormat.h:24
@ RIFFIO_CREATELIST
Definition: cRIFFFormat.h:25
@ FOURCC_0
junk FOURCC
Definition: cFourCC.h:38
UINT32 RIFF_SIZE_t
32 bit Size limit for any chunk
Definition: cRIFFFormat.h:17
BITOP_TYPE
Definition: cBits.h:22
@ BITOP_TOGGLE
XOR bit operation to flip bits. Also used for unknown bit state.
Definition: cBits.h:26
ULONG_PTR STREAM_POS_t
NOT same as FILE_SIZE_t in 32 bit. Why not ?
Definition: cOSHandle.h:54