parent
3528238bbe
commit
70c7a08c05
|
@ -1367,13 +1367,14 @@ eet_dictionary_string_check * example: values), and @p type is the basic data
|
|||
EAPI Eet_Node *eet_node_unsigned_char_new(const char *name, unsigned char uc);
|
||||
EAPI Eet_Node *eet_node_unsigned_short_new(const char *name, unsigned short us);
|
||||
EAPI Eet_Node *eet_node_unsigned_int_new(const char *name, unsigned int ui);
|
||||
EAPI Eet_Node *eet_node_unsigned_long_long_new(const char *name, unsigned long long l);
|
||||
EAPI Eet_Node *eet_node_string_new(const char *name, const char *str);
|
||||
EAPI Eet_Node *eet_node_inlined_string_new(const char *name, const char *str);
|
||||
EAPI Eet_Node *eet_node_null_new(const char *name);
|
||||
EAPI Eet_Node *eet_node_list_new(const char *name, Eina_List *nodes);
|
||||
EAPI Eet_Node *eet_node_array_new(const char *name, int count, Eina_List *nodes);
|
||||
EAPI Eet_Node *eet_node_var_array_new(const char *name, int count, Eina_List *nodes);
|
||||
EAPI Eet_Node *eet_node_hash_new(const char *name, const char *key, Eina_List *nodes);
|
||||
EAPI Eet_Node *eet_node_var_array_new(const char *name, Eina_List *nodes);
|
||||
EAPI Eet_Node *eet_node_hash_new(const char *name, const char *key, Eet_Node *node);
|
||||
EAPI Eet_Node *eet_node_struct_new(const char *name, Eina_List *nodes);
|
||||
EAPI void eet_node_del(Eet_Node *n);
|
||||
|
||||
|
|
|
@ -2297,6 +2297,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
|
|||
/* advance to next chunk */
|
||||
NEXT_CHUNK(p, size, echnk, ed);
|
||||
}
|
||||
|
||||
_eet_freelist_all_unref(context);
|
||||
if (dumpfunc)
|
||||
{
|
||||
|
|
|
@ -68,6 +68,7 @@ EET_NODE_NEW(EET_T_DOUBLE, double, d, double);
|
|||
EET_NODE_NEW(EET_T_UCHAR, unsigned_char, uc, unsigned char);
|
||||
EET_NODE_NEW(EET_T_USHORT, unsigned_short, us, unsigned short);
|
||||
EET_NODE_NEW(EET_T_UINT, unsigned_int, ui, unsigned int);
|
||||
EET_NODE_NEW(EET_T_ULONG_LONG, unsigned_long_long, ul, unsigned long long);
|
||||
EET_NODE_STR_NEW(EET_T_STRING, string, str, const char *);
|
||||
EET_NODE_STR_NEW(EET_T_INLINED_STRING, inlined_string, str, const char *);
|
||||
|
||||
|
@ -113,14 +114,14 @@ eet_node_array_new(const char *name, int count, Eina_List *nodes)
|
|||
}
|
||||
|
||||
Eet_Node *
|
||||
eet_node_var_array_new(const char *name, int count, Eina_List *nodes)
|
||||
eet_node_var_array_new(const char *name, Eina_List *nodes)
|
||||
{
|
||||
Eet_Node *n;
|
||||
|
||||
n = _eet_node_new(name, EET_G_VAR_ARRAY);
|
||||
if (!n) return NULL;
|
||||
|
||||
n->count = count;
|
||||
n->count = eina_list_count(nodes);
|
||||
|
||||
_eet_node_append(n, nodes);
|
||||
|
||||
|
@ -128,14 +129,18 @@ eet_node_var_array_new(const char *name, int count, Eina_List *nodes)
|
|||
}
|
||||
|
||||
Eet_Node *
|
||||
eet_node_hash_new(const char *name, const char *key, Eina_List *nodes)
|
||||
eet_node_hash_new(const char *name, const char *key, Eet_Node *node)
|
||||
{
|
||||
Eina_List *nodes;
|
||||
Eet_Node *n;
|
||||
|
||||
if (!node) return NULL;
|
||||
|
||||
n = _eet_node_new(name, EET_G_HASH);
|
||||
if (!n) return NULL;
|
||||
|
||||
n->key = eina_stringshare_add(key);
|
||||
nodes = eina_list_append(NULL, node);
|
||||
|
||||
_eet_node_append(n, nodes);
|
||||
|
||||
|
@ -195,3 +200,161 @@ eet_node_del(Eet_Node *n)
|
|||
eina_stringshare_del(n->name);
|
||||
free(n);
|
||||
}
|
||||
|
||||
|
||||
static const char *eet_node_dump_g_name[6] = {
|
||||
"struct",
|
||||
"array",
|
||||
"var_array",
|
||||
"list",
|
||||
"hash",
|
||||
"???"
|
||||
};
|
||||
|
||||
static const char *eet_node_dump_t_name[14][2] = {
|
||||
{ "???: ", "???" },
|
||||
{ "char: ", "%hhi" },
|
||||
{ "short: ", "%hi" },
|
||||
{ "int: ", "%i" },
|
||||
{ "long_long: ", "%lli" },
|
||||
{ "float: ", "%1.25f" },
|
||||
{ "double: ", "%1.25f" },
|
||||
{ "uchar: ", "%hhu" },
|
||||
{ "ushort: ", "%i" },
|
||||
{ "uint: ", "%u" },
|
||||
{ "ulong_long: ", "%llu" },
|
||||
{ "null", "" }
|
||||
};
|
||||
|
||||
static void
|
||||
eet_node_dump_level(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < level; i++) dumpfunc(dumpdata, " ");
|
||||
}
|
||||
|
||||
static char *
|
||||
eet_node_string_escape(const char *str)
|
||||
{
|
||||
char *s, *sp;
|
||||
const char *strp;
|
||||
int sz = 0;
|
||||
|
||||
for (strp = str; *strp; strp++)
|
||||
{
|
||||
if (*strp == '\"') sz += 2;
|
||||
else if (*strp == '\\') sz += 2;
|
||||
else sz += 1;
|
||||
}
|
||||
s = malloc(sz + 1);
|
||||
if (!s) return NULL;
|
||||
for (strp = str, sp = s; *strp; strp++, sp++)
|
||||
{
|
||||
if (*strp == '\"')
|
||||
{
|
||||
*sp = '\\';
|
||||
sp++;
|
||||
}
|
||||
else if (*strp == '\\')
|
||||
{
|
||||
*sp = '\\';
|
||||
sp++;
|
||||
}
|
||||
*sp = *strp;
|
||||
}
|
||||
*sp = 0;
|
||||
return s;
|
||||
}
|
||||
|
||||
static void
|
||||
eet_node_dump_string_escape(void *dumpdata, void dumpfunc(void *data, const char *str), const char *str)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = eet_node_string_escape(str);
|
||||
if (!s) return ;
|
||||
|
||||
dumpfunc(dumpdata, s);
|
||||
free(s);
|
||||
}
|
||||
|
||||
static void
|
||||
eet_node_dump_simple_type(Eet_Node *n, int level,
|
||||
void (*dumpfunc) (void *data, const char *str), void *dumpdata)
|
||||
{
|
||||
const char *type_name = NULL;
|
||||
char tbuf[256];
|
||||
|
||||
eet_node_dump_level(level, dumpfunc, dumpdata);
|
||||
dumpfunc(dumpdata, " value \"");
|
||||
eet_node_dump_string_escape(dumpdata, dumpfunc, n->name);
|
||||
dumpfunc(dumpdata, "\" ");
|
||||
|
||||
#define EET_T_TYPE(Eet_Type, Type) \
|
||||
case Eet_Type: \
|
||||
{ \
|
||||
dumpfunc(dumpdata, eet_node_dump_t_name[Eet_Type][0]); \
|
||||
snprintf(tbuf, sizeof (tbuf), eet_node_dump_t_name[Eet_Type][1], n->data.Type); \
|
||||
dumpfunc(dumpdata, tbuf); \
|
||||
break; \
|
||||
}
|
||||
|
||||
switch (n->type)
|
||||
{
|
||||
EET_T_TYPE(EET_T_CHAR, c);
|
||||
EET_T_TYPE(EET_T_SHORT, s);
|
||||
EET_T_TYPE(EET_T_INT, i);
|
||||
EET_T_TYPE(EET_T_LONG_LONG, l);
|
||||
EET_T_TYPE(EET_T_FLOAT, f);
|
||||
EET_T_TYPE(EET_T_DOUBLE, d);
|
||||
EET_T_TYPE(EET_T_UCHAR, uc);
|
||||
EET_T_TYPE(EET_T_USHORT, us);
|
||||
EET_T_TYPE(EET_T_UINT, ui);
|
||||
EET_T_TYPE(EET_T_ULONG_LONG, ul);
|
||||
case EET_T_INLINED_STRING:
|
||||
type_name = "inlined: \"";
|
||||
case EET_T_STRING:
|
||||
if (!type_name) type_name = "string: \"";
|
||||
|
||||
dumpfunc(dumpdata, type_name);
|
||||
eet_node_dump_string_escape(dumpdata, dumpfunc, n->data.str);
|
||||
dumpfunc(dumpdata, "\"");
|
||||
break;
|
||||
case EET_T_NULL:
|
||||
dumpfunc(dumpdata, "null");
|
||||
break;
|
||||
default:
|
||||
dumpfunc(dumpdata, "???: ???");
|
||||
break;
|
||||
}
|
||||
|
||||
dumpfunc(dumpdata, ";\n");
|
||||
}
|
||||
|
||||
void
|
||||
eet_node_dump(Eet_Node *n, int dumplevel, void (*dumpfunc) (void *data, const char *str), void *dumpdata)
|
||||
{
|
||||
switch (n->type)
|
||||
{
|
||||
case EET_G_HASH:
|
||||
case EET_G_UNKNOWN:
|
||||
case EET_G_VAR_ARRAY:
|
||||
case EET_G_ARRAY:
|
||||
case EET_G_LIST:
|
||||
break;
|
||||
case EET_T_STRING:
|
||||
case EET_T_INLINED_STRING:
|
||||
case EET_T_CHAR:
|
||||
case EET_T_SHORT:
|
||||
case EET_T_INT:
|
||||
case EET_T_LONG_LONG:
|
||||
case EET_T_FLOAT:
|
||||
case EET_T_DOUBLE:
|
||||
case EET_T_UCHAR:
|
||||
case EET_T_USHORT:
|
||||
case EET_T_UINT:
|
||||
eet_node_dump_simple_type(n, dumplevel, dumpfunc, dumpdata);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue