mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
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:
parent
76b6db375a
commit
1b7ff725c6
4 changed files with 65 additions and 147 deletions
134
apps/tagtree.c
134
apps/tagtree.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -105,7 +105,6 @@ libc/mktime.c
|
|||
|
||||
/* Common */
|
||||
common/version.c
|
||||
common/bsearch.c
|
||||
common/config.c
|
||||
common/crc32.c
|
||||
#ifdef MI4_FORMAT
|
||||
|
|
|
@ -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) */
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue