Eo: Added eo_destructed_is.
authortasn <tasn>
Wed, 12 Sep 2012 11:31:58 +0000 (11:31 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 12 Sep 2012 11:31:58 +0000 (11:31 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eobj@76518 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Eo.h
src/lib/eo.c
src/tests/eo_suite/eo_test_general.c

index 08f0a1a..ffb46fb 100644 (file)
@@ -744,6 +744,17 @@ EAPI void eo_manual_free_set(Eo *obj, Eina_Bool manual_free);
 EAPI void eo_manual_free(Eo *obj);
 
 /**
+ * @brief Checks if the object was already descructed (only relevant for manual_free objects).
+ * @param obj the object to check.
+ * This function checks if the object was already destructed (but not alraedy
+ * freed). It should only be used with objects that are supposed to be manually
+ * freed, but not yet freed (but possibly destructed).
+ *
+ * @see eo_manual_free_set()
+ */
+EAPI Eina_Bool eo_destructed_is(const Eo *obj);
+
+/**
  * @addtogroup Eo_Composite_Objects Composite Objects.
  * @{
  */
index 59e11f3..9eaba3d 100644 (file)
@@ -1545,6 +1545,14 @@ eo_composite_is(const Eo *comp_obj)
    return comp_obj->composite;
 }
 
+EAPI Eina_Bool
+eo_destructed_is(const Eo *obj)
+{
+   EO_MAGIC_RETURN_VAL(obj, EO_EINA_MAGIC, EINA_FALSE);
+
+   return obj->del;
+}
+
 EAPI void
 eo_manual_free_set(Eo *obj, Eina_Bool manual_free)
 {
index 0de71dc..0ab8153 100644 (file)
@@ -231,12 +231,15 @@ START_TEST(eo_man_free)
    obj = eo_add(klass, NULL);
    fail_if(!obj);
    eo_manual_free(obj);
+   fail_if(eo_destructed_is(obj));
    eo_unref(obj);
+   fail_if(!eo_destructed_is(obj));
    eo_manual_free(obj);
 
    obj = eo_add(klass, NULL);
    fail_if(!obj);
    eo_unref(obj);
+   fail_if(!eo_destructed_is(obj));
    eo_manual_free(obj);
 
    _man_should_con = EINA_FALSE;
@@ -618,6 +621,7 @@ START_TEST(eo_magic_checks)
 
         eo_manual_free_set((Eo *) buf, EINA_TRUE);
         eo_manual_free((Eo *) buf);
+        eo_destructed_is((Eo *) buf);
 
         eo_unref(obj);