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);
|
||||
|
||||
/*
|
||||
* @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)
|
||||
*
|
||||
|
|
|
@ -38,6 +38,8 @@ database_type_add(Eolian_Type *def)
|
|||
{
|
||||
if (!_aliases) return EINA_FALSE;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -45,6 +47,8 @@ Eina_Bool database_struct_add(Eolian_Type *tp)
|
|||
{
|
||||
if (!_structs) return EINA_FALSE;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,28 @@ eolian_type_struct_find_by_name(const char *name)
|
|||
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
|
||||
eolian_type_type_get(const Eolian_Type *tp)
|
||||
{
|
||||
|
|
|
@ -5,11 +5,19 @@
|
|||
Eina_List *_classes = NULL;
|
||||
Eina_Hash *_aliases = NULL;
|
||||
Eina_Hash *_structs = NULL;
|
||||
Eina_Hash *_aliasesf = NULL;
|
||||
Eina_Hash *_structsf = NULL;
|
||||
Eina_Hash *_filenames = NULL;
|
||||
Eina_Hash *_tfilenames = NULL;
|
||||
|
||||
static int _database_init_count = 0;
|
||||
|
||||
static void
|
||||
_hashlist_free(void *data)
|
||||
{
|
||||
eina_list_free((Eina_List*)data);
|
||||
}
|
||||
|
||||
int
|
||||
database_init()
|
||||
{
|
||||
|
@ -17,6 +25,8 @@ database_init()
|
|||
eina_init();
|
||||
_aliases = eina_hash_stringshared_new(EINA_FREE_CB(database_typedef_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);
|
||||
_tfilenames = eina_hash_string_small_new(free);
|
||||
return ++_database_init_count;
|
||||
|
@ -39,6 +49,8 @@ database_shutdown()
|
|||
database_class_del(class);
|
||||
eina_hash_free(_aliases);
|
||||
eina_hash_free(_structs);
|
||||
eina_hash_free(_aliasesf);
|
||||
eina_hash_free(_structsf);
|
||||
eina_hash_free(_filenames);
|
||||
eina_hash_free(_tfilenames);
|
||||
eina_shutdown();
|
||||
|
|
|
@ -42,6 +42,8 @@ extern Eina_Prefix *_eolian_prefix;
|
|||
extern Eina_List *_classes;
|
||||
extern Eina_Hash *_aliases;
|
||||
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 *_tfilenames;
|
||||
|
||||
|
|
|
@ -275,6 +275,18 @@ START_TEST(eolian_typedef)
|
|||
eina_stringshare_del(type_name);
|
||||
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();
|
||||
}
|
||||
END_TEST
|
||||
|
|
Loading…
Reference in New Issue