using namespace TagLib;
using namespace ID3v1;
+namespace
+{
+ const ID3v1::StringHandler defaultStringHandler;
+ const ID3v1::StringHandler *stringHandler = &defaultStringHandler;
+}
+
class ID3v1::Tag::TagPrivate
{
public:
String comment;
uchar track;
uchar genre;
-
- static const StringHandler *stringHandler;
};
-static const StringHandler defaultStringHandler;
-const ID3v1::StringHandler *ID3v1::Tag::TagPrivate::stringHandler = &defaultStringHandler;
-
////////////////////////////////////////////////////////////////////////////////
// StringHandler implementation
////////////////////////////////////////////////////////////////////////////////
ByteVector ID3v1::StringHandler::render(const String &s) const
{
- if(!s.isLatin1())
- {
+ if(s.isLatin1())
+ return s.data(String::Latin1);
+ else
return ByteVector();
- }
-
- return s.data(String::Latin1);
}
////////////////////////////////////////////////////////////////////////////////
ByteVector data;
data.append(fileIdentifier());
- data.append(TagPrivate::stringHandler->render(d->title).resize(30));
- data.append(TagPrivate::stringHandler->render(d->artist).resize(30));
- data.append(TagPrivate::stringHandler->render(d->album).resize(30));
- data.append(TagPrivate::stringHandler->render(d->year).resize(4));
- data.append(TagPrivate::stringHandler->render(d->comment).resize(28));
+ data.append(stringHandler->render(d->title).resize(30));
+ data.append(stringHandler->render(d->artist).resize(30));
+ data.append(stringHandler->render(d->album).resize(30));
+ data.append(stringHandler->render(d->year).resize(4));
+ data.append(stringHandler->render(d->comment).resize(28));
data.append(char(0));
data.append(char(d->track));
data.append(char(d->genre));
void ID3v1::Tag::setStringHandler(const StringHandler *handler)
{
- if (handler)
- TagPrivate::stringHandler = handler;
+ if(handler)
+ stringHandler = handler;
else
- TagPrivate::stringHandler = &defaultStringHandler;
+ stringHandler = &defaultStringHandler;
}
////////////////////////////////////////////////////////////////////////////////
{
int offset = 3;
- d->title = TagPrivate::stringHandler->parse(data.mid(offset, 30));
+ d->title = stringHandler->parse(data.mid(offset, 30));
offset += 30;
- d->artist = TagPrivate::stringHandler->parse(data.mid(offset, 30));
+ d->artist = stringHandler->parse(data.mid(offset, 30));
offset += 30;
- d->album = TagPrivate::stringHandler->parse(data.mid(offset, 30));
+ d->album = stringHandler->parse(data.mid(offset, 30));
offset += 30;
- d->year = TagPrivate::stringHandler->parse(data.mid(offset, 4));
+ d->year = stringHandler->parse(data.mid(offset, 4));
offset += 4;
// Check for ID3v1.1 -- Note that ID3v1 *does not* support "track zero" -- this
if(data[offset + 28] == 0 && data[offset + 29] != 0) {
// ID3v1.1 detected
- d->comment = TagPrivate::stringHandler->parse(data.mid(offset, 28));
+ d->comment = stringHandler->parse(data.mid(offset, 28));
d->track = uchar(data[offset + 29]);
}
else
using namespace TagLib;
using namespace ID3v2;
+namespace
+{
+ const ID3v2::Latin1StringHandler defaultStringHandler;
+ const ID3v2::Latin1StringHandler *stringHandler = &defaultStringHandler;
+
+ const long MinPaddingSize = 1024;
+ const long MaxPaddingSize = 1024 * 1024;
+}
+
class ID3v2::Tag::TagPrivate
{
public:
FrameListMap frameListMap;
FrameList frameList;
-
- static const Latin1StringHandler *stringHandler;
};
-static const Latin1StringHandler defaultStringHandler;
-const ID3v2::Latin1StringHandler *ID3v2::Tag::TagPrivate::stringHandler = &defaultStringHandler;
-
-namespace
-{
- const long MinPaddingSize = 1024;
- const long MaxPaddingSize = 1024 * 1024;
-}
-
////////////////////////////////////////////////////////////////////////////////
// StringHandler implementation
////////////////////////////////////////////////////////////////////////////////
Latin1StringHandler const *ID3v2::Tag::latin1StringHandler()
{
- return TagPrivate::stringHandler;
+ return stringHandler;
}
void ID3v2::Tag::setLatin1StringHandler(const Latin1StringHandler *handler)
{
if(handler)
- TagPrivate::stringHandler = handler;
+ stringHandler = handler;
else
- TagPrivate::stringHandler = &defaultStringHandler;
+ stringHandler = &defaultStringHandler;
}
////////////////////////////////////////////////////////////////////////////////
using namespace TagLib;
using namespace RIFF::Info;
-namespace {
- static bool isValidChunkID(const ByteVector &name)
+namespace
+{
+ inline bool isValidChunkID(const ByteVector &name)
{
if(name.size() != 4)
return false;
return true;
}
+
+ const RIFF::Info::StringHandler defaultStringHandler;
+ const RIFF::Info::StringHandler *stringHandler = &defaultStringHandler;
}
class RIFF::Info::Tag::TagPrivate
{
public:
- TagPrivate()
- {}
-
FieldListMap fieldListMap;
-
- static const StringHandler *stringHandler;
};
////////////////////////////////////////////////////////////////////////////////
// public members
////////////////////////////////////////////////////////////////////////////////
-static const StringHandler defaultStringHandler;
-const RIFF::Info::StringHandler *RIFF::Info::Tag::TagPrivate::stringHandler = &defaultStringHandler;
-
-RIFF::Info::Tag::Tag(const ByteVector &data)
- : TagLib::Tag()
- , d(new TagPrivate())
+RIFF::Info::Tag::Tag(const ByteVector &data) :
+ TagLib::Tag(),
+ d(new TagPrivate())
{
parse(data);
}
-RIFF::Info::Tag::Tag()
- : TagLib::Tag()
- , d(new TagPrivate())
+RIFF::Info::Tag::Tag() :
+ TagLib::Tag(),
+ d(new TagPrivate())
{
}
FieldListMap::ConstIterator it = d->fieldListMap.begin();
for(; it != d->fieldListMap.end(); ++it) {
- ByteVector text = TagPrivate::stringHandler->render(it->second);
+ ByteVector text = stringHandler->render(it->second);
if(text.isEmpty())
continue;
void RIFF::Info::Tag::setStringHandler(const StringHandler *handler)
{
if(handler)
- TagPrivate::stringHandler = handler;
+ stringHandler = handler;
else
- TagPrivate::stringHandler = &defaultStringHandler;
+ stringHandler = &defaultStringHandler;
}
////////////////////////////////////////////////////////////////////////////////
const ByteVector id = data.mid(p, 4);
if(isValidChunkID(id)) {
- const String text = TagPrivate::stringHandler->parse(data.mid(p + 8, size));
+ const String text = stringHandler->parse(data.mid(p + 8, size));
d->fieldListMap[id] = text;
}