#pragma once #include "foundation/types.h" namespace ID3v2 { class Header { public: Header(); Header(uint8_t version, uint8_t revision); Header(const void *data); Header(const Header *copy, uint32_t new_size); void Parse(const void *data); int Serialize(void *data); int SerializeAsHeader(void *data); int SerializeAsFooter(void *data); /* Does this seem like a valid ID3v2 header? */ bool Valid() const; bool FooterValid() const; /* how much space the tag occupies on disk */ uint32_t TagSize() const; bool HasExtendedHeader() const; uint8_t GetVersion() const; uint8_t GetRevision() const; bool Unsynchronised() const; bool HasFooter() const; void SetFooter(bool footer); enum { SIZE=10, }; void ClearExtendedHeader(); void ClearUnsynchronized(); private: uint8_t marker[3]; uint8_t version; uint8_t revision; uint8_t flags; uint32_t size; }; }