header.h 611 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef NULLSOFT_APEV2_HEADER_H
  2. #define NULLSOFT_APEV2_HEADER_H
  3. #include <bfc/platform/types.h>
  4. namespace APEv2
  5. {
  6. #pragma pack(push, 1)
  7. struct HeaderData
  8. {
  9. uint64_t preamble;
  10. uint32_t version;
  11. uint32_t size;
  12. uint32_t items;
  13. uint32_t flags;
  14. uint16_t reserved;
  15. };
  16. #pragma pack(pop)
  17. class Header
  18. {
  19. public:
  20. Header(void *data);
  21. Header(const HeaderData *data);
  22. bool Valid();
  23. uint32_t TagSize();
  24. bool HasHeader();
  25. bool HasFooter();
  26. bool IsFooter();
  27. bool IsHeader();
  28. int Encode(void *data, size_t len);
  29. uint32_t GetFlags();
  30. enum
  31. {
  32. SIZE=32,
  33. };
  34. private:
  35. HeaderData headerData;
  36. };
  37. }
  38. #endif