RegisterArc.h 893 B

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