eolian: add matching APIs to get typedecls by file

This commit is contained in:
Daniel Kolesa 2016-02-11 15:21:12 +00:00
parent 6e2497bc01
commit cf9dbaa7da
5 changed files with 55 additions and 1 deletions

View File

@ -1311,6 +1311,7 @@ EAPI const Eolian_Typedecl *eolian_typedecl_enum_get_by_name(const char *name);
* @ingroup Eolian
*/
EAPI Eina_Iterator *eolian_type_aliases_get_by_file(const char *fname);
EAPI Eina_Iterator *eolian_typedecl_aliases_get_by_file(const char *fname);
/*
* @brief Get an iterator to all named structs contained in a file.
@ -1323,6 +1324,7 @@ EAPI Eina_Iterator *eolian_type_aliases_get_by_file(const char *fname);
* @ingroup Eolian
*/
EAPI Eina_Iterator *eolian_type_structs_get_by_file(const char *fname);
EAPI Eina_Iterator *eolian_typedecl_structs_get_by_file(const char *fname);
/*
* @brief Get an iterator to all enums contained in a file.
@ -1335,6 +1337,7 @@ EAPI Eina_Iterator *eolian_type_structs_get_by_file(const char *fname);
* @ingroup Eolian
*/
EAPI Eina_Iterator *eolian_type_enums_get_by_file(const char *fname);
EAPI Eina_Iterator *eolian_typedecl_enums_get_by_file(const char *fname);
/*
* @brief Get the type of a type (regular, function, pointer)

View File

@ -95,6 +95,8 @@ database_type_add(Eolian_Type *def)
eina_hash_set(_aliases, def->full_name, def);
eina_hash_set(_aliasesf, def->base.file, eina_list_append
((Eina_List*)eina_hash_find(_aliasesf, def->base.file), def));
eina_hash_set(_aliasesd, def->base.file, eina_list_append
((Eina_List*)eina_hash_find(_aliasesd, def->base.file), def->decl));
database_decl_add(def->full_name, EOLIAN_DECL_ALIAS, def->base.file, def);
}
@ -105,6 +107,8 @@ database_struct_add(Eolian_Type *tp)
eina_hash_set(_structs, tp->full_name, tp);
eina_hash_set(_structsf, tp->base.file, eina_list_append
((Eina_List*)eina_hash_find(_structsf, tp->base.file), tp));
eina_hash_set(_structsd, tp->base.file, eina_list_append
((Eina_List*)eina_hash_find(_structsd, tp->base.file), tp->decl));
database_decl_add(tp->full_name, EOLIAN_DECL_STRUCT, tp->base.file, tp);
}
@ -115,6 +119,8 @@ database_enum_add(Eolian_Type *tp)
eina_hash_set(_enums, tp->full_name, tp);
eina_hash_set(_enumsf, tp->base.file, eina_list_append
((Eina_List*)eina_hash_find(_enumsf, tp->base.file), tp));
eina_hash_set(_enumsd, tp->base.file, eina_list_append
((Eina_List*)eina_hash_find(_enumsd, tp->base.file), tp->decl));
database_decl_add(tp->full_name, EOLIAN_DECL_ENUM, tp->base.file, tp);
}

View File

@ -71,6 +71,17 @@ eolian_type_aliases_get_by_file(const char *fname)
return eina_list_iterator_new(l);
}
EAPI Eina_Iterator *
eolian_typedecl_aliases_get_by_file(const char *fname)
{
if (!_aliasesd) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_aliasesd, 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)
{
@ -82,10 +93,21 @@ eolian_type_structs_get_by_file(const char *fname)
return eina_list_iterator_new(l);
}
EAPI Eina_Iterator *
eolian_typedecl_structs_get_by_file(const char *fname)
{
if (!_structsd) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_structsd, shr);
eina_stringshare_del(shr);
if (!l) return NULL;
return eina_list_iterator_new(l);
}
EAPI Eina_Iterator *
eolian_type_enums_get_by_file(const char *fname)
{
if (!_structsf) return NULL;
if (!_enumsf) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_enumsf, shr);
eina_stringshare_del(shr);
@ -93,6 +115,17 @@ eolian_type_enums_get_by_file(const char *fname)
return eina_list_iterator_new(l);
}
EAPI Eina_Iterator *
eolian_typedecl_enums_get_by_file(const char *fname)
{
if (!_enumsd) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_enumsd, 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)
{

View File

@ -17,6 +17,9 @@ Eina_Hash *_classesf = NULL;
Eina_Hash *_aliasesf = NULL;
Eina_Hash *_structsf = NULL;
Eina_Hash *_enumsf = NULL;
Eina_Hash *_aliasesd = NULL;
Eina_Hash *_structsd = NULL;
Eina_Hash *_enumsd = NULL;
Eina_Hash *_globalsf = NULL;
Eina_Hash *_constantsf = NULL;
Eina_Hash *_filenames = NULL;
@ -54,6 +57,9 @@ database_init()
_enumsf = eina_hash_stringshared_new(_hashlist_free);
_globalsf = eina_hash_stringshared_new(_hashlist_free);
_constantsf = eina_hash_stringshared_new(_hashlist_free);
_aliasesd = eina_hash_stringshared_new(_hashlist_free);
_structsd = eina_hash_stringshared_new(_hashlist_free);
_enumsd = eina_hash_stringshared_new(_hashlist_free);
_filenames = eina_hash_string_small_new(free);
_tfilenames = eina_hash_string_small_new(free);
_decls = eina_hash_stringshared_new(free);
@ -88,6 +94,9 @@ database_shutdown()
eina_hash_free(_enumsf ); _enumsf = NULL;
eina_hash_free(_globalsf ); _globalsf = NULL;
eina_hash_free(_constantsf); _constantsf = NULL;
eina_hash_free(_aliasesd ); _aliasesd = NULL;
eina_hash_free(_structsd ); _structsd = NULL;
eina_hash_free(_enumsd ); _enumsd = NULL;
eina_hash_free(_filenames ); _filenames = NULL;
eina_hash_free(_tfilenames); _tfilenames = NULL;
eina_hash_free(_decls ); _decls = NULL;

View File

@ -41,6 +41,9 @@ extern Eina_Hash *_classesf;
extern Eina_Hash *_aliasesf;
extern Eina_Hash *_structsf;
extern Eina_Hash *_enumsf;
extern Eina_Hash *_aliasesd;
extern Eina_Hash *_structsd;
extern Eina_Hash *_enumsd;
extern Eina_Hash *_globalsf;
extern Eina_Hash *_constantsf;
extern Eina_Hash *_filenames; /* Hash: filename without extension -> full path */