efl: add a way to allocate without memcpy data in an Eina_Inarray.
authorCedric BAIL <cedric.bail@free.fr>
Mon, 31 Dec 2012 00:05:02 +0000 (00:05 +0000)
committerCedric BAIL <cedric.bail@free.fr>
Mon, 31 Dec 2012 00:05:02 +0000 (00:05 +0000)
SVN revision: 81913

src/lib/eina/eina_inarray.c
src/lib/eina/eina_inarray.h

index 1a12757..274b1bb 100644 (file)
@@ -413,6 +413,22 @@ eina_inarray_push(Eina_Inarray *array, const void *data)
    return array->len - 1;
 }
 
+EAPI void *
+eina_inarray_add(Eina_Inarray *array)
+{
+   void *p;
+
+   EINA_MAGIC_CHECK_INARRAY(array, NULL);
+
+   if (!_eina_inarray_resize(array, array->len + 1))
+     return NULL;
+
+   p = _eina_inarray_get(array, array->len);
+   array->len++;
+
+   return p;
+}
+
 EAPI int
 eina_inarray_insert(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
 {
@@ -507,7 +523,7 @@ eina_inarray_pop(Eina_Inarray *array)
    if (!_eina_inarray_resize(array, array->len - 1))
      return NULL;
    array->len--;
-   return _eina_inarray_get(array, array->len + 1);
+   return _eina_inarray_get(array, array->len);
 }
 
 EAPI void *
index 034a116..8eafc55 100644 (file)
@@ -292,6 +292,17 @@ EAPI int eina_inarray_push(Eina_Inarray *array,
                            const void *data) EINA_ARG_NONNULL(1, 2);
 
 /**
+ * @brief Allocate a new item at the end of the array.
+ * @param array array object
+ *
+ * The returned pointer is only valid until you use any other eina_inarray
+ * function.
+ *
+ * @since 1.8
+ */
+EAPI void *eina_inarray_add(Eina_Inarray *array);
+
+/**
  * @brief Copy the data to array at position found by comparison function
  * @param array array object
  * @param data data to be copied