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