12#ifndef TT_INCLUDE_CHUNKCLASS_H
13#define TT_INCLUDE_CHUNKCLASS_H
14#include "engine_string.h"
16 unsigned long ChunkType;
17 unsigned long ChunkSize;
20struct MicroChunkHeader {
21 unsigned char ChunkType;
22 unsigned char ChunkSize;
25struct MicroChunkHeader2 {
26 unsigned short ChunkType;
27 unsigned short ChunkSize;
30struct IOVector2Struct {
35struct IOVector3Struct {
41struct IOVector4Struct {
48struct IOQuaternionStruct {
52class SCRIPTS_API ChunkLoadClass {
56 unsigned long PositionStack[256];
57 ChunkHeader HeaderStack[256];
59 int MicroChunkPosition;
60 MicroChunkHeader MCHeader;
62 ChunkLoadClass(FileClass *file);
64 bool Peek_Next_Chunk(
unsigned int *
id,
unsigned int *length);
66 unsigned long Cur_Chunk_ID();
67 unsigned long Cur_Chunk_Length();
68 int Cur_Chunk_Depth();
69 int Contains_Chunks();
70 bool Open_Micro_Chunk();
71 bool Close_Micro_Chunk();
72 unsigned long Cur_Micro_Chunk_ID();
73 unsigned long Cur_Micro_Chunk_Length();
74 long Seek(
unsigned long nbytes);
75 long Read(
void *buf,
unsigned long nbytes);
76 long Read(IOVector2Struct *v);
77 long Read(IOVector3Struct *v);
78 long Read(IOVector4Struct *v);
79 long Read(IOQuaternionStruct *q);
80 long Read(StringClass&
string);
83 template<
typename T> TT_INLINE
long SimpleRead(T& buf)
85 int length = Read(&buf,
sizeof(T));
86 TT_ASSERT(length ==
sizeof(T))
91class SCRIPTS_API ChunkSaveClass {
94 int PositionStack[256];
95 ChunkHeader HeaderStack[256];
97 int MicroChunkPosition;
98 MicroChunkHeader MCHeader;
100 ChunkSaveClass(FileClass *file);
101 void Set_Contains_Chunks()
103 HeaderStack[StackIndex-1].ChunkSize |= 0x80000000;
105 bool Begin_Chunk(
unsigned long id);
107 int Cur_Chunk_Depth();
108 unsigned int Cur_Chunk_Length();
109 bool Begin_Micro_Chunk(
unsigned long id);
110 bool End_Micro_Chunk();
111 unsigned long Write(
void* buf,
unsigned long nbytes);
112 unsigned long Write(IOVector2Struct& v);
113 unsigned long Write(IOVector3Struct& v);
114 unsigned long Write(IOVector4Struct& v);
115 unsigned long Write(IOQuaternionStruct& q);
116 unsigned long Write(
const StringClass& sting);
119 template<
typename T> TT_INLINE
long SimpleWrite(
const T& buf)
121 int length = Write((
void*)&buf,
sizeof(T));
122 TT_ASSERT(length ==
sizeof(T))