eo: add the ability to get the size of object of a certain class.

Their was two different way to implement this, either like this with
a simple function that work on Efl_Class, or by a function on
Efl.Object. I leaned on the first one, but I could easily be convinced
it should be done on Efl.Object actually.

Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es>
Differential Revision: https://phab.enlightenment.org/D7441
This commit is contained in:
Cedric BAIL 2018-12-06 16:36:59 -08:00
parent 35acfebee4
commit e02dba3377
2 changed files with 35 additions and 1 deletions

View File

@ -918,13 +918,22 @@ EAPI Eina_Bool efl_isa(const Eo *obj, const Efl_Class *klass);
/**
* @brief Gets the name of the passed class.
* @param klass the class to work on.
* @param[in] klass The class (or object) to work on.
* @return The class' name.
*
* @see efl_class_get()
*/
EAPI const char *efl_class_name_get(const Efl_Class *klass);
/**
* @brief Gets the amount of memory this class object would use.
* @param[in] klass The class (or object) to work on.
* @return The amount of memory in Bytes.
*
* @see efl_class_get()
*/
EAPI size_t efl_class_memory_size_get(const Efl_Class *klass);
/**
* @brief Gets a debug name for this object
* @param obj_id The object (or class)

View File

@ -1150,6 +1150,31 @@ err_obj:
return NULL;
}
EAPI const size_t
efl_class_memory_size_get(const Efl_Class *eo_id)
{
const _Efl_Class *klass;
if (_eo_is_a_class(eo_id))
{
EO_CLASS_POINTER_GOTO(eo_id, _klass, err_klass);
klass = _klass;
}
else
{
EO_OBJ_POINTER_GOTO(eo_id, obj, err_obj);
klass = obj->klass;
EO_OBJ_DONE(eo_id);
}
return klass->obj_size;
err_klass:
_EO_POINTER_ERR(eo_id, "Class (%p) is an invalid ref.", eo_id);
err_obj:
return 0;
}
static void
_vtable_init(Eo_Vtable *vtable, size_t size)
{