diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-09-23 20:48:39 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-09-23 20:48:39 +0200 |
commit | 0bec1d38078c88d07939a4c210b7cdeb9c8eb59c (patch) | |
tree | 9ec91df91017224ef643060533a657db3c1c53dd /src/song_print.c | |
parent | afe6ce7210be330eefb0e8f18f2b6787bf052087 (diff) | |
download | mpd-0bec1d38078c88d07939a4c210b7cdeb9c8eb59c.tar.gz mpd-0bec1d38078c88d07939a4c210b7cdeb9c8eb59c.tar.xz mpd-0bec1d38078c88d07939a4c210b7cdeb9c8eb59c.zip |
Replace SongList with struct songvec
Our linked-list implementation is wasteful and the
SongList isn't modified enough to benefit from being a linked
list. So use a more compact array of song pointers which
saves ~200K on a library with ~9K songs (on x86-32).
Diffstat (limited to 'src/song_print.c')
-rw-r--r-- | src/song_print.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/song_print.c b/src/song_print.c index 77741e768..f754f2348 100644 --- a/src/song_print.c +++ b/src/song_print.c @@ -17,6 +17,7 @@ */ #include "song_print.h" +#include "songvec.h" #include "directory.h" #include "tag_print.h" #include "client.h" @@ -41,14 +42,14 @@ int printSongInfo(struct client *client, Song * song) return 0; } -int printSongInfoFromList(struct client *client, SongList * list) +int songvec_print(struct client *client, const struct songvec *sv) { - ListNode *tempNode = list->firstNode; + int i; + Song **sp = sv->base; - while (tempNode != NULL) { - printSongInfo(client, (Song *) tempNode->data); - tempNode = tempNode->nextNode; - } + for (i = sv->nr; --i >= 0;) + if (printSongInfo(client, *sp++) < 0) + return -1; return 0; } |