Add eina_array_pop and rename eina_array_append by eina_array_push.

SVN revision: 35679
This commit is contained in:
Cedric BAIL 2008-08-26 10:23:45 +00:00
parent 3878e945fb
commit 4390a37a70
11 changed files with 79 additions and 18 deletions

View File

@ -50,7 +50,8 @@ EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array);
EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array *array);
static inline void * eina_array_get (const Eina_Array *array, unsigned int index);
static inline void eina_array_append (Eina_Array *array, const void *data);
static inline void eina_array_push (Eina_Array *array, const void *data);
static inline void * eina_array_pop (Eina_Array *array);
static inline unsigned int eina_array_count (const Eina_Array *array);
#define EINA_ARRAY_ITER_NEXT(array, index, item, iterator) \

View File

@ -42,7 +42,7 @@ eina_array_grow(Eina_Array *array)
}
static inline void
eina_array_append(Eina_Array *array, const void *data)
eina_array_push(Eina_Array *array, const void *data)
{
if (UNLIKELY((array->count + array->step) > array->total))
if (!eina_array_grow(array)) return ;
@ -50,6 +50,13 @@ eina_array_append(Eina_Array *array, const void *data)
array->data[array->count++] = (void*) data;
}
static inline void *
eina_array_pop(Eina_Array *array)
{
if (array->count <= 0) return NULL;
return array->data[--array->count];
}
static inline void *
eina_array_get(const Eina_Array *array, unsigned int index)
{

View File

@ -105,7 +105,7 @@ eina_magic_string_set(Eina_Magic magic, const char *magic_name)
else
ems->string = NULL;
eina_array_append(strings, ems);
eina_array_push(strings, ems);
}
EAPI void

View File

@ -30,6 +30,7 @@ eina_test_iterator.c \
eina_test_accessor.c \
eina_test_module.c \
eina_test_convert.c \
eina_test_rbtree.c \
eina_test_list.c
eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la

View File

@ -73,7 +73,7 @@ eina_bench_array_4evas_render_inline(int request)
ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
eina_array_append(array, ebo);
eina_array_push(array, ebo);
}
if (i == 500)
@ -137,7 +137,7 @@ eina_bench_array_4evas_render_iterator(int request)
ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
eina_array_append(array, ebo);
eina_array_push(array, ebo);
}
if (i == 500)

View File

@ -25,6 +25,54 @@
#include "eina_array.h"
#include "eina_bench.h"
static void
eina_bench_lookup_rbtree(int request)
{
Eina_Hash *hash = NULL;
Eina_Array *array = NULL;
int *tmp_val;
Eina_Array_Iterator it;
unsigned int i;
array = eina_array_new(1000);
hash = eina_hash_string_superfast_new();
for (i = 0; i < (unsigned int) request; ++i)
{
char tmp_key[10];
tmp_val = malloc(sizeof (int));
if (!tmp_val) continue ;
snprintf(tmp_key, 10, "%i", i);
*tmp_val = i;
eina_hash_add(hash, tmp_key, tmp_val);
eina_array_push(array, tmp_val);
}
srand(time(NULL));
for (i = 0; i < (unsigned int) request; ++i)
{
char tmp_key[10];
snprintf(tmp_key, 10, "%i", rand() % request);
tmp_val = eina_hash_find(hash, tmp_key);
}
eina_hash_free(hash);
EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
free(tmp_val);
eina_array_free(array);
}
static void
eina_bench_lookup_superfast(int request)
{
@ -51,7 +99,7 @@ eina_bench_lookup_superfast(int request)
eina_hash_add(hash, tmp_key, tmp_val);
eina_array_append(array, tmp_val);
eina_array_push(array, tmp_val);
}
srand(time(NULL));
@ -99,7 +147,7 @@ eina_bench_lookup_djb2(int request)
eina_hash_add(hash, tmp_key, tmp_val);
eina_array_append(array, tmp_val);
eina_array_push(array, tmp_val);
}
srand(time(NULL));
@ -148,7 +196,7 @@ eina_bench_lookup_djb2_inline(int request)
eina_hash_add_by_hash(hash, tmp_key, length, eina_hash_djb2(tmp_key, length), tmp_val);
eina_array_append(array, tmp_val);
eina_array_push(array, tmp_val);
}
srand(time(NULL));

View File

@ -45,7 +45,7 @@ eina_bench_stringshare_job(int request)
snprintf(build, 64, "string_%i", i);
tmp = eina_stringshare_add(build);
eina_array_append(ea, tmp);
eina_array_push(ea, tmp);
}
srand(time(NULL));
@ -58,7 +58,7 @@ eina_bench_stringshare_job(int request)
snprintf(build, 64, "string_%i", rand() % request);
tmp = eina_stringshare_add(build);
eina_array_append(ea, tmp);
eina_array_push(ea, tmp);
}
EINA_ARRAY_ITER_NEXT(ea, j, tmp, it)

View File

@ -56,7 +56,7 @@ START_TEST(eina_accessor_array_simple)
fail_if(!tmp);
*tmp = i;
eina_array_append(ea, tmp);
eina_array_push(ea, tmp);
}
it = eina_array_accessor_new(ea);

View File

@ -33,17 +33,21 @@ START_TEST(eina_array_simple)
ea = eina_array_new(11);
fail_if(!ea);
for (i = 0; i < 200; ++i)
for (i = 0; i < 201; ++i)
{
tmp = malloc(sizeof(char) * 10);
fail_if(!tmp);
snprintf(tmp, 10, "%i", i);
eina_array_append(ea, tmp);
eina_array_push(ea, tmp);
}
fail_if(eina_array_get(ea, 10) == NULL);
fail_if(atoi(eina_array_get(ea, 10)) != 10);
tmp = eina_array_pop(ea);
fail_if(tmp == NULL);
fail_if(atoi(tmp) != 200);
free(tmp);
EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
{
@ -78,7 +82,7 @@ START_TEST(eina_array_static)
fail_if(!tmp);
snprintf(tmp, 10, "%i", i);
eina_array_append(&sea, tmp);
eina_array_push(&sea, tmp);
}
fail_if(eina_array_get(&sea, 10) == NULL);
@ -129,7 +133,7 @@ START_TEST(eina_array_remove_stuff)
fail_if(!tmp);
*tmp = i;
eina_array_append(ea, tmp);
eina_array_push(ea, tmp);
}
// Remove the first 10 items

View File

@ -57,7 +57,7 @@ START_TEST(eina_iterator_array_simple)
fail_if(!tmp);
*tmp = i;
eina_array_append(ea, tmp);
eina_array_push(ea, tmp);
}
it = eina_array_iterator_new(ea);

View File

@ -101,14 +101,14 @@ START_TEST(eina_stringshare_collision)
for (i = 0; i < 10000; ++i)
{
snprintf(buffer, 1024, "%i", rand());
eina_array_append(ea, (void*) eina_stringshare_add(buffer));
eina_array_push(ea, (void*) eina_stringshare_add(buffer));
if (rand() > RAND_MAX / 2) eina_stringshare_add(buffer);
}
for (i = 0; i < 10000; ++i)
{
snprintf(buffer, 1024, "%i", 60000 - i);
eina_array_append(ea, (void*) eina_stringshare_add(buffer));
eina_array_push(ea, (void*) eina_stringshare_add(buffer));
eina_stringshare_add(buffer);
}