cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=966577ffedec4f1d92265a7c17b1e633c345eb09

commit 966577ffedec4f1d92265a7c17b1e633c345eb09
Author: Vincent Torri <[email protected]>
Date:   Mon Sep 11 03:52:47 2017 +0200

    eina: add an Eina_Value helper for Eina_Rectangle.
---
 configure.ac              |   3 +-
 src/lib/eina/eina_value.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++
 src/lib/eina/eina_value.h |   9 ++++
 3 files changed, 130 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 2d4e048065..c202d0d32b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -969,6 +969,7 @@ case "$host_os" in
          [
           have_socket="yes"
           requirement_socket="-lsocket"
+          requirement_nsl="-lnsl"
          ],
          [have_socket="no"])
       ;;
@@ -3119,7 +3120,7 @@ fi
 AM_CONDITIONAL([EFL_NET_CONTROL_BACKEND_CONNMAN], [test 
"${EFL_NET_CONTROL_BACKEND}" = "connman"])
 AM_CONDITIONAL([EFL_NET_CONTROL_BACKEND_NONE], [test 
"${EFL_NET_CONTROL_BACKEND}" = "none"])
 
-EFL_ADD_LIBS([ECORE_CON], [-lm])
+EFL_ADD_LIBS([ECORE_CON], [${requirement_nsl} -lm])
 
 EFL_OPTIONAL_DEPEND_PKG([ECORE_CON], [${want_systemd}], [SYSTEMD], 
[libsystemd])
 
diff --git a/src/lib/eina/eina_value.c b/src/lib/eina/eina_value.c
index 22b3f506e0..1fa84de231 100644
--- a/src/lib/eina/eina_value.c
+++ b/src/lib/eina/eina_value.c
@@ -36,6 +36,7 @@
 #include "eina_mempool.h"
 #include "eina_lock.h"
 #include "eina_file.h"
+#include "eina_rectangle.h"
 
 /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
 #include "eina_safety_checks.h"
@@ -4782,6 +4783,122 @@ EAPI const Eina_Value_Type _EINA_VALUE_TYPE_FILE = {
   _eina_value_type_file_pget
 };
 
+static Eina_Bool
+_eina_value_type_rectangle_setup(const Eina_Value_Type *type EINA_UNUSED, void 
*mem)
+{
+   memset(mem, 0, sizeof(Eina_Rectangle));
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_flush(const Eina_Value_Type *type EINA_UNUSED,
+                                 void *mem EINA_UNUSED)
+{
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_copy(const Eina_Value_Type *type EINA_UNUSED, const 
void *src, void *dst)
+{
+   memcpy(dst, src, sizeof (Eina_Rectangle));
+
+   return EINA_TRUE;
+}
+
+static int
+_eina_value_type_rectangle_compare(const Eina_Value_Type *type EINA_UNUSED, 
const void *a, const void *b)
+{
+   const Eina_Rectangle *ra = a;
+   const Eina_Rectangle *rb = b;
+
+   if (eina_rectangle_equal(ra, rb)) return 0;
+   return -1;
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_convert_to(const Eina_Value_Type *type EINA_UNUSED, 
const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
+{
+   const Eina_Rectangle *tr = type_mem;
+   Eina_Bool ret = EINA_FALSE;
+
+   if ((convert == EINA_VALUE_TYPE_STRING) ||
+       (convert == EINA_VALUE_TYPE_STRINGSHARE))
+     {
+        Eina_Strbuf *buf;
+        const char *str;
+
+        buf = eina_strbuf_new();
+        eina_strbuf_append_printf(buf, "[ %i, %i, %i, %i ]",
+                                  tr->x, tr->y, tr->w, tr->h);
+        str = eina_strbuf_string_get(buf);
+        ret = eina_value_type_pset(convert, convert_mem, &str);
+     }
+
+   return ret;
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_convert_from(const Eina_Value_Type *type 
EINA_UNUSED, const Eina_Value_Type *convert, void *type_mem, const void 
*convert_mem)
+{
+   Eina_Rectangle *r = type_mem;
+
+   if ((convert == EINA_VALUE_TYPE_STRING) ||
+       (convert == EINA_VALUE_TYPE_STRINGSHARE))
+     {
+        const char *buf = *(const char **)convert_mem;
+        int ret;
+
+        ret = sscanf(buf, "[ %i, %i, %i, %i ]",
+                     &r->x, &r->y, &r->w, &r->h);
+
+        if (ret <= 0) return EINA_FALSE;
+        return EINA_TRUE;
+     }
+
+   return EINA_FALSE;
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_pset(const Eina_Value_Type *type EINA_UNUSED, void 
*mem, const void *ptr)
+{
+   const Eina_Rectangle *r = ptr;
+   Eina_Rectangle *tr = mem;
+
+   *tr = *r;
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_vset(const Eina_Value_Type *type, void *mem, 
va_list args)
+{
+   const Eina_Rectangle *r = va_arg(args, Eina_Rectangle *);
+   return _eina_value_type_rectangle_pset(type, mem, r);
+}
+
+static Eina_Bool
+_eina_value_type_rectangle_pget(const Eina_Value_Type *type EINA_UNUSED, const 
void *mem, void *ptr)
+{
+   const Eina_Rectangle *tr = mem;
+
+   memcpy(ptr, &tr, sizeof (void*));
+   return EINA_TRUE;
+}
+
+EAPI const Eina_Value_Type _EINA_VALUE_TYPE_RECTANGLE = {
+  EINA_VALUE_TYPE_VERSION,
+  sizeof (Eina_Rectangle),
+  "Eina_Value_Rectangle",
+  _eina_value_type_rectangle_setup,
+  _eina_value_type_rectangle_flush,
+  _eina_value_type_rectangle_copy,
+  _eina_value_type_rectangle_compare,
+  _eina_value_type_rectangle_convert_to,
+  _eina_value_type_rectangle_convert_from,
+  _eina_value_type_rectangle_vset,
+  _eina_value_type_rectangle_pset,
+  _eina_value_type_rectangle_pget
+};
+
 /* keep all basic types inlined in an array so we can compare if it's
  * a basic type using pointer arithmetic.
  *
@@ -5236,6 +5353,7 @@ eina_value_init(void)
 
    EINA_VALUE_TYPE_OPTIONAL = &_EINA_VALUE_TYPE_OPTIONAL;
    EINA_VALUE_TYPE_FILE = &_EINA_VALUE_TYPE_FILE;
+   EINA_VALUE_TYPE_RECTANGLE = &_EINA_VALUE_TYPE_RECTANGLE;
 
    EINA_VALUE_BLOB_OPERATIONS_MALLOC = &_EINA_VALUE_BLOB_OPERATIONS_MALLOC;
 
@@ -5325,6 +5443,7 @@ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL;
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL;
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL = NULL;
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_FILE = NULL;
+EAPI const Eina_Value_Type *EINA_VALUE_TYPE_RECTANGLE = NULL;
 
 
 EAPI const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = 
NULL;
diff --git a/src/lib/eina/eina_value.h b/src/lib/eina/eina_value.h
index c1b6deec79..d698043463 100644
--- a/src/lib/eina/eina_value.h
+++ b/src/lib/eina/eina_value.h
@@ -26,6 +26,7 @@
 #include "eina_inarray.h"
 #include "eina_list.h"
 #include "eina_hash.h"
+#include "eina_rectangle.h"
 
 /**
  * @page eina_value_example_01_page Eina_Value usage
@@ -3677,6 +3678,14 @@ static inline const Eina_Value_Type 
*eina_value_optional_type_get(Eina_Value *va
 EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_FILE;
 
 /**
+ * @var EINA_VALUE_TYPE_RECTANGLE
+ * manages optional type.
+ *
+ * @since 1.21
+ */
+EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_RECTANGLE;
+
+/**
  * @}
  */
 

-- 


Reply via email to