xref: /aosp_15_r20/external/lzma/CPP/7zip/Common/RegisterArc.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // RegisterArc.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_REGISTER_ARC_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_REGISTER_ARC_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../Archive/IArchive.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker struct CArcInfo
9*f6dc9357SAndroid Build Coastguard Worker {
10*f6dc9357SAndroid Build Coastguard Worker   UInt32 Flags;
11*f6dc9357SAndroid Build Coastguard Worker   Byte Id;
12*f6dc9357SAndroid Build Coastguard Worker   Byte SignatureSize;
13*f6dc9357SAndroid Build Coastguard Worker   UInt16 SignatureOffset;
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker   const Byte *Signature;
16*f6dc9357SAndroid Build Coastguard Worker   const char *Name;
17*f6dc9357SAndroid Build Coastguard Worker   const char *Ext;
18*f6dc9357SAndroid Build Coastguard Worker   const char *AddExt;
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker   UInt32 TimeFlags;
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker   Func_CreateInArchive CreateInArchive;
23*f6dc9357SAndroid Build Coastguard Worker   Func_CreateOutArchive CreateOutArchive;
24*f6dc9357SAndroid Build Coastguard Worker   Func_IsArc IsArc;
25*f6dc9357SAndroid Build Coastguard Worker 
IsMultiSignatureCArcInfo26*f6dc9357SAndroid Build Coastguard Worker   bool IsMultiSignature() const { return (Flags & NArcInfoFlags::kMultiSignature) != 0; }
27*f6dc9357SAndroid Build Coastguard Worker };
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker void RegisterArc(const CArcInfo *arcInfo) throw();
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker 
32*f6dc9357SAndroid Build Coastguard Worker #define IMP_CreateArcIn_2(c) \
33*f6dc9357SAndroid Build Coastguard Worker   static IInArchive *CreateArc() { return new c; }
34*f6dc9357SAndroid Build Coastguard Worker 
35*f6dc9357SAndroid Build Coastguard Worker #define IMP_CreateArcIn IMP_CreateArcIn_2(CHandler())
36*f6dc9357SAndroid Build Coastguard Worker 
37*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_EXTRACT_ONLY
38*f6dc9357SAndroid Build Coastguard Worker   #define IMP_CreateArcOut
39*f6dc9357SAndroid Build Coastguard Worker   #define CreateArcOut NULL
40*f6dc9357SAndroid Build Coastguard Worker #else
41*f6dc9357SAndroid Build Coastguard Worker   #define IMP_CreateArcOut static IOutArchive *CreateArcOut() { return new CHandler(); }
42*f6dc9357SAndroid Build Coastguard Worker #endif
43*f6dc9357SAndroid Build Coastguard Worker 
44*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_V(n, e, ae, id, sigSize, sig, offs, flags, tf, crIn, crOut, isArc) \
45*f6dc9357SAndroid Build Coastguard Worker   static const CArcInfo g_ArcInfo = { flags, id, sigSize, offs, sig, n, e, ae, tf, crIn, crOut, isArc } ; \
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_R(n, e, ae, id, sigSize, sig, offs, flags, tf, crIn, crOut, isArc) \
48*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_V      (n, e, ae, id, sigSize, sig, offs, flags, tf, crIn, crOut, isArc) \
49*f6dc9357SAndroid Build Coastguard Worker   struct CRegisterArc { CRegisterArc() { RegisterArc(&g_ArcInfo); }}; \
50*f6dc9357SAndroid Build Coastguard Worker   static CRegisterArc g_RegisterArc;
51*f6dc9357SAndroid Build Coastguard Worker 
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_I_CLS(cls, n, e, ae, id, sig, offs, flags, isArc) \
54*f6dc9357SAndroid Build Coastguard Worker   IMP_CreateArcIn_2(cls) \
55*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_R(n, e, ae, id, Z7_ARRAY_SIZE(sig), sig, offs, flags, 0, CreateArc, NULL, isArc)
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_I_CLS_NO_SIG(cls, n, e, ae, id, offs, flags, isArc) \
58*f6dc9357SAndroid Build Coastguard Worker   IMP_CreateArcIn_2(cls) \
59*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_R(n, e, ae, id, 0, NULL, offs, flags, 0, CreateArc, NULL, isArc)
60*f6dc9357SAndroid Build Coastguard Worker 
61*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_I(n, e, ae, id, sig, offs, flags, isArc) \
62*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_I_CLS(CHandler(), n, e, ae, id, sig, offs, flags, isArc)
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_I_NO_SIG(n, e, ae, id, offs, flags, isArc) \
65*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_I_CLS_NO_SIG(CHandler(), n, e, ae, id, offs, flags, isArc)
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker 
68*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_IO(n, e, ae, id, sig, offs, flags, tf, isArc) \
69*f6dc9357SAndroid Build Coastguard Worker   IMP_CreateArcIn \
70*f6dc9357SAndroid Build Coastguard Worker   IMP_CreateArcOut \
71*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_R(n, e, ae, id, Z7_ARRAY_SIZE(sig), sig, offs, flags, tf, CreateArc, CreateArcOut, isArc)
72*f6dc9357SAndroid Build Coastguard Worker 
73*f6dc9357SAndroid Build Coastguard Worker #define REGISTER_ARC_IO_DECREMENT_SIG(n, e, ae, id, sig, offs, flags, tf, isArc) \
74*f6dc9357SAndroid Build Coastguard Worker   IMP_CreateArcIn \
75*f6dc9357SAndroid Build Coastguard Worker   IMP_CreateArcOut \
76*f6dc9357SAndroid Build Coastguard Worker   REGISTER_ARC_V(n, e, ae, id, Z7_ARRAY_SIZE(sig), sig, offs, flags, tf, CreateArc, CreateArcOut, isArc) \
77*f6dc9357SAndroid Build Coastguard Worker   struct CRegisterArcDecSig { CRegisterArcDecSig() { sig[0]--; RegisterArc(&g_ArcInfo); }}; \
78*f6dc9357SAndroid Build Coastguard Worker   static CRegisterArcDecSig g_RegisterArc;
79*f6dc9357SAndroid Build Coastguard Worker 
80*f6dc9357SAndroid Build Coastguard Worker #endif
81