yyc12345
f870d4dde3
- add documentation CMake build script. re-organise document layout for future changes. - move LIBCMO_EXPORT to BMap and rename it to BMAP_EXPORT because only BMap need to use this macro. - fully refactor VTEncoding to make it more like Python - Now language name is platform independent. - Hide implementation detail as possible as I can. - Language mapping are still work in progress. - add code gen for new added universal encoding feature to generate language name mapping in Windows and Iconv respectively. - remove old code of CMake build script. - update VTUtils for new requirement. - remove useless functions. - create LibCmo specific custom exception classes.
279 lines
12 KiB
HTML
279 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<link rel="stylesheet" type="text/css" href="CKStateChunk.css" />
|
|
<script src="CKStateChunk.js"></script>
|
|
|
|
<body>
|
|
<h1>CKStateChunk Data Structure</h1>
|
|
<p>
|
|
NOTE:<br />
|
|
"Fill Zero" mean that this field still is existed but you should fill zero for it.<br />
|
|
"Skip" mean that this field is entirely not existed. You should not consider it anymore.
|
|
</p>
|
|
|
|
<h2>Buffer Format</h2>
|
|
<p>
|
|
This section will introduce the buffer format of CKStateChunk.<br />
|
|
Buffer format is the real format of CKStateChunk stored in file.<br />
|
|
<code>CKStateChunk::ConvertFromBuffer</code> and <code>CKStateChunk::ConvertToBuffer</code> can convert between CKStateChunk and its buffer format.
|
|
</p>
|
|
<p>According to the value of CK_STATECHUNK_CHUNKVERSION, we split it into 3 different format.</p>
|
|
<ul>
|
|
<li>value < CHUNK_VERSION2: Very Old Format</li>
|
|
<li>value = CHUNK_VERSION2: Old Format</li>
|
|
<li>value > CHUNK_VERSION2: New Format</li>
|
|
</ul>
|
|
<p>
|
|
The unit of m_DataDwSize is CKDWORD(uint32), not char(uint8).<br />
|
|
The core data of CKStateChunk is aligned with 4 byte boundary. so this is the reason why the unit of
|
|
m_DataDwSize is CKDWORD.<br />
|
|
Every reading and writing of m_pData should notice this unit issue.
|
|
</p>
|
|
<h3>Very Old Format</h3>
|
|
<table>
|
|
<tr>
|
|
<td id="buf-fmt-vold-DataVersion">
|
|
<code>uint16 m_DataVersion</code>
|
|
<p>The type of m_DataVersion is CK_STATECHUNK_DATAVERSION.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-ChunkVersion">
|
|
<code>uint16 m_ChunkVersion</code>
|
|
<p>The type of m_ChunkVersion is CK_STATECHUNK_CHUNKVERSION.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-ClassId">
|
|
<code>uint32 m_ClassId</code>
|
|
<p>The type of m_ClassId is CK_CLASSID.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-DataDwSize">
|
|
<code>uint32 m_DataDwSize</code>
|
|
<p>The size of CKStateChunk core data.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-ObjectListSize">
|
|
<code>uint32 m_ObjectListSize</code>
|
|
<p>The size of object list.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-ChunkListSize">
|
|
<code>uint32 m_ChunkListSize</code>
|
|
<p>The size of chunk list</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-pData">
|
|
<code>uint32[] m_pData</code>
|
|
<p>The core data. Its length is indicated by m_DataDwSize.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-ObjectList">
|
|
<code>uint32[] m_ObjectList</code>
|
|
<p>The object list. Its length is indicated by m_ObjectListSize.</p>
|
|
</td>
|
|
<td id="buf-fmt-vold-ChunkList">
|
|
<code>uint32[] m_ChunkList</code>
|
|
<p>The chunk list. Its length is indicated by m_ChunkListSize.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<h3>Old Format</h3>
|
|
<table>
|
|
<tr>
|
|
<td class="ph" target="buf-fmt-vold-DataVersion"></td>
|
|
<td class="ph" target="buf-fmt-vold-ChunkVersion"></td>
|
|
<td class="ph" target="buf-fmt-vold-ClassId"></td>
|
|
<td class="ph" target="buf-fmt-vold-DataDwSize"></td>
|
|
<td class="ph" target="buf-fmt-vold-ObjectListSize"></td>
|
|
<td class="ph" target="buf-fmt-vold-ChunkListSize"></td>
|
|
<td>
|
|
<code>uint32 m_ManagerListSize</code>
|
|
<p>The size of manager list</p>
|
|
</td>
|
|
<td class="ph" target="buf-fmt-vold-pData"></td>
|
|
<td class="ph" target="buf-fmt-vold-ObjectList"></td>
|
|
<td class="ph" target="buf-fmt-vold-ChunkList"></td>
|
|
<td>
|
|
<code>uint32[] m_ManagerList</code>
|
|
<p>The manager list. Its length is indicated by m_ManagerListSize.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<h3>New Format</h3>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<code>uint8 m_DataVersion</code>
|
|
<p>The type of m_DataVersion is CK_STATECHUNK_DATAVERSION.</p>
|
|
</td>
|
|
<td>
|
|
<code>uint8 m_ClassId</code>
|
|
<p>The type of m_ClassId is CK_CLASSID.</p>
|
|
</td>
|
|
<td>
|
|
<code>uint8 m_ChunkVersion</code>
|
|
<p>The type of m_ChunkVersion is CK_STATECHUNK_CHUNKVERSION.</p>
|
|
</td>
|
|
<td>
|
|
<code>uint8 m_Options</code>
|
|
<p>The type of m_Options is CK_STATECHUNK_CHUNKOPTIONS.</p>
|
|
</td>
|
|
<td>
|
|
<code>uint32 m_DataDwSize</code>
|
|
<p>The size of CKStateChunk core data.</p>
|
|
</td>
|
|
<td>
|
|
<code>uint32[] m_pData</code>
|
|
<p>The core data. Its length is indicated by m_DataDwSize.</p>
|
|
</td>
|
|
<td>
|
|
<table>
|
|
<tr>
|
|
<td><code>uint32 m_ObjectListSize</code></td>
|
|
<td><code>uint32[] m_ObjectList</code></td>
|
|
</tr>
|
|
</table>
|
|
<p>Enabled when m_Options has CHNK_OPTION_IDS. Skip if not have.</p>
|
|
</td>
|
|
<td>
|
|
<table>
|
|
<tr>
|
|
<td><code>uint32 m_ChunkListSize</code></td>
|
|
<td><code>uint32[] m_ChunkList</code></td>
|
|
</tr>
|
|
</table>
|
|
<p>Enabled when m_Options has CHNK_OPTION_CHN. Skip if not have.</p>
|
|
</td>
|
|
<td>
|
|
<table>
|
|
<tr>
|
|
<td><code>uint32 m_ManagerListSize</code></td>
|
|
<td><code>uint32[] m_ManagerList</code></td>
|
|
</tr>
|
|
</table>
|
|
<p>Enabled when m_Options has CHNK_OPTION_MAN. Skip if not have.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>Core Data Format</h2>
|
|
<p>
|
|
This section introduce the format of CKStateChunk core data, the format of <code>m_pData</code>.<br />
|
|
The core data is filled by various Identifiers following various data.<br />
|
|
It is related to the function of CKStateChunk.
|
|
</p>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<table id="core-data-fmt-item">
|
|
<tr>
|
|
<td><code>uint32 m_Identifier</code></td>
|
|
<td><code>uint32 m_NextIdentifier</code></td>
|
|
<td><code>uint32[] m_Payload</code></td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
A single identifier area.<br />
|
|
m_Identifier is the unique magic word of this identifier area for CKStateChunk locating this area.<br />
|
|
m_NextIdentifier is a relative pointer. It point to the m_Identifier in next identifier area and is relative to the start of core data.<br />
|
|
Thus, the size of each identifier area can be simply computed by the absolute diff to adjacent m_NextIdentifier (<code>*m_pData[pos] - pos</code>)<br />
|
|
m_Payload is the data of this identifier area and can be read or written by various CKStateChunk read write functions.<br />
|
|
The minimum block size of m_Payload is uint32. It mean that all data must be aligned to uint32 boundary when saving.
|
|
</p>
|
|
</td>
|
|
<td>
|
|
<table class="ph" target="core-data-fmt-item"></table>
|
|
</td>
|
|
<td>
|
|
<code>...</code>
|
|
<p>More identifier area as much as you like.</p>
|
|
</td>
|
|
<td>
|
|
<table class="ph" target="core-data-fmt-item"></table>
|
|
<p>The last m_NextIdentifier should set to zero to indicate the end of the series of identifier area.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>SubChunk Format</h2>
|
|
<p>According to the value of CK_STATECHUNK_CHUNKVERSION, we split it into 3 different format.</p>
|
|
<ul>
|
|
<li>value < CHUNK_VERSION1: Very Old Format</li>
|
|
<li>value = CHUNK_VERSION1: Old Format</li>
|
|
<li>value > CHUNK_VERSION1: New Format</li>
|
|
</ul>
|
|
<h3>Very Old Format</h3>
|
|
<table>
|
|
<tr>
|
|
<td id="subchk-fmt-vold-SubChunkSize">
|
|
<code>uint32 m_SubChunkSize</code>
|
|
<p>The sum of all following variables' size.</p>
|
|
</td>
|
|
<td id="subchk-fmt-vold-ClassId">
|
|
<code>uint32 m_ClassId</code>
|
|
<p>The CK_CLASSID of sub chunk.</p>
|
|
</td>
|
|
<td id="subchk-fmt-vold-DataDwSize">
|
|
<code>uint32 m_DataDwSize</code>
|
|
<p>The size of core data in sub chunk.</p>
|
|
</td>
|
|
<td>
|
|
<code><i>uint32 Blank</i></code>
|
|
<p>A blank. I don't know why</p>
|
|
</td>
|
|
<td id="subchk-fmt-vold-pData">
|
|
<code>uint32[] m_pData</code>
|
|
<p>The core data. Its length is indicated by m_DataDwSize.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<h3>Old Format</h3>
|
|
<table>
|
|
<tr>
|
|
<td class="ph" target="subchk-fmt-vold-SubChunkSize"></td>
|
|
<td class="ph" target="subchk-fmt-vold-ClassId"></td>
|
|
<td id="subchk-fmt-old-DataVersion">
|
|
<code>uint16 m_DataVersion</code>
|
|
<p>The CK_STATECHUNK_DATAVERSION of sub chunk.</p>
|
|
</td>
|
|
<td id="subchk-fmt-old-ChunkVersion">
|
|
<code>uint16 m_ChunkVersion</code>
|
|
<p>The CK_STATECHUNK_CHUNKVERSION of sub chunk.</p>
|
|
</td>
|
|
<td class="ph" target="subchk-fmt-vold-DataDwSize"></td>
|
|
<td id="subchk-fmt-old-ObjectListSize">
|
|
<code>uint32 m_ObjectListSize</code>
|
|
<p>The size of sub chunk object list.</p>
|
|
</td>
|
|
<td id="subchk-fmt-old-ChunkListSize">
|
|
<code>uint32 m_ChunkListSize</code>
|
|
<p>The size of sub chunk chunk list</p>
|
|
</td>
|
|
<td class="ph" target="subchk-fmt-vold-pData"></td>
|
|
<td id="subchk-fmt-old-ObjectList">
|
|
<code>uint32[] m_ObjectList</code>
|
|
<p>The object list. Its length is indicated by m_ObjectListSize.</p>
|
|
</td>
|
|
<td id="subchk-fmt-old-ChunkList">
|
|
<code>uint32[] m_ChunkList</code>
|
|
<p>The chunk list. Its length is indicated by m_ChunkListSize.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<h3>New Format</h3>
|
|
<table>
|
|
<tr>
|
|
<td class="ph" target="subchk-fmt-vold-SubChunkSize"></td>
|
|
<td class="ph" target="subchk-fmt-vold-ClassId"></td>
|
|
<td class="ph" target="subchk-fmt-old-DataVersion"></td>
|
|
<td class="ph" target="subchk-fmt-old-ChunkVersion"></td>
|
|
<td class="ph" target="subchk-fmt-vold-DataDwSize"></td>
|
|
<td class="ph" target="subchk-fmt-old-ObjectListSize"></td>
|
|
<td class="ph" target="subchk-fmt-old-ChunkListSize"></td>
|
|
<td>
|
|
<code>uint32 m_ManagerListSize</code>
|
|
<p>The size of sub chunk manager list</p>
|
|
</td>
|
|
<td class="ph" target="subchk-fmt-vold-pData"></td>
|
|
<td class="ph" target="subchk-fmt-old-ObjectList"></td>
|
|
<td class="ph" target="subchk-fmt-old-ChunkList"></td>
|
|
<td>
|
|
<code>uint32[] m_ManagerList</code>
|
|
<p>The manager list. Its length is indicated by m_ManagerListSize.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
</body> |