From 33b9585d68e6f084b214985c2beb2887bf9d929a Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Mon, 15 Nov 2004 17:24:57 +0000 Subject: insert stuff in tagTracker in sorted order, hopefully this makes it faster git-svn-id: https://svn.musicpd.org/mpd/trunk@2672 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/tagTracker.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/tagTracker.c') diff --git a/src/tagTracker.c b/src/tagTracker.c index 68124c9e2..b6160e2a1 100644 --- a/src/tagTracker.c +++ b/src/tagTracker.c @@ -28,18 +28,23 @@ char * getTagItemString(int type, char * string) { if(tagLists[type] == NULL) { tagLists[type] = makeList(free, 1); + sortList(tagLists[type]); } - if((node = findNodeInList(tagLists[type], string))) { + if(findNodeInList(tagLists[type], string, &node)) { + DEBUG("found\n"); ((TagTrackerItem *)node->data)->count++; } else { + DEBUG("not found\n"); TagTrackerItem * item = malloc(sizeof(TagTrackerItem)); item->count = 1; item->visited = 0; - node = insertInList(tagLists[type], string, item); + node = insertInListBeforeNode(tagLists[type], node, string, + item); } + DEBUG("key: %s:%s\n", string, node->key); return node->key; } @@ -51,15 +56,12 @@ void removeTagItemString(int type, char * string) { assert(tagLists[type]); if(tagLists[type] == NULL) return; - node = findNodeInList(tagLists[type], string); - assert(node); - /*if(!node) { free(string); return; }*/ - if(node) { + if(findNodeInList(tagLists[type], string, &node)) { TagTrackerItem * item = node->data; item->count--; if(item->count <= 0) deleteNodeFromList(tagLists[type], node); @@ -131,9 +133,7 @@ int wasVisitedInTagTracker(int type, char * str) { if(!tagLists[type]) return 0; - node = findNodeInList(tagLists[type], str); - - if(!node) return 0; + if(!findNodeInList(tagLists[type], str, &node)) return 0; return ((TagTrackerItem *)node->data)->visited; } @@ -143,9 +143,7 @@ void visitInTagTracker(int type, char * str) { if(!tagLists[type]) return; - node = findNodeInList(tagLists[type], str); - - if(!node) return; + if(!findNodeInList(tagLists[type], str, &node)) return; ((TagTrackerItem *)node->data)->visited = 1; } -- cgit v1.2.3