forked from enlightenment/efl
eolian: new API: eolian_type_structs/aliases_get_by_file
This commit is contained in:
parent
b0788a546b
commit
89ca97aceb
|
@ -780,6 +780,30 @@ EAPI const Eolian_Type *eolian_type_alias_find_by_name(const char *name);
|
||||||
*/
|
*/
|
||||||
EAPI const Eolian_Type *eolian_type_struct_find_by_name(const char *name);
|
EAPI const Eolian_Type *eolian_type_struct_find_by_name(const char *name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Get an iterator to all aliases contained in a file.
|
||||||
|
*
|
||||||
|
* @param[in] fname the file name without full path
|
||||||
|
* @return the iterator or NULL
|
||||||
|
*
|
||||||
|
* Thanks to internal caching, this is an O(1) operation.
|
||||||
|
*
|
||||||
|
* @ingroup Eolian
|
||||||
|
*/
|
||||||
|
EAPI Eina_Iterator *eolian_type_aliases_get_by_file(const char *fname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Get an iterator to all named structs contained in a file.
|
||||||
|
*
|
||||||
|
* @param[in] fname the file name without full path
|
||||||
|
* @return the iterator or NULL
|
||||||
|
*
|
||||||
|
* Thanks to internal caching, this is an O(1) operation.
|
||||||
|
*
|
||||||
|
* @ingroup Eolian
|
||||||
|
*/
|
||||||
|
EAPI Eina_Iterator *eolian_type_structs_get_by_file(const char *fname);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief Get the type of a type (regular, function, pointer)
|
* @brief Get the type of a type (regular, function, pointer)
|
||||||
*
|
*
|
||||||
|
|
|
@ -38,6 +38,8 @@ database_type_add(Eolian_Type *def)
|
||||||
{
|
{
|
||||||
if (!_aliases) return EINA_FALSE;
|
if (!_aliases) return EINA_FALSE;
|
||||||
eina_hash_set(_aliases, def->full_name, def);
|
eina_hash_set(_aliases, def->full_name, def);
|
||||||
|
eina_hash_set(_aliasesf, def->file, eina_list_append
|
||||||
|
((Eina_List*)eina_hash_find(_aliasesf, def->file), def));
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +47,8 @@ Eina_Bool database_struct_add(Eolian_Type *tp)
|
||||||
{
|
{
|
||||||
if (!_structs) return EINA_FALSE;
|
if (!_structs) return EINA_FALSE;
|
||||||
eina_hash_set(_structs, tp->full_name, tp);
|
eina_hash_set(_structs, tp->full_name, tp);
|
||||||
|
eina_hash_set(_structsf, tp->file, eina_list_append
|
||||||
|
((Eina_List*)eina_hash_find(_structsf, tp->file), tp));
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,28 @@ eolian_type_struct_find_by_name(const char *name)
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Iterator *
|
||||||
|
eolian_type_aliases_get_by_file(const char *fname)
|
||||||
|
{
|
||||||
|
if (!_aliasesf) return NULL;
|
||||||
|
Eina_Stringshare *shr = eina_stringshare_add(fname);
|
||||||
|
Eina_List *l = eina_hash_find(_aliasesf, shr);
|
||||||
|
eina_stringshare_del(shr);
|
||||||
|
if (!l) return NULL;
|
||||||
|
return eina_list_iterator_new(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Iterator *
|
||||||
|
eolian_type_structs_get_by_file(const char *fname)
|
||||||
|
{
|
||||||
|
if (!_structsf) return NULL;
|
||||||
|
Eina_Stringshare *shr = eina_stringshare_add(fname);
|
||||||
|
Eina_List *l = eina_hash_find(_structsf, shr);
|
||||||
|
eina_stringshare_del(shr);
|
||||||
|
if (!l) return NULL;
|
||||||
|
return eina_list_iterator_new(l);
|
||||||
|
}
|
||||||
|
|
||||||
EAPI Eolian_Type_Type
|
EAPI Eolian_Type_Type
|
||||||
eolian_type_type_get(const Eolian_Type *tp)
|
eolian_type_type_get(const Eolian_Type *tp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,11 +5,19 @@
|
||||||
Eina_List *_classes = NULL;
|
Eina_List *_classes = NULL;
|
||||||
Eina_Hash *_aliases = NULL;
|
Eina_Hash *_aliases = NULL;
|
||||||
Eina_Hash *_structs = NULL;
|
Eina_Hash *_structs = NULL;
|
||||||
|
Eina_Hash *_aliasesf = NULL;
|
||||||
|
Eina_Hash *_structsf = NULL;
|
||||||
Eina_Hash *_filenames = NULL;
|
Eina_Hash *_filenames = NULL;
|
||||||
Eina_Hash *_tfilenames = NULL;
|
Eina_Hash *_tfilenames = NULL;
|
||||||
|
|
||||||
static int _database_init_count = 0;
|
static int _database_init_count = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_hashlist_free(void *data)
|
||||||
|
{
|
||||||
|
eina_list_free((Eina_List*)data);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
database_init()
|
database_init()
|
||||||
{
|
{
|
||||||
|
@ -17,6 +25,8 @@ database_init()
|
||||||
eina_init();
|
eina_init();
|
||||||
_aliases = eina_hash_stringshared_new(EINA_FREE_CB(database_typedef_del));
|
_aliases = eina_hash_stringshared_new(EINA_FREE_CB(database_typedef_del));
|
||||||
_structs = eina_hash_stringshared_new(EINA_FREE_CB(database_type_del));
|
_structs = eina_hash_stringshared_new(EINA_FREE_CB(database_type_del));
|
||||||
|
_aliasesf = eina_hash_stringshared_new(_hashlist_free);
|
||||||
|
_structsf = eina_hash_stringshared_new(_hashlist_free);
|
||||||
_filenames = eina_hash_string_small_new(free);
|
_filenames = eina_hash_string_small_new(free);
|
||||||
_tfilenames = eina_hash_string_small_new(free);
|
_tfilenames = eina_hash_string_small_new(free);
|
||||||
return ++_database_init_count;
|
return ++_database_init_count;
|
||||||
|
@ -39,6 +49,8 @@ database_shutdown()
|
||||||
database_class_del(class);
|
database_class_del(class);
|
||||||
eina_hash_free(_aliases);
|
eina_hash_free(_aliases);
|
||||||
eina_hash_free(_structs);
|
eina_hash_free(_structs);
|
||||||
|
eina_hash_free(_aliasesf);
|
||||||
|
eina_hash_free(_structsf);
|
||||||
eina_hash_free(_filenames);
|
eina_hash_free(_filenames);
|
||||||
eina_hash_free(_tfilenames);
|
eina_hash_free(_tfilenames);
|
||||||
eina_shutdown();
|
eina_shutdown();
|
||||||
|
|
|
@ -42,6 +42,8 @@ extern Eina_Prefix *_eolian_prefix;
|
||||||
extern Eina_List *_classes;
|
extern Eina_List *_classes;
|
||||||
extern Eina_Hash *_aliases;
|
extern Eina_Hash *_aliases;
|
||||||
extern Eina_Hash *_structs;
|
extern Eina_Hash *_structs;
|
||||||
|
extern Eina_Hash *_aliasesf;
|
||||||
|
extern Eina_Hash *_structsf;
|
||||||
extern Eina_Hash *_filenames; /* Hash: filename without extension -> full path */
|
extern Eina_Hash *_filenames; /* Hash: filename without extension -> full path */
|
||||||
extern Eina_Hash *_tfilenames;
|
extern Eina_Hash *_tfilenames;
|
||||||
|
|
||||||
|
|
|
@ -275,6 +275,18 @@ START_TEST(eolian_typedef)
|
||||||
eina_stringshare_del(type_name);
|
eina_stringshare_del(type_name);
|
||||||
eina_iterator_free(iter);
|
eina_iterator_free(iter);
|
||||||
|
|
||||||
|
/* List */
|
||||||
|
fail_if(!(iter = eolian_type_aliases_get_by_file("typedef.eo")));
|
||||||
|
fail_if(!eina_iterator_next(iter, (void**)&atype));
|
||||||
|
fail_if(!(type_name = eolian_type_name_get(atype)));
|
||||||
|
fail_if(strcmp(type_name, "Coord"));
|
||||||
|
eina_stringshare_del(type_name);
|
||||||
|
fail_if(!eina_iterator_next(iter, (void**)&atype));
|
||||||
|
fail_if(!(type_name = eolian_type_name_get(atype)));
|
||||||
|
fail_if(strcmp(type_name, "List_Objects"));
|
||||||
|
eina_stringshare_del(type_name);
|
||||||
|
fail_if(eina_iterator_next(iter, (void**)&atype));
|
||||||
|
|
||||||
eolian_shutdown();
|
eolian_shutdown();
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
Loading…
Reference in New Issue