diff options
Diffstat (limited to 'src/lib/eet_node.c')
-rw-r--r-- | src/lib/eet_node.c | 435 |
1 files changed, 218 insertions, 217 deletions
diff --git a/src/lib/eet_node.c b/src/lib/eet_node.c index 12bb0e6..d90ef83 100644 --- a/src/lib/eet_node.c +++ b/src/lib/eet_node.c @@ -23,7 +23,7 @@ eet_node_new(void) result = eina_mempool_malloc(_eet_node_mp, sizeof (Eet_Node)); if (!result) - return NULL; + return NULL; memset(result, 0, sizeof (Eet_Node)); return result; @@ -43,7 +43,7 @@ _eet_node_new(const char *name, n = eet_node_new(); if (!n) - return NULL; + return NULL; n->type = type; n->name = eina_stringshare_add(name); @@ -52,57 +52,58 @@ _eet_node_new(const char *name, } /* _eet_node_new */ static void -_eet_node_append(Eet_Node *n, Eina_List *nodes) +_eet_node_append(Eet_Node *n, + Eina_List *nodes) { Eet_Node *value; Eina_List *l; EINA_LIST_REVERSE_FOREACH(nodes, l, value) - { - value->next = n->values; - n->values = value; - } + { + value->next = n->values; + n->values = value; + } } /* _eet_node_append */ -#define EET_NODE_NEW(Eet_type, Name, Value, Type)\ - EAPI Eet_Node *\ - eet_node_ ## Name ## _new(const char *name, Type Value)\ - {\ - Eet_Node *n;\ -\ - n = _eet_node_new(name, Eet_type);\ - if (!n) { return NULL; }\ -\ - n->data.value.Value = Value;\ -\ - return n;\ - } - -#define EET_NODE_STR_NEW(Eet_type, Name, Value, Type)\ - EAPI Eet_Node *\ - eet_node_ ## Name ## _new(const char *name, Type Value)\ - {\ - Eet_Node *n;\ -\ - n = _eet_node_new(name, Eet_type);\ - if (!n) { return NULL; }\ -\ - n->data.value.Value = eina_stringshare_add(Value);\ -\ - return n;\ - } - -EET_NODE_NEW(EET_T_CHAR, char, c, char) -EET_NODE_NEW(EET_T_SHORT, short, s, short) -EET_NODE_NEW(EET_T_INT, int, i, int) -EET_NODE_NEW(EET_T_LONG_LONG, long_long, l, long long) -EET_NODE_NEW(EET_T_FLOAT, float, f, float) -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) +#define EET_NODE_NEW(Eet_type, Name, Value, Type) \ + EAPI Eet_Node * \ + eet_node_ ## Name ## _new(const char *name, Type Value) \ + { \ + Eet_Node *n; \ + \ + n = _eet_node_new(name, Eet_type); \ + if (!n) { return NULL; } \ + \ + n->data.value.Value = Value; \ + \ + return n; \ + } + +#define EET_NODE_STR_NEW(Eet_type, Name, Value, Type) \ + EAPI Eet_Node * \ + eet_node_ ## Name ## _new(const char *name, Type Value) \ + { \ + Eet_Node *n; \ + \ + n = _eet_node_new(name, Eet_type); \ + if (!n) { return NULL; } \ + \ + n->data.value.Value = eina_stringshare_add(Value); \ + \ + return n; \ + } + +EET_NODE_NEW(EET_T_CHAR, char, c, char) +EET_NODE_NEW(EET_T_SHORT, short, s, short) +EET_NODE_NEW(EET_T_INT, int, i, int) +EET_NODE_NEW(EET_T_LONG_LONG, long_long, l, long long) +EET_NODE_NEW(EET_T_FLOAT, float, f, float) +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_STRING, string, str, const char *) EET_NODE_STR_NEW(EET_T_INLINED_STRING, inlined_string, str, const char *) Eet_Node * @@ -112,7 +113,7 @@ eet_node_null_new(const char *name) n = _eet_node_new(name, EET_T_NULL); if (!n) - return NULL; + return NULL; n->data.value.str = NULL; @@ -127,7 +128,7 @@ eet_node_list_new(const char *name, n = _eet_node_new(name, EET_G_LIST); if (!n) - return NULL; + return NULL; _eet_node_append(n, nodes); @@ -143,7 +144,7 @@ eet_node_array_new(const char *name, n = _eet_node_new(name, EET_G_ARRAY); if (!n) - return NULL; + return NULL; n->count = count; @@ -160,7 +161,7 @@ eet_node_var_array_new(const char *name, n = _eet_node_new(name, EET_G_VAR_ARRAY); if (!n) - return NULL; + return NULL; n->count = eina_list_count(nodes); @@ -178,11 +179,11 @@ eet_node_hash_new(const char *name, Eet_Node *n; if (!node) - return NULL; + return NULL; n = _eet_node_new(name, EET_G_HASH); if (!n) - return NULL; + return NULL; n->key = eina_stringshare_add(key); nodes = eina_list_append(NULL, node); @@ -200,7 +201,7 @@ eet_node_struct_new(const char *name, n = _eet_node_new(name, EET_G_UNKNOWN); if (!n) - return NULL; + return NULL; _eet_node_append(n, nodes); @@ -216,11 +217,11 @@ eet_node_struct_child_new(const char *parent, if (!child) return NULL; if (child->type != EET_G_UNKNOWN) - return child; + return child; n = _eet_node_new(parent, EET_G_UNKNOWN); if (!n) - return NULL; + return NULL; _eet_node_append(n, eina_list_prepend(NULL, child)); @@ -260,25 +261,25 @@ eet_node_list_append(Eet_Node *parent, tmp = eina_stringshare_add(name); for (nn = parent->values; nn; nn = nn->next) - if (nn->name == tmp && nn->type == EET_G_LIST) - { - Eet_Node *n; + if (nn->name == tmp && nn->type == EET_G_LIST) + { + Eet_Node *n; - if (!nn->values) - nn->values = child; - else - { - for (n = nn->values; n->next; n = n->next) - ; - n->next = child; - } + if (!nn->values) + nn->values = child; + else + { + for (n = nn->values; n->next; n = n->next) + ; + n->next = child; + } - child->next = NULL; + child->next = NULL; - eina_stringshare_del(tmp); + eina_stringshare_del(tmp); - return; - } + return; + } /* No list found, so create it. */ nn = eet_node_list_new(tmp, eina_list_append(NULL, child)); @@ -312,18 +313,18 @@ eet_node_struct_append(Eet_Node *parent, tmp = eina_stringshare_add(name); for (prev = NULL, nn = parent->values; nn; prev = nn, nn = nn->next) - if (nn->name == tmp && nn->type == child->type) - { - if (prev) - prev->next = nn->next; - else - parent->values = nn->next; + if (nn->name == tmp && nn->type == child->type) + { + if (prev) + prev->next = nn->next; + else + parent->values = nn->next; - nn->next = NULL; - eet_node_del(nn); + nn->next = NULL; + eet_node_del(nn); - break; - } + break; + } if (prev) { @@ -357,7 +358,6 @@ eet_node_hash_add(Eet_Node *parent, parent->values = nn; } /* eet_node_hash_add */ - int eet_node_type_get(Eet_Node *node) { @@ -386,29 +386,29 @@ eet_node_del(Eet_Node *n) Eet_Node *tmp; if (!n) - return; + return; switch (n->type) { case EET_G_HASH: - eina_stringshare_del(n->key); + eina_stringshare_del(n->key); case EET_G_UNKNOWN: case EET_G_VAR_ARRAY: case EET_G_ARRAY: case EET_G_LIST: - for (nn = n->values; nn; ) - { - tmp = nn; - nn = nn->next; - eet_node_del(tmp); - } - break; + for (nn = n->values; nn; ) + { + tmp = nn; + nn = nn->next; + eet_node_del(tmp); + } + break; case EET_T_STRING: case EET_T_INLINED_STRING: - eina_stringshare_del(n->data.value.str); - break; + eina_stringshare_del(n->data.value.str); + break; case EET_T_CHAR: case EET_T_SHORT: @@ -419,7 +419,7 @@ eet_node_del(Eet_Node *n) case EET_T_UCHAR: case EET_T_USHORT: case EET_T_UINT: - break; + break; } /* switch */ eina_stringshare_del(n->name); @@ -451,9 +451,9 @@ static const char *eet_node_dump_t_name[14][2] = { }; static void -eet_node_dump_level(int level, +eet_node_dump_level(int level, Eet_Dump_Callback dumpfunc, - void *dumpdata) + void *dumpdata) { int i; @@ -470,17 +470,17 @@ eet_node_string_escape(const char *str) for (strp = str; *strp; strp++) { if (*strp == '\"') - sz += 2; + sz += 2; else if (*strp == '\\') - sz += 2; + sz += 2; else if (*strp == '\n') - sz += 2; + sz += 2; else - sz += 1; + sz += 1; } s = malloc(sz + 1); if (!s) - return NULL; + return NULL; for (strp = str, sp = s; *strp; strp++, sp++) { @@ -493,33 +493,34 @@ eet_node_string_escape(const char *str) } if (*strp == '\n') - *sp = 'n'; + *sp = 'n'; else - *sp = *strp; + *sp = *strp; } *sp = 0; return s; } /* eet_node_string_escape */ static void -eet_node_dump_string_escape(void *dumpdata, +eet_node_dump_string_escape(void *dumpdata, Eet_Dump_Callback dumpfunc, - const char *str) + const char *str) { char *s; s = eet_node_string_escape(str); if (!s) - return; + return; dumpfunc(dumpdata, s); free(s); } /* eet_node_dump_string_escape */ static void -eet_node_dump_simple_type(Eet_Node *n, int level, +eet_node_dump_simple_type(Eet_Node *n, + int level, Eet_Dump_Callback dumpfunc, - void *dumpdata) + void *dumpdata) { const char *type_name = NULL; char tbuf[256]; @@ -533,95 +534,95 @@ eet_node_dump_simple_type(Eet_Node *n, int level, # undef EET_T_TYPE #endif /* ifdef EET_T_TYPE */ -#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.value.Type);\ - dumpfunc(dumpdata, tbuf);\ - break;\ - } +#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.value.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_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: \""; + type_name = "inlined: \""; case EET_T_STRING: - if (!type_name) - type_name = "string: \""; + if (!type_name) + type_name = "string: \""; - dumpfunc(dumpdata, type_name); - eet_node_dump_string_escape(dumpdata, dumpfunc, n->data.value.str); - dumpfunc(dumpdata, "\""); - break; + dumpfunc(dumpdata, type_name); + eet_node_dump_string_escape(dumpdata, dumpfunc, n->data.value.str); + dumpfunc(dumpdata, "\""); + break; case EET_T_NULL: - dumpfunc(dumpdata, "null"); - break; + dumpfunc(dumpdata, "null"); + break; default: - dumpfunc(dumpdata, "???: ???"); - break; + dumpfunc(dumpdata, "???: ???"); + break; } /* switch */ dumpfunc(dumpdata, ";\n"); } /* eet_node_dump_simple_type */ static void -eet_node_dump_group_start(int level, +eet_node_dump_group_start(int level, Eet_Dump_Callback dumpfunc, - void *dumpdata, - int group_type, - const char *name) + void *dumpdata, + int group_type, + const char *name) { int chnk_type; chnk_type = (group_type >= EET_G_UNKNOWN && group_type <= EET_G_HASH) ? - group_type : EET_G_LAST; + group_type : EET_G_LAST; eet_node_dump_level(level, dumpfunc, dumpdata); dumpfunc(dumpdata, "group \""); eet_node_dump_string_escape(dumpdata, dumpfunc, name); - dumpfunc(dumpdata, "\" "); + dumpfunc(dumpdata, "\" "); dumpfunc(dumpdata, eet_node_dump_g_name[chnk_type - EET_G_UNKNOWN]); - dumpfunc(dumpdata, " {\n"); + dumpfunc(dumpdata, " {\n"); } /* eet_node_dump_group_start */ static void -eet_node_dump_group_end(int level, +eet_node_dump_group_end(int level, Eet_Dump_Callback dumpfunc, - void *dumpdata) + void *dumpdata) { eet_node_dump_level(level, dumpfunc, dumpdata); dumpfunc(dumpdata, "}\n"); } /* eet_node_dump_group_end */ void -eet_node_dump(Eet_Node *n, - int dumplevel, +eet_node_dump(Eet_Node *n, + int dumplevel, Eet_Dump_Callback dumpfunc, - void *dumpdata) + void *dumpdata) { Eet_Node *it; if (!n) - return; + return; switch (n->type) { @@ -630,36 +631,36 @@ eet_node_dump(Eet_Node *n, case EET_G_UNKNOWN: case EET_G_HASH: case EET_G_LIST: - eet_node_dump_group_start(dumplevel, - dumpfunc, - dumpdata, - n->type, - n->name); - - if (n->type == EET_G_VAR_ARRAY - || n->type == EET_G_ARRAY) - { - char tbuf[256]; - - eet_node_dump_level(dumplevel, dumpfunc, dumpdata); - dumpfunc(dumpdata, " count "); - eina_convert_itoa(n->count, tbuf); - dumpfunc(dumpdata, tbuf); - dumpfunc(dumpdata, ";\n"); - } - else if (n->type == EET_G_HASH) - { - eet_node_dump_level(dumplevel, dumpfunc, dumpdata); - dumpfunc(dumpdata, " key \""); - eet_node_dump_string_escape(dumpdata, dumpfunc, n->key); - dumpfunc(dumpdata, "\";\n"); - } - - for (it = n->values; it; it = it->next) - eet_node_dump(it, dumplevel + 2, dumpfunc, dumpdata); - - eet_node_dump_group_end(dumplevel, dumpfunc, dumpdata); - break; + eet_node_dump_group_start(dumplevel, + dumpfunc, + dumpdata, + n->type, + n->name); + + if (n->type == EET_G_VAR_ARRAY + || n->type == EET_G_ARRAY) + { + char tbuf[256]; + + eet_node_dump_level(dumplevel, dumpfunc, dumpdata); + dumpfunc(dumpdata, " count "); + eina_convert_itoa(n->count, tbuf); + dumpfunc(dumpdata, tbuf); + dumpfunc(dumpdata, ";\n"); + } + else if (n->type == EET_G_HASH) + { + eet_node_dump_level(dumplevel, dumpfunc, dumpdata); + dumpfunc(dumpdata, " key \""); + eet_node_dump_string_escape(dumpdata, dumpfunc, n->key); + dumpfunc(dumpdata, "\";\n"); + } + + for (it = n->values; it; it = it->next) + eet_node_dump(it, dumplevel + 2, dumpfunc, dumpdata); + + eet_node_dump_group_end(dumplevel, dumpfunc, dumpdata); + break; case EET_T_STRING: case EET_T_INLINED_STRING: @@ -673,8 +674,8 @@ eet_node_dump(Eet_Node *n, case EET_T_USHORT: case EET_T_UINT: case EET_T_ULONG_LONG: - eet_node_dump_simple_type(n, dumplevel, dumpfunc, dumpdata); - break; + eet_node_dump_simple_type(n, dumplevel, dumpfunc, dumpdata); + break; } /* switch */ } /* eet_node_dump */ @@ -692,7 +693,7 @@ eet_node_walk(void *parent, if (!root) { if (parent) - cb->struct_add(parent, name, NULL, user_data); + cb->struct_add(parent, name, NULL, user_data); return NULL; } @@ -700,49 +701,49 @@ eet_node_walk(void *parent, switch (root->type) { case EET_G_UNKNOWN: - me = cb->struct_alloc(root->name, user_data); + me = cb->struct_alloc(root->name, user_data); - for (it = root->values; it; it = it->next) - eet_node_walk(me, it->name, it, cb, user_data); + for (it = root->values; it; it = it->next) + eet_node_walk(me, it->name, it, cb, user_data); - break; + break; case EET_G_VAR_ARRAY: case EET_G_ARRAY: - me = cb->array(root->type == EET_G_VAR_ARRAY ? EINA_TRUE : EINA_FALSE, - root->name, root->count, user_data); + me = cb->array(root->type == EET_G_VAR_ARRAY ? EINA_TRUE : EINA_FALSE, + root->name, root->count, user_data); - for (i = 0, it = root->values; it; it = it->next) - cb->insert(me, i++, eet_node_walk(NULL, - NULL, - it, - cb, - user_data), user_data); + for (i = 0, it = root->values; it; it = it->next) + cb->insert(me, i++, eet_node_walk(NULL, + NULL, + it, + cb, + user_data), user_data); - break; + break; case EET_G_LIST: - me = cb->list(root->name, user_data); + me = cb->list(root->name, user_data); - for (it = root->values; it; it = it->next) - cb->append(me, eet_node_walk(NULL, - NULL, - it, - cb, - user_data), user_data); + for (it = root->values; it; it = it->next) + cb->append(me, eet_node_walk(NULL, + NULL, + it, + cb, + user_data), user_data); - break; + break; case EET_G_HASH: - if (!parent) - return NULL; + if (!parent) + return NULL; - return cb->hash(parent, root->name, root->key, - eet_node_walk(NULL, - NULL, - root->values, - cb, - user_data), user_data); + return cb->hash(parent, root->name, root->key, + eet_node_walk(NULL, + NULL, + root->values, + cb, + user_data), user_data); case EET_T_STRING: case EET_T_INLINED_STRING: @@ -756,12 +757,12 @@ eet_node_walk(void *parent, case EET_T_USHORT: case EET_T_UINT: case EET_T_ULONG_LONG: - me = cb->simple(root->type, &root->data, user_data); - break; + me = cb->simple(root->type, &root->data, user_data); + break; } /* switch */ if (parent) - cb->struct_add(parent, name, me, user_data); + cb->struct_add(parent, name, me, user_data); return me; } /* eet_node_walk */ @@ -779,10 +780,10 @@ eet_node_init(void) #endif tmp = getenv("EET_MEMPOOL"); if (tmp && tmp[0]) - choice = tmp; + choice = tmp; _eet_node_mp = - eina_mempool_add(choice, "eet-node-alloc", NULL, sizeof(Eet_Node), 1024); + eina_mempool_add(choice, "eet-node-alloc", NULL, sizeof(Eet_Node), 1024); return _eet_node_mp ? 1 : 0; } /* eet_node_init */ |