q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e28e481cca6011053e3c4b11d7157d6cb3c03aa5
commit e28e481cca6011053e3c4b11d7157d6cb3c03aa5 Author: Daniel Kolesa <d.kol...@osg.samsung.com> Date: Thu Mar 1 12:09:02 2018 +0100 eolian: new variable lookup APIs --- src/lib/eolian/Eolian.h | 197 ++++++++++++++++++++++++-------------- src/lib/eolian/database_var_api.c | 55 ----------- src/lib/eolian/eolian_database.c | 117 ++++++++++++++++++++++ 3 files changed, 244 insertions(+), 125 deletions(-) diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index b7f5b6bc66..b4581478cb 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -688,6 +688,73 @@ EAPI const Eolian_Class *eolian_state_class_by_file_get(const Eolian_State *stat EAPI Eina_Iterator *eolian_state_classes_get(const Eolian_State *state); /* + * @brief Get a global variable in a state by name. + * + * @param[in] state The state. + * @param[in] name the name of the variable + * + * @ingroup Eolian + */ +EAPI const Eolian_Variable *eolian_state_global_by_name_get(const Eolian_State *state, const char *name); + +/* + * @brief Get a constant variable in a state by name. + * + * @param[in] state The state. + * @param[in] name the name of the variable + * + * @ingroup Eolian + */ +EAPI const Eolian_Variable *eolian_state_constant_by_name_get(const Eolian_State *state, const char *name); + +/* + * @brief Get an iterator to all global variables contained in a file. + * + * @param[in] state The state. + * @param[in] file_name The file name. + * + * Thanks to internal caching, this is an O(1) operation. + * + * @ingroup Eolian + */ +EAPI Eina_Iterator *eolian_state_globals_by_file_get(const Eolian_State *state, const char *file_name); + +/* + * @brief Get an iterator to all constant variables contained in a file. + * + * @param[in] state The state. + * @param[in] file_name The file name. + * @return the iterator or NULL + * + * Thanks to internal caching, this is an O(1) operation. + * + * @ingroup Eolian + */ +EAPI Eina_Iterator *eolian_state_constants_by_file_get(const Eolian_State *state, const char *file_name); + +/* + * @brief Get an iterator to all constant variables in the Eolian database. + * + * @return the iterator or NULL + * + * Thanks to internal caching, this is an O(1) operation. + * + * @ingroup Eolian + */ +EAPI Eina_Iterator *eolian_state_constants_get(const Eolian_State *state); + +/* + * @brief Get an iterator to all global variables in the Eolian database. + * + * @return the iterator or NULL + * + * Thanks to internal caching, this is an O(1) operation. + * + * @ingroup Eolian + */ +EAPI Eina_Iterator *eolian_state_globals_get(const Eolian_State *state); + +/* * @brief Get the children (dependencies) of a unit. * * The iterator is obviously again to `const Eolian_Unit *`. @@ -730,6 +797,48 @@ EAPI const Eolian_Class *eolian_unit_class_by_name_get(const Eolian_Unit *unit, EAPI Eina_Iterator *eolian_unit_classes_get(const Eolian_Unit *unit); /* + * @brief Get a global variable in a unit by name. + * + * @param[in] unit The unit. + * @param[in] name the name of the variable + * + * @ingroup Eolian + */ +EAPI const Eolian_Variable *eolian_unit_global_by_name_get(const Eolian_Unit *unit, const char *name); + +/* + * @brief Get a constant variable in a unit by name. + * + * @param[in] unit The unit. + * @param[in] name the name of the variable + * + * @ingroup Eolian + */ +EAPI const Eolian_Variable *eolian_unit_constant_by_name_get(const Eolian_Unit *unit, const char *name); + +/* + * @brief Get an iterator to all constant variables in the Eolian database. + * + * @return the iterator or NULL + * + * Thanks to internal caching, this is an O(1) operation. + * + * @ingroup Eolian + */ +EAPI Eina_Iterator *eolian_unit_constants_get(const Eolian_Unit *unit); + +/* + * @brief Get an iterator to all global variables in the Eolian database. + * + * @return the iterator or NULL + * + * Thanks to internal caching, this is an O(1) operation. + * + * @ingroup Eolian + */ +EAPI Eina_Iterator *eolian_unit_globals_get(const Eolian_Unit *unit); + +/* * @brief Returns the name of the file containing the given class. * * @param[in] klass the class. @@ -2305,76 +2414,6 @@ EAPI const Eolian_Expression *eolian_expression_unary_expression_get(const Eolia EAPI Eolian_Value eolian_expression_value_get(const Eolian_Expression *expr); /* - * @brief Get a global variable by name. Supports namespaces. - * - * @param[in] unit the unit to look in - * @param[in] name the name of the variable - * @return the variable handle or NULL - * - * @ingroup Eolian - */ -EAPI const Eolian_Variable *eolian_variable_global_get_by_name(const Eolian_Unit *unit, const char *name); - -/* - * @brief Get a constant variable by name. Supports namespaces. - * - * @param[in] unit the unit to look in - * @param[in] name the name of the variable - * @return the variable handle or NULL - * - * @ingroup Eolian - */ -EAPI const Eolian_Variable *eolian_variable_constant_get_by_name(const Eolian_Unit *unit, const char *name); - -/* - * @brief Get an iterator to all global variables contained in a file. - * - * @param[in] unit the unit to look in - * @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_variable_globals_get_by_file(const Eolian_Unit *unit, const char *fname); - -/* - * @brief Get an iterator to all constant variables contained in a file. - * - * @param[in] unit the unit to look in - * @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_variable_constants_get_by_file(const Eolian_Unit *unit, const char *fname); - -/* - * @brief Get an iterator to all constant variables in the Eolian database. - * - * @return the iterator or NULL - * - * Thanks to internal caching, this is an O(1) operation. - * - * @ingroup Eolian - */ -EAPI Eina_Iterator *eolian_variable_all_constants_get(const Eolian_Unit *unit); - -/* - * @brief Get an iterator to all global variables in the Eolian database. - * - * @return the iterator or NULL - * - * Thanks to internal caching, this is an O(1) operation. - * - * @ingroup Eolian - */ -EAPI Eina_Iterator *eolian_variable_all_globals_get(const Eolian_Unit *unit); - -/* * @brief Get the type of a variable (global, constant) * * @param[in] var the variable. @@ -2715,6 +2754,24 @@ EAPI const Eolian_Class *eolian_class_get_by_file(const Eolian_Unit *unit, const /* DEPRECATED */ EAPI Eina_Iterator *eolian_all_classes_get(const Eolian_Unit *unit); +/* DEPRECATED */ +EAPI const Eolian_Variable *eolian_variable_global_get_by_name(const Eolian_Unit *unit, const char *name); + +/* DEPRECATED */ +EAPI const Eolian_Variable *eolian_variable_constant_get_by_name(const Eolian_Unit *unit, const char *name); + +/* DEPRECATED */ +EAPI Eina_Iterator *eolian_variable_globals_get_by_file(const Eolian_Unit *unit, const char *fname); + +/* DEPRECATED */ +EAPI Eina_Iterator *eolian_variable_constants_get_by_file(const Eolian_Unit *unit, const char *fname); + +/* DEPRECATED */ +EAPI Eina_Iterator *eolian_variable_all_constants_get(const Eolian_Unit *unit); + +/* DEPRECATED */ +EAPI Eina_Iterator *eolian_variable_all_globals_get(const Eolian_Unit *unit); + #endif /** diff --git a/src/lib/eolian/database_var_api.c b/src/lib/eolian/database_var_api.c index 1e92c62e8b..cde46b9a0a 100644 --- a/src/lib/eolian/database_var_api.c +++ b/src/lib/eolian/database_var_api.c @@ -5,61 +5,6 @@ #include <Eina.h> #include "eolian_database.h" -EAPI const Eolian_Variable * -eolian_variable_global_get_by_name(const Eolian_Unit *unit, const char *name) -{ - if (!unit) return NULL; - Eina_Stringshare *shr = eina_stringshare_add(name); - Eolian_Variable *v = eina_hash_find(unit->globals, shr); - eina_stringshare_del(shr); - return v; -} - -EAPI const Eolian_Variable * -eolian_variable_constant_get_by_name(const Eolian_Unit *unit, const char *name) -{ - if (!unit) return NULL; - Eina_Stringshare *shr = eina_stringshare_add(name); - Eolian_Variable *v = eina_hash_find(unit->constants, shr); - eina_stringshare_del(shr); - return v; -} - -EAPI Eina_Iterator * -eolian_variable_globals_get_by_file(const Eolian_Unit *unit, const char *fname) -{ - if (!unit) return NULL; - Eina_Stringshare *shr = eina_stringshare_add(fname); - Eina_List *l = eina_hash_find(unit->state->globals_f, shr); - eina_stringshare_del(shr); - if (!l) return NULL; - return eina_list_iterator_new(l); -} - -EAPI Eina_Iterator * -eolian_variable_constants_get_by_file(const Eolian_Unit *unit, - const char *fname) -{ - if (!unit) return NULL; - Eina_Stringshare *shr = eina_stringshare_add(fname); - Eina_List *l = eina_hash_find(unit->state->constants_f, shr); - eina_stringshare_del(shr); - if (!l) return NULL; - return eina_list_iterator_new(l); -} - -EAPI Eina_Iterator * -eolian_variable_all_constants_get(const Eolian_Unit *unit) -{ - return (unit ? eina_hash_iterator_data_new(unit->constants) : NULL); -} - -EAPI Eina_Iterator * -eolian_variable_all_globals_get(const Eolian_Unit *unit) -{ - return (unit ? eina_hash_iterator_data_new(unit->globals) : NULL); -} - EAPI Eolian_Variable_Type eolian_variable_type_get(const Eolian_Variable *var) { diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index ada3062f3e..578d38027d 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -956,6 +956,52 @@ eolian_state_classes_get(const Eolian_State *state) return eolian_unit_classes_get((Eolian_Unit *)state); } +EAPI const Eolian_Variable * +eolian_state_global_by_name_get(const Eolian_State *state, const char *name) +{ + return eolian_unit_global_by_name_get((Eolian_Unit *)state, name); +} + +EAPI const Eolian_Variable * +eolian_state_constant_by_name_get(const Eolian_State *state, const char *name) +{ + return eolian_unit_constant_by_name_get((Eolian_Unit *)state, name); +} + +EAPI Eina_Iterator * +eolian_state_globals_by_file_get(const Eolian_State *state, const char *file_name) +{ + if (!state) return NULL; + Eina_Stringshare *shr = eina_stringshare_add(file_name); + Eina_List *l = eina_hash_find(state->globals_f, shr); + eina_stringshare_del(shr); + if (!l) return NULL; + return eina_list_iterator_new(l); +} + +EAPI Eina_Iterator * +eolian_state_constants_by_file_get(const Eolian_State *state, const char *file_name) +{ + if (!state) return NULL; + Eina_Stringshare *shr = eina_stringshare_add(file_name); + Eina_List *l = eina_hash_find(state->constants_f, shr); + eina_stringshare_del(shr); + if (!l) return NULL; + return eina_list_iterator_new(l); +} + +EAPI Eina_Iterator * +eolian_state_constants_get(const Eolian_State *state) +{ + return eolian_unit_constants_get((Eolian_Unit *)state); +} + +EAPI Eina_Iterator * +eolian_state_globals_get(const Eolian_State *state) +{ + return eolian_unit_globals_get((Eolian_Unit *)state); +} + EAPI Eina_Iterator * eolian_unit_children_get(const Eolian_Unit *unit) { @@ -1005,6 +1051,77 @@ eolian_all_classes_get(const Eolian_Unit *unit) return eolian_unit_classes_get(unit); } +EAPI const Eolian_Variable * +eolian_unit_global_by_name_get(const Eolian_Unit *unit, const char *name) +{ + if (!unit) return NULL; + Eina_Stringshare *shr = eina_stringshare_add(name); + Eolian_Variable *v = eina_hash_find(unit->globals, shr); + eina_stringshare_del(shr); + return v; +} + +EAPI const Eolian_Variable * +eolian_unit_constant_by_name_get(const Eolian_Unit *unit, const char *name) +{ + if (!unit) return NULL; + Eina_Stringshare *shr = eina_stringshare_add(name); + Eolian_Variable *v = eina_hash_find(unit->constants, shr); + eina_stringshare_del(shr); + return v; +} + +EAPI Eina_Iterator * +eolian_unit_constants_get(const Eolian_Unit *unit) +{ + return (unit ? eina_hash_iterator_data_new(unit->constants) : NULL); +} + +EAPI Eina_Iterator * +eolian_unit_globals_get(const Eolian_Unit *unit) +{ + return (unit ? eina_hash_iterator_data_new(unit->globals) : NULL); +} + +EAPI const Eolian_Variable * +eolian_variable_global_get_by_name(const Eolian_Unit *unit, const char *name) +{ + return eolian_unit_global_by_name_get(unit, name); +} + +EAPI const Eolian_Variable * +eolian_variable_constant_get_by_name(const Eolian_Unit *unit, const char *name) +{ + return eolian_unit_constant_by_name_get(unit, name); +} + +EAPI Eina_Iterator * +eolian_variable_globals_get_by_file(const Eolian_Unit *unit, const char *fname) +{ + if (!unit) return NULL; + return eolian_state_globals_by_file_get(unit->state, fname); +} + +EAPI Eina_Iterator * +eolian_variable_constants_get_by_file(const Eolian_Unit *unit, + const char *fname) +{ + if (!unit) return NULL; + return eolian_state_constants_by_file_get(unit->state, fname); +} + +EAPI Eina_Iterator * +eolian_variable_all_constants_get(const Eolian_Unit *unit) +{ + return eolian_unit_constants_get(unit); +} + +EAPI Eina_Iterator * +eolian_variable_all_globals_get(const Eolian_Unit *unit) +{ + return eolian_unit_globals_get(unit); +} + char * database_class_to_filename(const char *cname) { --