Source code

Revision control

Copy as Markdown

Other Tools

// RegisterArc.h↩
#ifndef __REGISTER_ARC_H↩
#define __REGISTER_ARC_H↩
#include "../Archive/IArchive.h"
struct CArcInfo↩
{↩
UInt16 Flags;↩
Byte Id;↩
Byte SignatureSize;↩
UInt16 SignatureOffset;↩
const Byte *Signature;↩
const char *Name;↩
const char *Ext;↩
const char *AddExt;↩
Func_CreateInArchive CreateInArchive;↩
Func_CreateOutArchive CreateOutArchive;↩
Func_IsArc IsArc;↩
bool IsMultiSignature() const { return (Flags & NArcInfoFlags::kMultiSignature) != 0; }↩
};↩
void RegisterArc(const CArcInfo *arcInfo) throw();↩
#define IMP_CreateArcIn_2(c) \↩
static IInArchive *CreateArc() { return new c; }↩
#define IMP_CreateArcIn IMP_CreateArcIn_2(CHandler())↩
#ifdef EXTRACT_ONLY↩
#define IMP_CreateArcOut↩
#define CreateArcOut NULL↩
#else
#define IMP_CreateArcOut static IOutArchive *CreateArcOut() { return new CHandler(); }↩
#endif
#define REGISTER_ARC_V(n, e, ae, id, sigSize, sig, offs, flags, crIn, crOut, isArc) \↩
static const CArcInfo g_ArcInfo = { flags, id, sigSize, offs, sig, n, e, ae, crIn, crOut, isArc } ; \↩
#define REGISTER_ARC_R(n, e, ae, id, sigSize, sig, offs, flags, crIn, crOut, isArc) \↩
REGISTER_ARC_V(n, e, ae, id, sigSize, sig, offs, flags, crIn, crOut, isArc) \↩
struct CRegisterArc { CRegisterArc() { RegisterArc(&g_ArcInfo); }}; \↩
static CRegisterArc g_RegisterArc;↩
#define REGISTER_ARC_I_CLS(cls, n, e, ae, id, sig, offs, flags, isArc) \↩
IMP_CreateArcIn_2(cls) \↩
REGISTER_ARC_R(n, e, ae, id, ARRAY_SIZE(sig), sig, offs, flags, CreateArc, NULL, isArc)↩
#define REGISTER_ARC_I_CLS_NO_SIG(cls, n, e, ae, id, offs, flags, isArc) \↩
IMP_CreateArcIn_2(cls) \↩
REGISTER_ARC_R(n, e, ae, id, 0, NULL, offs, flags, CreateArc, NULL, isArc)↩
#define REGISTER_ARC_I(n, e, ae, id, sig, offs, flags, isArc) \↩
REGISTER_ARC_I_CLS(CHandler(), n, e, ae, id, sig, offs, flags, isArc)↩
#define REGISTER_ARC_I_NO_SIG(n, e, ae, id, offs, flags, isArc) \↩
REGISTER_ARC_I_CLS_NO_SIG(CHandler(), n, e, ae, id, offs, flags, isArc)↩
#define REGISTER_ARC_IO(n, e, ae, id, sig, offs, flags, isArc) \↩
IMP_CreateArcIn \↩
IMP_CreateArcOut \↩
REGISTER_ARC_R(n, e, ae, id, ARRAY_SIZE(sig), sig, offs, flags, CreateArc, CreateArcOut, isArc)↩
#define REGISTER_ARC_IO_DECREMENT_SIG(n, e, ae, id, sig, offs, flags, isArc) \↩
IMP_CreateArcIn \↩
IMP_CreateArcOut \↩
REGISTER_ARC_V(n, e, ae, id, ARRAY_SIZE(sig), sig, offs, flags, CreateArc, CreateArcOut, isArc) \↩
struct CRegisterArcDecSig { CRegisterArcDecSig() { sig[0]--; RegisterArc(&g_ArcInfo); }}; \↩
static CRegisterArcDecSig g_RegisterArc;↩
#endif