bdilly pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=81782414dfba9a8a69ea42a4dd5b01fc19170d88

commit 81782414dfba9a8a69ea42a4dd5b01fc19170d88
Author: Guilherme Iscaro <isc...@profusion.mobi>
Date:   Fri Dec 2 11:16:33 2016 -0200

    Eo: Add efl_replace() function.
    
    This new function adds a new way to safely replace Eo pointer values.
---
 src/lib/eo/Eo.h | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h
index 8c81544..244478b 100644
--- a/src/lib/eo/Eo.h
+++ b/src/lib/eo/Eo.h
@@ -1334,6 +1334,28 @@ EAPI int efl_callbacks_cmp(const Efl_Callback_Array_Item 
*a, const Efl_Callback_
          EFL_CALLBACK_PRIORITY_DEFAULT, data)
 
 /**
+ * @def Replace the previously Eo pointer with new content.
+ *
+ * @param storage The object to replace the old reference. It can not be @c 
NULL.
+ * @param new_obj The new object. It may be @c NULL.
+ *
+ * The string pointed by @c storage must be previously an Eo or
+ * @c NULL and it will be efl_unref(). The @a new_obj will be passed
+ * to efl_ref() and then assigned to @c *storage.
+ *
+ * @see efl_ref()
+ * @see efl_unref()
+ */
+static inline void
+efl_replace(Eo **storage, Eo *new_obj)
+{
+   if (!storage || *storage == new_obj) return;
+   efl_ref(new_obj);
+   efl_unref(*storage);
+   *storage = new_obj;
+}
+
+/**
  * @}
  */
 

-- 


Reply via email to