mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Replace arrays of tags that are numeric/sorted/uniqued with bitfields flagging each tag that is a member of the set, and replace the membership tests with a shift and bitwise and. The test is still done inside a function on SH, as this saves some space vs the macro used on other targets.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21175 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
2bedde17b6
commit
1248a0dc1f
3 changed files with 72 additions and 77 deletions
|
@ -94,6 +94,21 @@ enum tag_type { tag_artist = 0, tag_album, tag_genre, tag_title,
|
|||
/* Serialized DB. */
|
||||
#define TAGCACHE_STATEFILE ROCKBOX_DIR "/database_state.tcd"
|
||||
|
||||
/* Numeric tags (we can use these tags with conditional clauses). */
|
||||
#define TAGCACHE_NUMERIC_TAGS ((1LU << tag_year) | (1LU << tag_discnumber) | \
|
||||
(1LU << tag_tracknumber) | (1LU << tag_length) | (1LU << tag_bitrate) | \
|
||||
(1LU << tag_playcount) | (1LU << tag_rating) | (1LU << tag_playtime) | \
|
||||
(1LU << tag_lastplayed) | (1LU << tag_commitid) | (1LU << tag_mtime) | \
|
||||
(1LU << tag_virt_length_min) | (1LU << tag_virt_length_sec) | \
|
||||
(1LU << tag_virt_playtime_min) | (1LU << tag_virt_playtime_sec) | \
|
||||
(1LU << tag_virt_entryage) | (1LU << tag_virt_autoscore))
|
||||
|
||||
#ifdef CPU_SH
|
||||
#define TAGCACHE_IS_NUMERIC(tag) (tagcache_is_numeric_tag(tag))
|
||||
#else
|
||||
#define TAGCACHE_IS_NUMERIC(tag) ((1LU << tag) & TAGCACHE_NUMERIC_TAGS)
|
||||
#endif
|
||||
|
||||
/* Flags */
|
||||
#define FLAG_DELETED 0x0001 /* Entry has been removed from db */
|
||||
#define FLAG_DIRCACHE 0x0002 /* Filename is a dircache pointer */
|
||||
|
@ -183,9 +198,9 @@ void tagcache_reverse_scan(void);
|
|||
|
||||
const char* tagcache_tag_to_str(int tag);
|
||||
|
||||
#ifdef CPU_SH
|
||||
bool tagcache_is_numeric_tag(int type);
|
||||
bool tagcache_is_unique_tag(int type);
|
||||
bool tagcache_is_sorted_tag(int type);
|
||||
#endif
|
||||
bool tagcache_find_index(struct tagcache_search *tcs, const char *filename);
|
||||
bool tagcache_check_clauses(struct tagcache_search *tcs,
|
||||
struct tagcache_search_clause **clause, int count);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue