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 #ifndef _ID3LIB_HEADER_TAG_H_
00029 #define _ID3LIB_HEADER_TAG_H_
00030
00031 #include "header.h"
00032
00033 class ID3_TagHeader : public ID3_Header
00034 {
00035 public:
00036
00037 enum
00038 {
00039 UNSYNC = 1 << 7,
00040 EXTENDED = 1 << 6,
00041 EXPERIMENTAL = 1 << 5
00042 };
00043
00044 ID3_TagHeader() : ID3_Header() { ; }
00045 virtual ~ID3_TagHeader() { ; }
00046 ID3_TagHeader(const ID3_TagHeader& rhs) : ID3_Header() { *this = rhs; }
00047
00048 bool SetSpec(ID3_V2Spec);
00049 size_t Size() const;
00050 void Render(ID3_Writer&) const;
00051 bool Parse(ID3_Reader&);
00052 ID3_TagHeader& operator=(const ID3_TagHeader&hdr)
00053 { this->ID3_Header::operator=(hdr); return *this; }
00054
00055 bool SetUnsync(bool b)
00056 {
00057 bool changed = _flags.set(UNSYNC, b);
00058 _changed = _changed || changed;
00059 return changed;
00060 }
00061 bool GetUnsync() const { return _flags.test(UNSYNC); }
00062 bool SetExtended(bool b)
00063 {
00064 bool changed = _flags.set(EXTENDED, b);
00065 _changed = _changed || changed;
00066 return changed;
00067 }
00068 bool GetExtended() const { return _flags.test(EXTENDED); }
00069 bool SetExperimental(bool b)
00070 {
00071 bool changed = _flags.set(EXPERIMENTAL, b);
00072 _changed = _changed || changed;
00073 return changed;
00074 }
00075 bool GetExperimental() const { return _flags.test(EXPERIMENTAL); }
00076
00077
00078
00079
00080
00081
00082 static const char* const ID;
00083 enum
00084 {
00085 ID_SIZE = 3,
00086 MAJOR_OFFSET = 3,
00087 MINOR_OFFSET = 4,
00088 FLAGS_OFFSET = 5,
00089 SIZE_OFFSET = 6,
00090 SIZE = 10
00091 };
00092
00093 };
00094
00095 #endif