00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _ID3LIB_HEADER_TAG_H_
00030 #define _ID3LIB_HEADER_TAG_H_
00031
00032 #include "header.h"
00033
00034 class ID3_TagHeader : public ID3_Header
00035 {
00036 public:
00037
00038 enum
00039 {
00040 HEADER_FLAG_UNSYNC = 1 << 7,
00041 HEADER_FLAG_EXTENDED = 1 << 6,
00042 HEADER_FLAG_EXPERIMENTAL = 1 << 5,
00043 HEADER_FLAG_FOOTER = 1 << 4
00044 };
00045
00046 enum
00047 {
00048 EXT_HEADER_FLAG_BIT1 = 1 << 7,
00049 EXT_HEADER_FLAG_BIT2 = 1 << 6,
00050 EXT_HEADER_FLAG_BIT3 = 1 << 5,
00051 EXT_HEADER_FLAG_BIT4 = 1 << 4
00052 };
00053
00054 ID3_TagHeader() : ID3_Header() { ; }
00055 virtual ~ID3_TagHeader() { ; }
00056 ID3_TagHeader(const ID3_TagHeader& rhs) : ID3_Header() { *this = rhs; }
00057
00058 bool SetSpec(ID3_V2Spec);
00059 size_t Size() const;
00060 void Render(ID3_Writer&) const;
00061 bool Parse(ID3_Reader&);
00062 void ParseExtended(ID3_Reader&);
00063 ID3_TagHeader& operator=(const ID3_TagHeader&hdr)
00064 { this->ID3_Header::operator=(hdr); return *this; }
00065
00066 bool SetUnsync(bool b)
00067 {
00068 bool changed = _flags.set(HEADER_FLAG_UNSYNC, b);
00069 _changed = _changed || changed;
00070 return changed;
00071 }
00072 bool GetUnsync() const { return _flags.test(HEADER_FLAG_UNSYNC); }
00073 bool SetExtended(bool b)
00074 {
00075 bool changed = _flags.set(HEADER_FLAG_EXTENDED, b);
00076 _changed = _changed || changed;
00077 return changed;
00078 }
00079 bool GetExtended() const { return _flags.test(HEADER_FLAG_EXTENDED); }
00080 bool SetExperimental(bool b)
00081 {
00082 bool changed = _flags.set(HEADER_FLAG_EXPERIMENTAL, b);
00083 _changed = _changed || changed;
00084 return changed;
00085 }
00086 bool GetExperimental() const { return _flags.test(HEADER_FLAG_EXPERIMENTAL); }
00087 bool SetFooter(bool b)
00088 {
00089 bool changed = _flags.set(HEADER_FLAG_FOOTER, b);
00090 _changed = _changed || changed;
00091 return changed;
00092 }
00093 bool GetFooter() const { return _flags.test(HEADER_FLAG_FOOTER); }
00094
00095
00096
00097
00098
00099
00100 static const char* const ID;
00101 enum
00102 {
00103 ID_SIZE = 3,
00104 MAJOR_OFFSET = 3,
00105 MINOR_OFFSET = 4,
00106 FLAGS_OFFSET = 5,
00107 SIZE_OFFSET = 6,
00108 SIZE = 10
00109 };
00110
00111 };
00112
00113 #endif