Revert changes concerning the smart pointer

This commit is contained in:
Tsuda kageyu
2013-04-17 22:54:56 +09:00
parent b6c9fb2da1
commit 1f4e06ea7c
26 changed files with 329 additions and 463 deletions

View File

@ -31,10 +31,6 @@
#include <config.h>
#endif
#ifdef _WIN32
# include <Shlwapi.h>
#endif
#include <tfile.h>
#include <tstring.h>
#include <tdebug.h>
@ -61,12 +57,15 @@
using namespace TagLib;
class FileRef::FileRefPrivate
class FileRef::FileRefPrivate : public RefCounter
{
public:
FileRefPrivate(File *f) : file(f) {}
FileRefPrivate(File *f) : RefCounter(), file(f) {}
~FileRefPrivate() {
delete file;
}
RefCountPtr<File> file;
File *file;
static List<const FileTypeResolver *> fileTypeResolvers;
};
@ -77,28 +76,30 @@ List<const FileRef::FileTypeResolver *> FileRef::FileRefPrivate::fileTypeResolve
////////////////////////////////////////////////////////////////////////////////
FileRef::FileRef()
: d(new FileRefPrivate(0))
{
d = new FileRefPrivate(0);
}
FileRef::FileRef(
FileName fileName, bool readAudioProperties, AudioProperties::ReadStyle audioPropertiesStyle)
: d(new FileRefPrivate(create(fileName, readAudioProperties, audioPropertiesStyle)))
FileRef::FileRef(FileName fileName, bool readAudioProperties,
AudioProperties::ReadStyle audioPropertiesStyle)
{
d = new FileRefPrivate(create(fileName, readAudioProperties, audioPropertiesStyle));
}
FileRef::FileRef(File *file)
: d(new FileRefPrivate(file))
{
d = new FileRefPrivate(file);
}
FileRef::FileRef(const FileRef &ref)
: d(ref.d)
FileRef::FileRef(const FileRef &ref) : d(ref.d)
{
d->ref();
}
FileRef::~FileRef()
{
if(d->deref())
delete d;
}
Tag *FileRef::tag() const
@ -121,7 +122,7 @@ AudioProperties *FileRef::audioProperties() const
File *FileRef::file() const
{
return d->file.get();
return d->file;
}
bool FileRef::save()
@ -181,7 +182,15 @@ bool FileRef::isNull() const
FileRef &FileRef::operator=(const FileRef &ref)
{
if(&ref == this)
return *this;
if(d->deref())
delete d;
d = ref.d;
d->ref();
return *this;
}
@ -209,36 +218,21 @@ File *FileRef::create(FileName fileName, bool readAudioProperties,
// Ok, this is really dumb for now, but it works for testing.
String ext;
String s;
#ifdef _WIN32
// Avoids direct conversion from FileName to String
// because String can't accept non-Latin-1 string in char array.
if(!fileName.wstr().empty()) {
const wchar_t *pext = PathFindExtensionW(fileName.wstr().c_str());
if(*pext == L'.')
ext = String(pext + 1).upper();
}
else {
const char *pext = PathFindExtensionA(fileName.str().c_str());
if(*pext == '.')
ext = String(pext + 1).upper();
}
s = (wcslen((const wchar_t *) fileName) > 0) ? String((const wchar_t *) fileName) : String((const char *) fileName);
#else
{
String s = fileName;
const int pos = s.rfind(".");
if(pos != -1)
ext = s.substr(pos + 1).upper();
}
s = fileName;
#endif
// If this list is updated, the method defaultFileExtensions() should also be
// updated. However at some point that list should be created at the same time
// that a default file type resolver is created.
if(!ext.isEmpty()) {
int pos = s.rfind(".");
if(pos != -1) {
String ext = s.substr(pos + 1).upper();
if(ext == "MP3")
return new MPEG::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "OGG")