Upload 2.0.2
[physicsfs] / lzma / CPP / 7zip / Common / RegisterArc.h
1 // RegisterArc.h
2
3 #ifndef __REGISTERARC_H
4 #define __REGISTERARC_H
5
6 #include "../Archive/IArchive.h"
7
8 typedef IInArchive * (*CreateInArchiveP)();
9 typedef IOutArchive * (*CreateOutArchiveP)();
10
11 struct CArcInfo
12 {
13   const wchar_t *Name;
14   const wchar_t *Ext;
15   const wchar_t *AddExt;
16   Byte ClassId;
17   Byte Signature[16];
18   int SignatureSize;
19   bool KeepName;
20   CreateInArchiveP CreateInArchive;
21   CreateOutArchiveP CreateOutArchive;
22 };
23
24 void RegisterArc(const CArcInfo *arcInfo);
25
26 #define REGISTER_ARC_NAME(x) CRegister ## x 
27
28 #define REGISTER_ARC_DEC_SIG(x) struct REGISTER_ARC_NAME(x) { \
29     REGISTER_ARC_NAME(x)() { g_ArcInfo.Signature[0]--; RegisterArc(&g_ArcInfo); }}; \
30     static REGISTER_ARC_NAME(x) g_RegisterArc;
31
32 #define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) { \
33     REGISTER_ARC_NAME(x)() { RegisterArc(&g_ArcInfo); }}; \
34     static REGISTER_ARC_NAME(x) g_RegisterArc;
35
36 #endif