db/simple/Song: pass StringView to constructor

This commit is contained in:
Max Kellermann 2019-09-03 20:25:04 +02:00
parent 97a9adcbec
commit af3f637d3f
2 changed files with 8 additions and 12 deletions

View File

@ -24,15 +24,16 @@
#include "util/VarSize.hxx" #include "util/VarSize.hxx"
#include "song/DetachedSong.hxx" #include "song/DetachedSong.hxx"
#include "song/LightSong.hxx" #include "song/LightSong.hxx"
#include "util/StringView.hxx"
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
inline inline
Song::Song(const char *_uri, size_t uri_length, Directory &_parent) noexcept Song::Song(StringView _uri, Directory &_parent) noexcept
:parent(&_parent) :parent(&_parent)
{ {
memcpy(uri, _uri, uri_length + 1); memcpy(uri, _uri.data, _uri.size + 1);
} }
inline inline
@ -41,17 +42,11 @@ Song::~Song() noexcept
} }
static SongPtr static SongPtr
song_alloc(const char *uri, Directory &parent) noexcept song_alloc(StringView uri, Directory &parent) noexcept
{ {
size_t uri_length;
assert(uri);
uri_length = strlen(uri);
assert(uri_length);
auto *song = NewVarSize<Song>(sizeof(Song::uri), auto *song = NewVarSize<Song>(sizeof(Song::uri),
uri_length + 1, uri.size + 1,
uri, uri_length, parent); uri, parent);
return SongPtr(song); return SongPtr(song);
} }

View File

@ -31,6 +31,7 @@
#include <string> #include <string>
struct StringView;
struct LightSong; struct LightSong;
struct Directory; struct Directory;
class DetachedSong; class DetachedSong;
@ -93,7 +94,7 @@ struct Song {
*/ */
char uri[sizeof(int)]; char uri[sizeof(int)];
Song(const char *_uri, size_t uri_length, Directory &parent) noexcept; Song(StringView _uri, Directory &parent) noexcept;
~Song() noexcept; ~Song() noexcept;
static SongPtr NewFrom(DetachedSong &&other, Directory &parent) noexcept; static SongPtr NewFrom(DetachedSong &&other, Directory &parent) noexcept;