db/simple/Song: make "parent" a reference, not a pointer

This commit is contained in:
Max Kellermann 2014-08-12 15:38:59 +02:00
parent 1bfede120a
commit f4d0bd8205
6 changed files with 15 additions and 17 deletions

View File

@ -109,12 +109,11 @@ Song::LoadFromArchive(ArchiveFile &archive, const char *name_utf8,
bool
Song::UpdateFileInArchive(ArchiveFile &archive) noexcept
{
assert(parent != nullptr);
assert(parent->device == DEVICE_INARCHIVE);
assert(parent.device == DEVICE_INARCHIVE);
std::string path_utf8(uri);
for (const Directory *directory = parent;
for (const Directory *directory = &parent;
directory->parent != nullptr &&
directory->parent->device == DEVICE_INARCHIVE;
directory = directory->parent) {

View File

@ -167,7 +167,7 @@ Directory::AddSong(SongPtr song) noexcept
{
assert(holding_db_lock());
assert(song != nullptr);
assert(song->parent == this);
assert(&song->parent == this);
songs.push_back(*song.release());
}
@ -177,7 +177,7 @@ Directory::RemoveSong(Song *song) noexcept
{
assert(holding_db_lock());
assert(song != nullptr);
assert(song->parent == this);
assert(&song->parent == this);
songs.erase(songs.iterator_to(*song));
}
@ -189,7 +189,7 @@ Directory::FindSong(const char *name_utf8) const noexcept
assert(name_utf8 != nullptr);
for (auto &song : songs) {
assert(song.parent == this);
assert(&song.parent == this);
if (song.uri == name_utf8)
return &song;

View File

@ -26,7 +26,7 @@
inline
Song::Song(StringView _uri, Directory &_parent) noexcept
:parent(&_parent), uri(_uri.data, _uri.size)
:parent(_parent), uri(_uri.data, _uri.size)
{
}
@ -56,10 +56,10 @@ Song::NewFile(const char *path, Directory &parent) noexcept
std::string
Song::GetURI() const noexcept
{
if (parent->IsRoot())
if (parent.IsRoot())
return uri;
else {
const char *path = parent->GetPath();
const char *path = parent.GetPath();
std::string result;
result.reserve(strlen(path) + 1 + uri.length());
@ -74,8 +74,8 @@ LightSong
Song::Export() const noexcept
{
LightSong dest(uri.c_str(), tag);
if (!parent->IsRoot())
dest.directory = parent->GetPath();
if (!parent.IsRoot())
dest.directory = parent.GetPath();
dest.mtime = mtime;
dest.start_time = start_time;
dest.end_time = end_time;

View File

@ -60,10 +60,9 @@ struct Song {
Tag tag;
/**
* The #Directory that contains this song. Must be
* non-nullptr.
* The #Directory that contains this song.
*/
Directory *const parent;
Directory &parent;
/**
* The time stamp of the last file modification. A negative

View File

@ -29,7 +29,7 @@
void
DatabaseEditor::DeleteSong(Directory &dir, Song *del)
{
assert(del->parent == &dir);
assert(&del->parent == &dir);
/* first, prevent traversers in main task from getting this */
dir.RemoveSong(del);
@ -65,7 +65,7 @@ DatabaseEditor::ClearDirectory(Directory &directory)
});
directory.ForEachSongSafe([this, &directory](Song &song){
assert(song.parent == &directory);
assert(&song.parent == &directory);
DeleteSong(directory, &song);
});
}

View File

@ -79,7 +79,7 @@ UpdateWalk::RemoveExcludedFromDirectory(Directory &directory,
});
directory.ForEachSongSafe([&](Song &song){
assert(song.parent == &directory);
assert(&song.parent == &directory);
const auto name_fs = AllocatedPath::FromUTF8(song.uri.c_str());
if (name_fs.IsNull() || exclude_list.Check(name_fs)) {