5#if !defined(CARCHIVE_INCLUDE_H)
6#define CARCHIVE_INCLUDE_H
14BEGIN_MOOTOOLS_NAMESPACE
32 void *GetData()
const;
33 void SetData(
void *data);
34 bool IsLoading()
const;
35 bool IsStoring()
const;
90 CXObject* ReadObject(
const CXRuntimeClassPtr
pClass);
91 void WriteObject(
const CXObject*
pOb);
103 unsigned int GetObjectSchema()
const;
115 bool userBuffer, directBuffer;
118 unsigned char *buffer;
119 unsigned char *curBufferPos;
120 unsigned char *maxBufferPos;
129 typedef const void *storedPtr;
130 typedef struct loadedPtr
140 unsigned int storedVersion;
142 loadedPtr() : ptr(
NULL), type(XUndefined), storedVersion((
unsigned int)-1)
146 loadedPtr(
const CXObject *
object) : ptr(
object), type(XObjectPtr), storedVersion((
unsigned int)-1)
150 unsigned int lastObjectVersion;
151 unsigned int curStoredCount;
157#ifdef MOOTOOLS_PRIVATE_DEBUG
164 inline bool CXArchive::IsLoading()
const
166 return (flags & CXArchive::load) != 0;
169 inline bool CXArchive::IsStoring()
const
171 return (flags & CXArchive::load) == 0;
174 inline CXFile* CXArchive::GetFile()
const
180 #define EXARCHIVE_STORE(TYPE, val) \
182 XThrowExceptionWithArgs(CXArchiveException, CXArchiveException::readOnly, filename); \
183 if (curBufferPos + sizeof(TYPE) > maxBufferPos) \
185 *((TYPE *)curBufferPos) = val; \
186 curBufferPos += sizeof(TYPE); \
191 EXARCHIVE_STORE(
char,
by);
194 inline CXArchive& CXArchive::operator<<(
unsigned char by)
196 return CXArchive::operator << (static_cast<char>(
by));
199 inline CXArchive& CXArchive::operator<<(
bool b)
201 return CXArchive::operator << ((
char)(b ? 1 : 0));
206 EXARCHIVE_STORE(
wchar_t,
tch);
216 return CXArchive::operator << (static_cast<longint>(
mylonguint));
219 inline CXArchive& CXArchive::operator<<(
short w)
221 EXARCHIVE_STORE(
short, w);
224 inline CXArchive& CXArchive::operator<<(
unsigned short w)
226 return CXArchive::operator << (static_cast<short>(w));
229 inline CXArchive& CXArchive::operator<<(
int i)
231 EXARCHIVE_STORE(
int,
i);
234 inline CXArchive& CXArchive::operator<<(
unsigned int i)
236 return CXArchive::operator << (static_cast<int>(
i));
249 inline CXArchive& CXArchive::operator<<(
float f)
251 EXARCHIVE_STORE(
float,
f);
254 inline CXArchive& CXArchive::operator<<(
double d)
256 EXARCHIVE_STORE(
double,
d);
259 #undef EXARCHIVE_STORE
262 #define EXARCHIVE_LOAD(TYPE, val) \
264 XThrowExceptionWithArgs(CXArchiveException, CXArchiveException::writeOnly, filename); \
265 if (curBufferPos + sizeof(TYPE) > maxBufferPos) \
266 FillBuffer(sizeof(TYPE) - (SIZET)(maxBufferPos - curBufferPos)); \
267 val = *((TYPE *)curBufferPos); \
268 curBufferPos += sizeof(TYPE); \
273 EXARCHIVE_LOAD(
char,
by);
276 inline CXArchive& CXArchive::operator>>(
unsigned char&
by)
278 EXARCHIVE_LOAD(
unsigned char,
by);
281 inline CXArchive& CXArchive::operator>>(
bool& b)
284 EXARCHIVE_LOAD(
char,
tmp);
290 EXARCHIVE_LOAD(
wchar_t,
tch);
303 inline CXArchive& CXArchive::operator>>(
short&
s)
305 EXARCHIVE_LOAD(
short,
s);
308 inline CXArchive& CXArchive::operator>>(
unsigned short&
s)
310 EXARCHIVE_LOAD(
unsigned short,
s);
313 inline CXArchive& CXArchive::operator>>(
int&
i)
315 EXARCHIVE_LOAD(
int,
i);
318 inline CXArchive& CXArchive::operator>>(
unsigned int&
i)
320 EXARCHIVE_LOAD(
unsigned int,
i);
333 inline CXArchive& CXArchive::operator>>(
float&
f)
335 EXARCHIVE_LOAD(
float,
f);
338 inline CXArchive& CXArchive::operator>>(
double&
d)
340 EXARCHIVE_LOAD(
double,
d);
343 inline CXArchive& CXArchive::operator<<(
const CXObject*
pOb)
355 inline CXArchive& CXArchive::operator>>(
const CXObject*&
pOb)
361 #undef EXARCHIVE_LOAD
364END_MOOTOOLS_NAMESPACE
Associates key to a single value through an hash table.
The class defines an x, y, z 3D point which can use int, float or double.
Definition 3DPoint.h:27
CXFile is the base class for CXStdioFile, CXStdioFileEx, CXMemFile.
Definition XFile.h:42