From: <ny...@us...> - 2006-12-25 07:46:59
|
Revision: 199 http://svn.sourceforge.net/pmplib/?rev=199&view=rev Author: nyaochi Date: 2006-12-24 23:46:57 -0800 (Sun, 24 Dec 2006) Log Message: ----------- Improve idx.c to use dic.c Modified Paths: -------------- trunk/pmplib/lib/pmp_iriverplus3/dat.c trunk/pmplib/lib/pmp_iriverplus3/dic.c trunk/pmplib/lib/pmp_iriverplus3/dic.h trunk/pmplib/lib/pmp_iriverplus3/idx.c trunk/pmplib/lib/pmp_iriverplus3/idx.h trunk/pmplib/lib/pmp_iriverplus3/ip3db.c trunk/pmplib/lib/pmp_iriverplus3/ip3db.h Modified: trunk/pmplib/lib/pmp_iriverplus3/dat.c =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/dat.c 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/dat.c 2006-12-25 07:46:57 UTC (rev 199) @@ -46,7 +46,7 @@ #include "dic.h" #include "dat.h" -static void dat_entry_init(dat_entry_t* entry, const dic_list_t* dic_list) +static void dat_entry_init(dat_entry_t* entry, const dic_table_t* dic_list) { memset(entry, 0, sizeof(*entry)); entry->fields = (ip3db_variant_t*)malloc(sizeof(ip3db_variant_t) * dic_list->num_fields); @@ -103,14 +103,18 @@ return (size_t)(p - block); } -static void dat_entry_dump(dat_entry_t* entry, const dic_list_t* dic_list, FILE *fp) +static void dat_entry_dump(dat_entry_t* entry, const dic_table_t* dic_list, FILE *fp) { int i; + /* Loop for all fields in this entry. */ for (i = 0;i < entry->num_fields;++i) { ip3db_variant_t* var = &entry->fields[i]; + /* Output the field name. */ fprints(fp, " %s: ", dic_list->fields[i].name); + + /* Output its value. */ switch (var->type) { case IP3DBVT_STRING: fprints(fp, "%s\n", var->value.str); @@ -128,6 +132,8 @@ } } + + static void dat_list_init(dat_list_t* list) { memset(list, 0, sizeof(*list)); @@ -143,7 +149,7 @@ dat_list_init(list); } -static size_t dat_list_serialize(dat_list_t* list, const dic_list_t* dic_list, uint8_t* buffer, int is_storing) +static size_t dat_list_serialize(dat_list_t* list, const dic_table_t* dic_list, uint8_t* buffer, int is_storing) { uint32_t i; uint8_t *p = buffer; @@ -171,7 +177,7 @@ return (size_t)(p - buffer); } -static void dat_list_dump(dat_list_t* list, const dic_list_t* dic_list, FILE *fp) +static void dat_list_dump(dat_list_t* list, const dic_table_t* dic_list, FILE *fp) { uint32_t i; @@ -188,6 +194,8 @@ } } + + dat_t* dat_new() { dat_t* dat = (dat_t*)malloc(sizeof(dat_t)); Modified: trunk/pmplib/lib/pmp_iriverplus3/dic.c =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/dic.c 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/dic.c 2006-12-25 07:46:57 UTC (rev 199) @@ -42,60 +42,104 @@ #include "ip3db.h" #include "dic.h" -static void dic_entry_init(dic_entry_t* entry) +static dic_index_t music_indices[] = { + {0, 0x0086, {IP3DBF_MUSIC_TITLE, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x00F8, {IP3DBF_MUSIC_RATING, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x0152, {IP3DBF_MUSIC_TRACKNUMBER, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x022C, {IP3DBF_MUSIC_CHANGEDFLAG, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x027A, {IP3DBF_MUSIC_CLUSM, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x031C, {IP3DBF_MUSIC_UID, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x0352, {IP3DBF_MUSIC_GENRE, IP3DBF_MUSIC_ARTIST, IP3DBF_MUSIC_TITLE}}, + {0, 0x0384, {IP3DBF_MUSIC_ARTIST, IP3DBF_MUSIC_ALBUM, IP3DBF_MUSIC_TRACKNUMBER}}, + {0, 0x03C2, {IP3DBF_MUSIC_ARTIST, IP3DBF_MUSIC_TRACKNUMBER, IP3DBF_MUSIC_NONE}}, + {0, 0x03F4, {IP3DBF_MUSIC_ARTIST, IP3DBF_MUSIC_TITLE, IP3DBF_MUSIC_NONE}}, + {0, 0x041A, {IP3DBF_MUSIC_GENRE, IP3DBF_MUSIC_TITLE, IP3DBF_MUSIC_NONE}}, + {0, 0x043E, {IP3DBF_MUSIC_ALBUM, IP3DBF_MUSIC_TRACKNUMBER, IP3DBF_MUSIC_NONE}}, +}; + +static dic_index_t objects_indices[] = { + {0, 0x099A, {IP3DBF_OBJECTS_UID, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x09F0, {IP3DBF_OBJECTS_FILETYPE, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x0A0E, {IP3DBF_OBJECTS_OBJECTNAME, IP3DBF_MUSIC_NONE, IP3DBF_MUSIC_NONE}}, + {0, 0x0ACE, {IP3DBF_OBJECTS_FILETYPE, IP3DBF_OBJECTS_PARENTUID, IP3DBF_OBJECTS_PROPERTIES}}, +}; + +static void dic_field_init(dic_field_t* entry) { memset(entry, 0, sizeof(*entry)); } -static void dic_entry_finish(dic_entry_t* entry) +static void dic_field_finish(dic_field_t* entry) { ucs2free(entry->name); - dic_entry_init(entry); + dic_field_init(entry); } -static void dic_entry_dump(const dic_entry_t* entry, FILE *fp) +static size_t dic_field_serialize(uint8_t* block, dic_field_t* entry, int is_storing) { + uint8_t *p = block; + p += serialize_uint32be(p, &entry->next, 0); + p += serialize_uint32be(p, &entry->type, 0); + p += serialize_uint32be(p, &entry->idx_root, 0); + if (is_storing) { + p += (serialize_ucs2be_string_var(p, entry->name, is_storing) + 1) * sizeof(ucs2char_t); + } else { + p += (serialize_ucs2be_string_var_alloc(p, &entry->name) + 1) * sizeof(ucs2char_t); + } + return (size_t)(p - block); +} + +static void dic_field_dump(const dic_field_t* entry, FILE *fp) +{ fprintf(fp, " next: 0x%08X\n", entry->next); fprintf(fp, " type: 0x%08X\n", entry->type); fprintf(fp, " idx_root: 0x%08X\n", entry->idx_root); fprints(fp, " name: %s\n", entry->name); } -static void dic_list_init(dic_list_t* list) + + +static void dic_table_init(dic_table_t* list) { memset(list, 0, sizeof(*list)); } -static void dic_list_finish(dic_list_t* list) +static void dic_table_finish(dic_table_t* list) { int i; for (i = 0;i < list->num_fields;++i) { - dic_entry_finish(&list->fields[i]); + dic_field_finish(&list->fields[i]); } free(list->fields); } -static void dic_list_dump(dic_list_t* list, FILE *fp) +static void dic_table_dump(dic_table_t* list, FILE *fp) { int i; for (i = 0;i < list->num_fields;++i) { - const dic_entry_t* entry = &list->fields[i]; + const dic_field_t* entry = &list->fields[i]; fprintf(fp, " FIELD %d = {\n", i); - dic_entry_dump(entry, fp); + dic_field_dump(entry, fp); fprintf(fp, " }\n"); } } + + dic_t* dic_new() { dic_t* dic = (dic_t*)malloc(sizeof(dic_t)); if (dic) { - dic_list_init(&dic->music); + dic_table_init(&dic->music); dic->music.num_fields = IP3DBF_MUSIC_LAST; - dic->music.fields = (dic_entry_t*)calloc(dic->music.num_fields, sizeof(dic_entry_t)); - dic_list_init(&dic->objects); + dic->music.fields = (dic_field_t*)calloc(dic->music.num_fields, sizeof(dic_field_t)); + dic->music.num_indices = sizeof(music_indices) / sizeof(music_indices[0]); + dic->music.indices = music_indices; + dic_table_init(&dic->objects); dic->objects.num_fields = IP3DBF_OBJECTS_LAST; - dic->objects.fields = (dic_entry_t*)calloc(dic->objects.num_fields, sizeof(dic_entry_t)); + dic->objects.fields = (dic_field_t*)calloc(dic->objects.num_fields, sizeof(dic_field_t)); + dic->objects.num_indices = sizeof(objects_indices) / sizeof(objects_indices[0]); + dic->objects.indices = objects_indices; } return dic; } @@ -103,26 +147,12 @@ void dic_finish(dic_t* dic) { if (dic) { - dic_list_finish(&dic->music); - dic_list_finish(&dic->objects); + dic_table_finish(&dic->music); + dic_table_finish(&dic->objects); free(dic); } } -static size_t dic_serialize_entry(uint8_t* block, dic_entry_t* entry, int is_storing) -{ - uint8_t *p = block; - p += serialize_uint32be(p, &entry->next, 0); - p += serialize_uint32be(p, &entry->type, 0); - p += serialize_uint32be(p, &entry->idx_root, 0); - if (is_storing) { - p += (serialize_ucs2be_string_var(p, entry->name, is_storing) + 1) * sizeof(ucs2char_t); - } else { - p += (serialize_ucs2be_string_var_alloc(p, &entry->name) + 1) * sizeof(ucs2char_t); - } - return (size_t)(p - block); -} - int dic_serialize(dic_t* dic, uint8_t* buffer, int is_storing) { int i; @@ -130,16 +160,26 @@ next = 0x0000003C; for (i = 0;i < dic->music.num_fields;++i) { - dic_serialize_entry(buffer + next, &dic->music.fields[i], is_storing); + dic_field_serialize(buffer + next, &dic->music.fields[i], is_storing); next = dic->music.fields[i].next; } next = 0x0000099A; for (i = 0;i < dic->objects.num_fields;++i) { - dic_serialize_entry(buffer + next, &dic->objects.fields[i], is_storing); + dic_field_serialize(buffer + next, &dic->objects.fields[i], is_storing); next = dic->objects.fields[i].next; } + for (i = 0;i < dic->music.num_indices;++i) { + uint32_t offset = dic->music.indices[i].offset + sizeof(uint32_t) * 2; + serialize_uint32be(buffer + offset, &dic->music.indices[i].idx_root, is_storing); + } + + for (i = 0;i < dic->objects.num_indices;++i) { + uint32_t offset = dic->objects.indices[i].offset + sizeof(uint32_t) * 2; + serialize_uint32be(buffer + offset, &dic->objects.indices[i].idx_root, is_storing); + } + return 0; } @@ -147,17 +187,54 @@ { fprintf(fp, "===== db.dic =====\n"); fprintf(fp, "MUSIC {\n"); - dic_list_dump(&dic->music, fp); + dic_table_dump(&dic->music, fp); fprintf(fp, "OBJECTS {\n"); - dic_list_dump(&dic->objects, fp); + dic_table_dump(&dic->objects, fp); fprintf(fp, "\n"); } -uint32_t dic_get_idxroot(uint8_t *buffer, int field) +uint32_t dic_get_idxroot(dic_t* dic, int table, int index) { - uint32_t value; - ip3db_index_param_t* index_param = ip3db_get_indexparam(field); - uint8_t *p = buffer + index_param->dic_offset; - serialize_uint32be(p + sizeof(uint32_t) * 2, &value, 0); - return value; + const dic_index_t* indices = NULL; + switch (table) { + case IP3DBIDX_MUSIC: + indices = dic->music.indices; + break; + case IP3DBIDX_OBJECTS: + indices = dic->objects.indices; + break; + } + if (indices) { + return indices[index].idx_root; + } else { + return 0; + } } + +void dic_repr_index(dic_t* dic, int table, int index, FILE *fp) +{ + int i; + const dic_table_t* tbl = NULL; + const dic_index_t* idx = NULL; + + switch (table) { + case IP3DBIDX_MUSIC: + tbl = &dic->music; + break; + case IP3DBIDX_OBJECTS: + tbl = &dic->objects; + break; + } + + idx = &tbl->indices[index]; + for (i = 0;i < IP3DBIDX_MAX_KEYLEVEL;++i) { + int field = idx->fields[i]; + if (field == IP3DBF_MUSIC_NONE) { + break; + } + if (i != 0) { + fputc('-', fp); + } + fprints(fp, "%s", tbl->fields[field].name); + } +} Modified: trunk/pmplib/lib/pmp_iriverplus3/dic.h =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/dic.h 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/dic.h 2006-12-25 07:46:57 UTC (rev 199) @@ -29,16 +29,24 @@ uint32_t type; uint32_t idx_root; ucs2char_t* name; -} dic_entry_t; +} dic_field_t; typedef struct { + uint32_t idx_root; + uint32_t offset; + int fields[IP3DBIDX_MAX_KEYLEVEL]; +} dic_index_t; + +typedef struct { int num_fields; - dic_entry_t *fields; -} dic_list_t; + dic_field_t *fields; + int num_indices; + dic_index_t *indices; +} dic_table_t; struct tag_dic_t { - dic_list_t music; - dic_list_t objects; + dic_table_t music; + dic_table_t objects; }; typedef struct tag_dic_t dic_t; @@ -46,7 +54,7 @@ void dic_finish(dic_t* dic); int dic_serialize(dic_t* dic, uint8_t* buffer, int is_storing); void dic_dump(dic_t* dic, FILE *fp); +uint32_t dic_get_idxroot(dic_t* dic, int table, int index); +void dic_repr_index(dic_t* dic, int table, int index, FILE *fp); -uint32_t dic_get_idxroot(uint8_t *buffer, int field); - #endif/*__IP3DB_DIC_H__*/ Modified: trunk/pmplib/lib/pmp_iriverplus3/idx.c =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/idx.c 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/idx.c 2006-12-25 07:46:57 UTC (rev 199) @@ -104,7 +104,8 @@ uint32_t offset, node_t* node, ip3db_variant_t* key, - int* types, + dic_table_t* dic_table, + int index, int level, int flag, void *instance @@ -113,7 +114,8 @@ void idx_walk( uint8_t *buffer, uint32_t offset, - int *types, + dic_table_t* dic_table, + int index, int level, idx_walk_callback_t callback, void *instance @@ -121,7 +123,8 @@ { node_t node; ip3db_variant_t key; - int type = types[level]; + int field = dic_table->indices[index].fields[level]; + int type = dic_table->fields[field].type; uint8_t* p = buffer + offset; /* Read the node information. */ @@ -129,7 +132,7 @@ /* Descend to left children. */ if (node.left) { - idx_walk(buffer, node.left, types, level, callback, instance); + idx_walk(buffer, node.left, dic_table, index, level, callback, instance); } /* Read the key value. */ @@ -151,22 +154,25 @@ /* Invoke the callback function. */ if (callback && type) { - callback(buffer, offset, &node, &key, types, level, 1, instance); + callback(buffer, offset, &node, &key, dic_table, index, level, 1, instance); } /* Descend to the next key level if necessary. */ - if (level+1 < IP3DBIDX_MAX_KEYLEVEL && types[level+1]) { - idx_walk(buffer, node.leaf, types, level+1, callback, instance); + if (level+1 < IP3DBIDX_MAX_KEYLEVEL) { + int next_field = dic_table->indices[index].fields[level+1]; + if (next_field != -1) { + idx_walk(buffer, node.leaf, dic_table, index, level+1, callback, instance); + } } /* Invoke the callback function. */ if (callback && type) { - callback(buffer, offset, &node, &key, types, level, 0, instance); + callback(buffer, offset, &node, &key, dic_table, index, level, 0, instance); } /* Descend to right children. */ if (node.right) { - idx_walk(buffer, node.right, types, level, callback, instance); + idx_walk(buffer, node.right, dic_table, index, level, callback, instance); } } @@ -180,13 +186,17 @@ uint32_t offset, node_t* node, ip3db_variant_t* key, - int* types, + dic_table_t* dic_table, + int index, int level, int flag, void *instance ) { FILE *fp = (FILE*)instance; + int field = dic_table->indices[index].fields[level]; + int type = dic_table->fields[field].type; + int is_tail = (IP3DBIDX_MAX_KEYLEVEL <= level+1 || dic_table->indices[index].fields[level+1] == -1); int indent = 2 * (level + 1); if (flag) { @@ -217,14 +227,14 @@ } fprintf(fp, "\n"); - if (IP3DBIDX_MAX_KEYLEVEL <= level+1 || !types[level+1]) { + if (is_tail) { tail_t tail; memset(&tail, 0, sizeof(tail)); tail.next = node->leaf; fprinti(fp, indent); - fprintf(fp, " dat_offset: [\n", node->left); + fprintf(fp, " TAIL: [\n", node->left); while (tail.next) { uint8_t *p = buffer + tail.next; idx_serialize_tail(p, &tail, 0); @@ -242,7 +252,7 @@ return 0; } -int idx_dump(FILE *fpo, ip3db_t* db) +int idx_dump(uint8_t* buffer, dic_t* dic, FILE *fpo) { int i; header_t header; @@ -250,18 +260,26 @@ fprintf(fpo, "===== db.idx =====\n"); /* Dump the header. */ - idx_serialize_header(db->idx_buffer, &header, 0); + idx_serialize_header(buffer, &header, 0); fprintf(fpo, "size: 0x%08X\n", header.size); fprintf(fpo, "unknown1: 0x%08X\n", header.unknown1); fprintf(fpo, "unknown2: 0x%08X\n", header.unknown2); /* Dump the binary search trees. */ - for (i = 0;i < IP3DBIDX_LAST;++i) { - ip3db_index_param_t* index_param = ip3db_get_indexparam(i); - uint32_t idx_root = dic_get_idxroot(db->dic_buffer, i); - fprintf(fpo, "[%s]\n", index_param->name); - idx_walk(db->idx_buffer, idx_root, index_param->types, 0, idx_walkcb_dump, (void*)stdout); + for (i = 0;i < dic->music.num_indices;++i) { + uint32_t idx_root = dic_get_idxroot(dic, IP3DBIDX_MUSIC, i); + fprintf(fpo, "["); + dic_repr_index(dic, IP3DBIDX_MUSIC, i, fpo); + fprintf(fpo, "]\n"); + idx_walk(buffer, idx_root, &dic->music, i, 0, idx_walkcb_dump, (void*)stdout); } + for (i = 0;i < dic->objects.num_indices;++i) { + uint32_t idx_root = dic_get_idxroot(dic, IP3DBIDX_OBJECTS, i); + fprintf(fpo, "["); + dic_repr_index(dic, IP3DBIDX_OBJECTS, i, fpo); + fprintf(fpo, "]\n"); + idx_walk(buffer, idx_root, &dic->objects, i, 0, idx_walkcb_dump, (void*)stdout); + } fprintf(fpo, "\n"); return 0; Modified: trunk/pmplib/lib/pmp_iriverplus3/idx.h =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/idx.h 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/idx.h 2006-12-25 07:46:57 UTC (rev 199) @@ -19,10 +19,11 @@ * */ -/* $Id:$ */ +/* $Id$ */ #ifndef __IP3DB_IDX_H__ #define __IP3DB_IDX_H__ +int idx_dump(uint8_t* buffer, dic_t* dic, FILE *fpo); #endif/*__IP3DB_IDX_H__*/ Modified: trunk/pmplib/lib/pmp_iriverplus3/ip3db.c =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/ip3db.c 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/ip3db.c 2006-12-25 07:46:57 UTC (rev 199) @@ -34,26 +34,8 @@ #include "ip3db.h" #include "dic.h" #include "dat.h" +#include "idx.h" -static ip3db_index_param_t ip3db_index_param[IP3DBIDX_LAST] = { - {"Music.Title", 0x0086, {IP3DBVT_STRING, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Music.Rating", 0x00F8, {IP3DBVT_WORD, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Music.TrackNumber", 0x0152, {IP3DBVT_WORD, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Music.ChangedFlag", 0x022C, {IP3DBVT_BYTE, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Music.ClusM", 0x027A, {IP3DBVT_DWORD, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Music.UID", 0x031C, {IP3DBVT_DWORD, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Music.Genre-Artist-Title", 0x0352, {IP3DBVT_STRING, IP3DBVT_STRING, IP3DBVT_STRING}}, - {"Music.Artist-Album-TrackNumber", 0x0384, {IP3DBVT_STRING, IP3DBVT_STRING, IP3DBVT_WORD}}, - {"Music.Artist-TrackNumber", 0x03C2, {IP3DBVT_STRING, IP3DBVT_WORD, IP3DBVT_NONE}}, - {"Music.Artist-Title", 0x03F4, {IP3DBVT_STRING, IP3DBVT_STRING, IP3DBVT_NONE}}, - {"Music.Genre-Title", 0x041A, {IP3DBVT_STRING, IP3DBVT_STRING, IP3DBVT_NONE}}, - {"Music.Album-TrackNumber", 0x043E, {IP3DBVT_STRING, IP3DBVT_WORD, IP3DBVT_NONE}}, - {"Object.UID", 0x099A, {IP3DBVT_DWORD, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Object.FileType", 0x09F0, {IP3DBVT_WORD, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Object.ObjectName", 0x0A0E, {IP3DBVT_STRING, IP3DBVT_NONE, IP3DBVT_NONE}}, - {"Object.FileType-ParentUid-Properties", 0x0ACE, {IP3DBVT_WORD, IP3DBVT_DWORD, IP3DBVT_BYTE}}, -}; - void ip3db_variant_init(ip3db_variant_t* var, int type) { memset(var, 0, sizeof(*var)); @@ -68,11 +50,6 @@ ip3db_variant_init(var, IP3DBVT_NONE); } -ip3db_index_param_t* ip3db_get_indexparam(int field) -{ - return &ip3db_index_param[field]; -} - void ip3db_init(ip3db_t* db) { memset(db, 0, sizeof(*db)); @@ -140,6 +117,6 @@ dat_dump(db->dat, db->dic, fpo); /* Dump db.idx */ - idx_dump(fpo, db); + idx_dump(db->idx_buffer, db->dic, fpo); return 0; } Modified: trunk/pmplib/lib/pmp_iriverplus3/ip3db.h =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/ip3db.h 2006-12-24 18:21:20 UTC (rev 198) +++ trunk/pmplib/lib/pmp_iriverplus3/ip3db.h 2006-12-25 07:46:57 UTC (rev 199) @@ -25,26 +25,6 @@ #define __IP3DB_IP3DB_H__ enum { - IP3DBIDX_MUSIC_TITLE, - IP3DBIDX_MUSIC_RATING, - IP3DBIDX_MUSIC_TRACKNUMBER, - IP3DBIDX_MUSIC_CHANGEDFLAG, - IP3DBIDX_MUSIC_CLUSM, - IP3DBIDX_MUSIC_UID, - IP3DBIDX_MUSIC_GENRE_ARTIST_TITLE, - IP3DBIDX_MUSIC_ARTIST_ALBUM_TRACKNUMBER, - IP3DBIDX_MUSIC_ARTIST_TRACKNUMBER, - IP3DBIDX_MUSIC_ARTIST_TITLE, - IP3DBIDX_MUSIC_GENRE_TITLE, - IP3DBIDX_MUSIC_ALBUM_TRACKNUMBER, - IP3DBIDX_OBJECT_UID, - IP3DBIDX_OBJECT_FILETYPE, - IP3DBIDX_OBJECT_OBJECTNAME, - IP3DBIDX_OBJECT_FILETYPE_PARENTUID_PROP, - IP3DBIDX_LAST -}; - -enum { IP3DBIDX_MAX_KEYLEVEL = 3, }; @@ -73,6 +53,7 @@ } ip3db_variant_t; enum { + IP3DBF_MUSIC_NONE = -1, IP3DBF_MUSIC_BEGIN = 0, IP3DBF_MUSIC_ARTIST = 0, IP3DBF_MUSIC_ALBUM, @@ -104,6 +85,7 @@ }; enum { + IP3DBF_OBJECTS_NONE = -1, IP3DBF_OBJECTS_BEGIN = 0, IP3DBF_OBJECTS_UID = 0, IP3DBF_OBJECTS_PARENTUID, @@ -119,15 +101,41 @@ IP3DBF_OBJECTS_LAST, }; +enum { + IP3DBIDX_MUSIC = 0, + IP3DBIDX_OBJECTS, +}; +enum { + IP3DBIDX_MUSIC_NONE = -1, + IP3DBIDX_MUSIC_BEGIN = 0, + IP3DBIDX_MUSIC_TITLE = 0, + IP3DBIDX_MUSIC_RATING, + IP3DBIDX_MUSIC_TRACKNUMBER, + IP3DBIDX_MUSIC_CHANGEDFLAG, + IP3DBIDX_MUSIC_CLUSM, + IP3DBIDX_MUSIC_UID, + IP3DBIDX_MUSIC_GENRE_ARTIST_TITLE, + IP3DBIDX_MUSIC_ARTIST_ALBUM_TRACKNUMBER, + IP3DBIDX_MUSIC_ARTIST_TRACKNUMBER, + IP3DBIDX_MUSIC_ARTIST_TITLE, + IP3DBIDX_MUSIC_GENRE_TITLE, + IP3DBIDX_MUSIC_ALBUM_TRACKNUMBER, + IP3DBIDX_MUSIC_LAST, +}; +enum { + IP3DBIDX_OBJECT_NONE = -1, + IP3DBIDX_OBJECT_BEGIN = 0, + IP3DBIDX_OBJECT_UID, + IP3DBIDX_OBJECT_FILETYPE, + IP3DBIDX_OBJECT_OBJECTNAME, + IP3DBIDX_OBJECT_FILETYPE_PARENTUID_PROP, + IP3DBIDX_OBJECT_LAST, +}; -typedef struct { - const char* name; - uint32_t dic_offset; - int types[IP3DBIDX_MAX_KEYLEVEL]; -} ip3db_index_param_t; + struct tag_dat_t; typedef struct tag_dat_t dat_t; struct tag_dic_t; typedef struct tag_dic_t dic_t; @@ -143,10 +151,6 @@ dic_t* dic; } ip3db_t; -int idx_dump(FILE *fpo, ip3db_t* db); - -ip3db_index_param_t* ip3db_get_indexparam(int field); - void ip3db_variant_init(ip3db_variant_t* var, int type); void ip3db_variant_finish(ip3db_variant_t* var); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |