Revert "Introduce bsearch() and use it in tagtree.c."

It was committed by accident (it's on FS still).

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30157 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2011-07-18 18:57:50 +00:00
parent 76b6db375a
commit 1b7ff725c6
4 changed files with 65 additions and 147 deletions

View file

@ -29,7 +29,6 @@
#include <stdio.h>
#include <stdlib.h>
#include "string-extra.h"
#include "bsearch.h"
#include "config.h"
#include "system.h"
#include "kernel.h"
@ -161,13 +160,6 @@ struct match
int symbol;
};
static int compare_match(const void* _key, const void* _elem)
{
const char* key = _key;
const struct match *elem = _elem;
return strcasecmp(key, elem->str);
}
/* Statusbar text of the current view. */
static char current_title[MAX_TAGS][128];
@ -229,42 +221,42 @@ static int get_token_str(char *buf, int size)
static int get_tag(int *tag)
{
static const struct match get_tag_match[] =
{ /* sorted by ascii (case insensitive) for bsearch */
{ "%format", var_format },
{ "%include", var_include },
{ "%limit", var_limit },
{"%menu_start",var_menu_start},
{"%root_menu",var_rootmenu},
{ "%sort", var_sorttype },
{ "%strip", var_strip },
{"->",menu_next},
{ "==>", menu_load },
{ "album", tag_album },
{ "albumartist", tag_albumartist },
{ "artist", tag_artist },
{ "autoscore", tag_virt_autoscore },
{ "bitrate", tag_bitrate },
{ "comment", tag_comment },
{ "commitid", tag_commitid },
{ "composer", tag_composer },
{ "discnum", tag_discnumber },
{ "ensemble", tag_albumartist },
{ "entryage", tag_virt_entryage },
{ "filename", tag_filename },
{ "genre", tag_genre },
{ "grouping", tag_grouping },
{ "lastoffset", tag_lastoffset },
{ "lastplayed", tag_lastplayed },
{ "length", tag_length },
{ "Lm", tag_virt_length_min },
{ "Ls", tag_virt_length_sec },
{ "playcount", tag_playcount },
{ "Pm", tag_virt_playtime_min },
{ "Ps", tag_virt_playtime_sec },
{ "rating", tag_rating },
{ "title", tag_title },
{ "tracknum", tag_tracknumber },
{ "year", tag_year },
{
{"album", tag_album},
{"artist", tag_artist},
{"bitrate", tag_bitrate},
{"composer", tag_composer},
{"comment", tag_comment},
{"albumartist", tag_albumartist},
{"ensemble", tag_albumartist},
{"grouping", tag_grouping},
{"genre", tag_genre},
{"length", tag_length},
{"Lm", tag_virt_length_min},
{"Ls", tag_virt_length_sec},
{"Pm", tag_virt_playtime_min},
{"Ps", tag_virt_playtime_sec},
{"title", tag_title},
{"filename", tag_filename},
{"tracknum", tag_tracknumber},
{"discnum", tag_discnumber},
{"year", tag_year},
{"playcount", tag_playcount},
{"rating", tag_rating},
{"lastplayed", tag_lastplayed},
{"lastoffset", tag_lastoffset},
{"commitid", tag_commitid},
{"entryage", tag_virt_entryage},
{"autoscore", tag_virt_autoscore},
{"%sort", var_sorttype},
{"%limit", var_limit},
{"%strip", var_strip},
{"%menu_start", var_menu_start},
{"%include", var_include},
{"%root_menu", var_rootmenu},
{"%format", var_format},
{"->", menu_next},
{"==>", menu_load}
};
char buf[128];
unsigned int i;
@ -285,13 +277,15 @@ static int get_tag(int *tag)
}
buf[i] = '\0';
struct match *elem = bsearch(buf, get_tag_match, ARRAYLEN(get_tag_match),
sizeof(struct match), compare_match);
if (elem)
for (i = 0; i < ARRAYLEN(get_tag_match); i++)
{
*tag = elem->symbol;
return 1;
if (!strcasecmp(buf, get_tag_match[i].str))
{
*tag = get_tag_match[i].symbol;
return 1;
}
}
logf("NO MATCH: %s\n", buf);
if (buf[0] == '?')
return 0;
@ -302,21 +296,21 @@ static int get_tag(int *tag)
static int get_clause(int *condition)
{
static const struct match get_clause_match[] =
{ /* sorted by ascii (case insensitive) for bsearch */
{ "!$", clause_not_ends_with },
{ "!=", clause_is_not },
{ "!^", clause_not_begins_with },
{ "!~", clause_not_contains },
{ "$", clause_ends_with },
{ "<", clause_lt },
{ "<=", clause_lteq },
{ "=", clause_is },
{ "==", clause_is },
{ ">", clause_gt },
{ ">=", clause_gteq },
{ "@", clause_oneof },
{ "^", clause_begins_with },
{ "~", clause_contains },
{
{"=", clause_is},
{"==", clause_is},
{"!=", clause_is_not},
{">", clause_gt},
{">=", clause_gteq},
{"<", clause_lt},
{"<=", clause_lteq},
{"~", clause_contains},
{"!~", clause_not_contains},
{"^", clause_begins_with},
{"!^", clause_not_begins_with},
{"$", clause_ends_with},
{"!$", clause_not_ends_with},
{"@", clause_oneof}
};
char buf[4];
@ -338,13 +332,15 @@ static int get_clause(int *condition)
}
buf[i] = '\0';
struct match *elem = bsearch(buf, get_clause_match, ARRAYLEN(get_clause_match),
sizeof(struct match), compare_match);
if (elem)
for (i = 0; i < ARRAYLEN(get_clause_match); i++)
{
*condition = elem->symbol;
return 1;
if (!strcasecmp(buf, get_clause_match[i].str))
{
*condition = get_clause_match[i].symbol;
return 1;
}
}
return 0;
}

View file

@ -105,7 +105,6 @@ libc/mktime.c
/* Common */
common/version.c
common/bsearch.c
common/config.c
common/crc32.c
#ifdef MI4_FORMAT

View file

@ -1,49 +0,0 @@
/* Copyright (C) 1991,92,97,2000,02 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <stdlib.h>
/* Perform a binary search for KEY in BASE which has NMEMB elements
of SIZE bytes each. The comparisons are done by (*COMPAR)(). */
void *
bsearch (const void *key, const void *base, size_t nmemb, size_t size,
int (*compar) (const void *, const void *))
{
size_t l, u, idx;
const void *p;
int comparison;
l = 0;
u = nmemb;
while (l < u)
{
idx = (l + u) / 2;
p = (void *) (((const char *) base) + (idx * size));
comparison = (*compar) (key, p);
if (comparison < 0)
u = idx;
else if (comparison > 0)
l = idx + 1;
else
return (void *) p;
}
return NULL;
}
/* libc_hidden_def (bsearch) */

View file

@ -1,28 +0,0 @@
/* Copyright (C) 1991,92,97,2000,02 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef __BSEARCH_H__
#define __BSEARCH_H__
/* Perform a binary search for KEY in BASE which has NMEMB elements
of SIZE bytes each. The comparisons are done by (*COMPAR)(). */
void *
bsearch (const void *key, const void *base, size_t nmemb, size_t size,
int (*compar) (const void *, const void *));
#endif