32#define ARCHIVE_NULL_POINTER (-654321)
33#define ARCHIVE_POINTER_VALID (0)
34#define ARCHIVE_POINTER_NULL (ARCHIVE_NULL_POINTER)
35#define ARCHIVE_POINTER_SELF_REFERENTIAL (-123456)
36#define ARCHIVE_USE_TYPES
56using fileSize_t = uint32_t;
73 const char *Filename(
void);
78 qboolean Seek(
size_t newpos);
79 qboolean OpenRead(
const char *name);
80 qboolean OpenWrite(
const char *name);
81 qboolean Read(
void *dest,
size_t size);
82 qboolean Write(
const void *source,
size_t size);
101 void CheckRead(
void);
102 void CheckType(
int type);
104 fileSize_t ReadSize(
void);
105 void CheckSize(
int type, fileSize_t size);
106 void ArchiveData(
int type,
void *data,
size_t size);
108 void CheckWrite(
void);
109 void WriteType(
int type);
110 void WriteSize(fileSize_t size);
115 void FileError(
const char *fmt, ...);
118 qboolean Read(
str& name, qboolean harderror = qtrue);
119 qboolean Read(
const char *name, qboolean harderror = qtrue);
120 Class *ReadObject(
void);
122 qboolean Create(
str& name, qboolean harderror = qtrue);
123 qboolean Create(
const char *name, qboolean harderror = qtrue);
125 qboolean Loading(
void);
126 qboolean Saving(
void);
127 qboolean NoErrors(
void);
129 void ArchiveVector(
Vector *vec);
130 void ArchiveQuat(
Quat *quat);
131 void ArchiveInteger(
int *num);
132 void ArchiveUnsigned(
unsigned *unum);
133 void ArchiveSize(
long *unum);
134 void ArchiveByte(
byte *num);
135 void ArchiveChar(
char *ch);
136 void ArchiveShort(
short *num);
137 void ArchiveUnsignedShort(
unsigned short *num);
138 void ArchiveFloat(
float *num);
139 void ArchiveDouble(
double *num);
140 void ArchiveBoolean(qboolean *
boolean);
141 void ArchiveString(
str *
string);
143 void ArchiveObjectPointer(
Class **ptr);
146 void ArchiveEventPointer(
Event **ev);
147 void ArchiveBool(
bool *
boolean);
148 void ArchivePosition(
int *pos);
149 void ArchiveSvsTime(
int *time);
150 void ArchiveVec2(vec2_t vec);
151 void ArchiveVec3(vec3_t vec);
152 void ArchiveVec4(vec4_t vec);
154 void ArchiveRaw(
void *data,
size_t size);
155 void ArchiveObject(
Class *obj);
158 qboolean ObjectPositionExists(
void *obj);
161 size_t Counter()
const;
163 void ArchiveConfigString(
int cs);
164 void SetSilent(
bool bSilent);
168inline void Container<Type>::Archive(
Archiver& arc,
void (*ArchiveFunc)(
Archiver& arc, Type *obj))
175 arc.ArchiveInteger(&num);
178 if (num > numobjects) {
182 for (i = 0; i < num; i++) {
183 obj =
new (objlist + i) Type();
184 ArchiveFunc(arc, obj);
188 arc.ArchiveInteger(&num);
190 for (i = 0; i < num; i++) {
191 ArchiveFunc(arc, &objlist[i]);
197inline void Container<str>::Archive(
Archiver& arc)
203 arc.ArchiveInteger(&num);
207 arc.ArchiveInteger(&num);
209 for (i = 1; i <= num; i++) {
210 arc.ArchiveString(AddressOfObjectAt(i));
215inline void Container<Vector>::Archive(
Archiver& arc)
221 arc.ArchiveInteger(&num);
225 arc.ArchiveInteger(&num);
227 for (i = 1; i <= num; i++) {
228 arc.ArchiveVector(AddressOfObjectAt(i));
233inline void Container<int>::Archive(
Archiver& arc)
239 arc.ArchiveInteger(&num);
243 arc.ArchiveInteger(&num);
245 for (i = 1; i <= num; i++) {
246 arc.ArchiveInteger(AddressOfObjectAt(i));
251inline void Container<float>::Archive(
Archiver& arc)
257 arc.ArchiveInteger(&num);
261 arc.ArchiveInteger(&num);
263 for (i = 1; i <= num; i++) {
264 arc.ArchiveFloat(AddressOfObjectAt(i));
269inline void ArchiveClass(
Archiver& arc, c *obj)
271 arc.ArchiveObject(obj);
274template<
typename Type>
275void Container<Type>::Archive(
Archiver& arc)
277 Archive(arc, ArchiveClass<Type>);
282template<
typename key,
typename value>
289 arc.ArchiveUnsigned(&tableLength);
290 arc.ArchiveUnsigned(&threshold);
291 arc.ArchiveUnsigned(&count);
292 arc.ArchiveUnsignedShort(&tableLengthIndex);
295 if (tableLength != 1) {
296 table =
new (NewTable(tableLength)) Entry *[tableLength]();
297 memset(table, 0, tableLength *
sizeof(Entry *));
300 for (i = 0; i < count; i++) {
304 hash = HashCode<key>(e->GetKey()) % tableLength;
306 e->next = table[hash];
317 for (i = 0; i < tableLength; i++) {
318 for (e = table[i]; e != NULL; e = e->next) {
324 assert(total == count);
326 for (i = 0; i < tableLength; i++) {
327 for (e = table[i]; e != NULL; e = e->next) {
335template<
typename key,
typename value>
338 m_con_set.Archive(arc);
343#define ArchiveEnum(thing, type) \
347 tempInt = (int)(thing); \
348 arc.ArchiveInteger(&tempInt); \
349 (thing) = (type)tempInt; \
Definition container.h:85
Definition listener.h:246
Definition lightclass.h:30