forked from enlightenment/efl
Easier API and follow gustavo's remark.
SVN revision: 35440
This commit is contained in:
parent
fd4aae2064
commit
a46c20d137
|
@ -26,7 +26,7 @@ typedef struct _Eina_Accessor Eina_Accessor;
|
|||
|
||||
EAPI void eina_accessor_free (Eina_Accessor *accessor);
|
||||
|
||||
EAPI void *eina_accessor_data_get (Eina_Accessor *accessor, unsigned int position);
|
||||
EAPI Eina_Bool eina_accessor_data_get (Eina_Accessor *accessor, unsigned int position, void **data);
|
||||
EAPI void *eina_accessor_container_get (Eina_Accessor *accessor);
|
||||
|
||||
EAPI void eina_accessor_over (Eina_Accessor *accessor,
|
||||
|
|
|
@ -26,10 +26,8 @@ typedef struct _Eina_Iterator Eina_Iterator;
|
|||
|
||||
EAPI void eina_iterator_free (Eina_Iterator *iterator);
|
||||
|
||||
EAPI void *eina_iterator_data_get (Eina_Iterator *iterator);
|
||||
EAPI void *eina_iterator_container_get (Eina_Iterator *iterator);
|
||||
|
||||
EAPI Eina_Error eina_iterator_next (Eina_Iterator *iterator);
|
||||
EAPI Eina_Bool eina_iterator_next (Eina_Iterator *iterator, void **data);
|
||||
|
||||
EAPI void eina_iterator_foreach (Eina_Iterator *iterator,
|
||||
Eina_Each callback,
|
||||
|
|
|
@ -115,30 +115,25 @@ typedef struct _Eina_Mempool_Backend
|
|||
} Eina_Mempool_Backend;
|
||||
|
||||
/* Iterator/accessor private type */
|
||||
typedef Eina_Bool (*Eina_Iterator_Next_Callback)(Eina_Iterator *it);
|
||||
typedef void *(*Eina_Iterator_Get_Content_Callback)(Eina_Iterator *it);
|
||||
typedef Eina_Bool (*Eina_Iterator_Next_Callback)(Eina_Iterator *it, void **data);
|
||||
typedef void *(*Eina_Iterator_Get_Container_Callback)(Eina_Iterator *it);
|
||||
typedef void (*Eina_Iterator_Free_Callback)(Eina_Iterator *it);
|
||||
|
||||
#define FUNC_ITERATOR_NEXT(Function) ((Eina_Iterator_Next_Callback)Function)
|
||||
#define FUNC_ITERATOR_GET_CONTENT(Function) ((Eina_Iterator_Get_Content_Callback)Function)
|
||||
#define FUNC_ITERATOR_GET_CONTAINER(Function) ((Eina_Iterator_Get_Container_Callback)Function)
|
||||
#define FUNC_ITERATOR_FREE(Function) ((Eina_Iterator_Free_Callback)Function)
|
||||
|
||||
typedef Eina_Bool (*Eina_Accessor_Jump_At_Callback)(Eina_Accessor *it, unsigned int index);
|
||||
typedef void *(*Eina_Accessor_Get_Content_Callback)(Eina_Accessor *it);
|
||||
typedef Eina_Bool (*Eina_Accessor_Jump_At_Callback)(Eina_Accessor *it, unsigned int index, void **data);
|
||||
typedef void *(*Eina_Accessor_Get_Container_Callback)(Eina_Accessor *it);
|
||||
typedef void (*Eina_Accessor_Free_Callback)(Eina_Accessor *it);
|
||||
|
||||
#define FUNC_ACCESSOR_JUMP_AT(Function) ((Eina_Accessor_Jump_At_Callback)Function)
|
||||
#define FUNC_ACCESSOR_GET_CONTENT(Function) ((Eina_Accessor_Get_Content_Callback)Function)
|
||||
#define FUNC_ACCESSOR_GET_CONTAINER(Function) ((Eina_Accessor_Get_Container_Callback)Function)
|
||||
#define FUNC_ACCESSOR_FREE(Function) ((Eina_Accessor_Free_Callback)Function)
|
||||
|
||||
struct _Eina_Iterator
|
||||
{
|
||||
Eina_Iterator_Next_Callback next;
|
||||
Eina_Iterator_Get_Content_Callback get_content;
|
||||
Eina_Iterator_Get_Container_Callback get_container;
|
||||
Eina_Iterator_Free_Callback free;
|
||||
};
|
||||
|
@ -146,9 +141,9 @@ struct _Eina_Iterator
|
|||
struct _Eina_Accessor
|
||||
{
|
||||
Eina_Accessor_Jump_At_Callback jump_at;
|
||||
Eina_Accessor_Get_Content_Callback get_content;
|
||||
Eina_Accessor_Get_Container_Callback get_container;
|
||||
Eina_Accessor_Free_Callback free;
|
||||
};
|
||||
|
||||
#endif /* EINA_PRIVATE_H_ */
|
||||
|
||||
|
|
|
@ -32,12 +32,11 @@ eina_accessor_free(Eina_Accessor *accessor)
|
|||
if (accessor) accessor->free(accessor);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
eina_accessor_data_get(Eina_Accessor *accessor, unsigned int position)
|
||||
EAPI Eina_Bool
|
||||
eina_accessor_data_get(Eina_Accessor *accessor, unsigned int position, void **data)
|
||||
{
|
||||
if (!accessor) return NULL;
|
||||
if (accessor->jump_at(accessor, position) != EINA_TRUE) return NULL;
|
||||
return accessor->get_content(accessor);
|
||||
if (!accessor) return EINA_FALSE;
|
||||
return accessor->jump_at(accessor, position, data);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
|
@ -61,16 +60,8 @@ eina_accessor_over(Eina_Accessor *accessor,
|
|||
if (!accessor) return ;
|
||||
if (!(start < end)) return ;
|
||||
|
||||
if (accessor->jump_at(accessor, start) != EINA_TRUE) return ;
|
||||
|
||||
container = accessor->get_container(accessor);
|
||||
do {
|
||||
data = accessor->get_content(accessor);
|
||||
|
||||
for (i = start; i < end && accessor->jump_at(accessor, i, &data) == EINA_TRUE; ++i)
|
||||
if (cb(container, data, (void*) fdata) != EINA_TRUE) return ;
|
||||
|
||||
++i;
|
||||
} while (i < end && accessor->jump_at(accessor, i) == EINA_TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -181,21 +181,15 @@ struct _Eina_Iterator_Array
|
|||
unsigned int index;
|
||||
};
|
||||
|
||||
static Eina_Bool
|
||||
eina_array_iterator_next(Eina_Iterator_Array *it)
|
||||
{
|
||||
if (!(it->index + 1 < eina_array_count(it->array)))
|
||||
return EINA_FALSE;
|
||||
it->index++;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void *
|
||||
eina_array_iterator_get_content(Eina_Iterator_Array *it)
|
||||
eina_array_iterator_next(Eina_Iterator_Array *it, void **data)
|
||||
{
|
||||
if (!(it->index < eina_array_count(it->array)))
|
||||
return NULL;
|
||||
return eina_array_get(it->array, it->index);
|
||||
return EINA_FALSE;
|
||||
if (data)
|
||||
*data = eina_array_get(it->array, it->index);
|
||||
it->index++;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Array *
|
||||
|
@ -228,7 +222,6 @@ eina_array_iterator_new(const Eina_Array *array)
|
|||
it->array = array;
|
||||
|
||||
it->iterator.next = FUNC_ITERATOR_NEXT(eina_array_iterator_next);
|
||||
it->iterator.get_content = FUNC_ITERATOR_GET_CONTENT(eina_array_iterator_get_content);
|
||||
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(eina_array_iterator_get_container);
|
||||
it->iterator.free = FUNC_ITERATOR_FREE(eina_array_iterator_free);
|
||||
|
||||
|
@ -241,26 +234,18 @@ struct _Eina_Accessor_Array
|
|||
Eina_Accessor accessor;
|
||||
|
||||
const Eina_Array *array;
|
||||
unsigned int index;
|
||||
};
|
||||
|
||||
static Eina_Bool
|
||||
eina_array_accessor_jump_at(Eina_Accessor_Array *it, unsigned int index)
|
||||
eina_array_accessor_jump_at(Eina_Accessor_Array *it, unsigned int index, void **data)
|
||||
{
|
||||
if (!(index < eina_array_count(it->array)))
|
||||
return EINA_FALSE;
|
||||
it->index = index;
|
||||
if (data)
|
||||
*data = eina_array_get(it->array, index);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void *
|
||||
eina_array_accessor_get_content(Eina_Accessor_Array *it)
|
||||
{
|
||||
if (!(it->index < eina_array_count(it->array)))
|
||||
return NULL;
|
||||
return eina_array_get(it->array, it->index);
|
||||
}
|
||||
|
||||
static Eina_Array *
|
||||
eina_array_accessor_get_container(Eina_Accessor_Array *it)
|
||||
{
|
||||
|
@ -290,7 +275,6 @@ eina_array_accessor_new(const Eina_Array *array)
|
|||
it->array = array;
|
||||
|
||||
it->accessor.jump_at = FUNC_ACCESSOR_JUMP_AT(eina_array_accessor_jump_at);
|
||||
it->accessor.get_content = FUNC_ACCESSOR_GET_CONTENT(eina_array_accessor_get_content);
|
||||
it->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(eina_array_accessor_get_container);
|
||||
it->accessor.free = FUNC_ACCESSOR_FREE(eina_array_accessor_free);
|
||||
|
||||
|
|
|
@ -57,10 +57,14 @@ struct _Eina_Hash_Foreach
|
|||
const void *fdata;
|
||||
};
|
||||
|
||||
typedef void *(*Eina_Iterator_Get_Content_Callback)(Eina_Iterator_Hash *it);
|
||||
#define FUNC_ITERATOR_GET_CONTENT(Function) ((Eina_Iterator_Get_Content_Callback)Function)
|
||||
|
||||
struct _Eina_Iterator_Hash
|
||||
{
|
||||
Eina_Iterator iterator;
|
||||
|
||||
Eina_Iterator_Get_Content_Callback get_content;
|
||||
const Eina_Hash *hash;
|
||||
|
||||
Eina_Inlist *current;
|
||||
|
@ -134,8 +138,35 @@ _eina_foreach_cb(const Eina_Hash *hash, Eina_Hash_Tuple *data, Eina_Hash_Foreach
|
|||
return fdata->cb((Eina_Hash *) hash, data->key, data->data, (void*) fdata->fdata);
|
||||
}
|
||||
|
||||
static void *
|
||||
_eina_hash_iterator_data_get_content(Eina_Iterator_Hash *it)
|
||||
{
|
||||
Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
|
||||
|
||||
if (!stuff) return NULL;
|
||||
return stuff->tuple.data;
|
||||
}
|
||||
|
||||
static void *
|
||||
_eina_hash_iterator_key_get_content(Eina_Iterator_Hash *it)
|
||||
{
|
||||
Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
|
||||
|
||||
if (!stuff) return NULL;
|
||||
return (void *) stuff->tuple.key;
|
||||
}
|
||||
|
||||
static Eina_Hash_Tuple *
|
||||
_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash *it)
|
||||
{
|
||||
Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
|
||||
|
||||
if (!stuff) return NULL;
|
||||
return &stuff->tuple;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_eina_hash_iterator_next(Eina_Iterator_Hash *it)
|
||||
_eina_hash_iterator_next(Eina_Iterator_Hash *it, void **data)
|
||||
{
|
||||
Eina_Inlist *move;
|
||||
int bucket;
|
||||
|
@ -170,36 +201,12 @@ _eina_hash_iterator_next(Eina_Iterator_Hash *it)
|
|||
it->bucket = bucket;
|
||||
it->current = move;
|
||||
|
||||
if (data)
|
||||
*data = it->get_content(it);
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void *
|
||||
_eina_hash_iterator_data_get_content(Eina_Iterator_Hash *it)
|
||||
{
|
||||
Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
|
||||
|
||||
if (!stuff) return NULL;
|
||||
return stuff->tuple.data;
|
||||
}
|
||||
|
||||
static void *
|
||||
_eina_hash_iterator_key_get_content(Eina_Iterator_Hash *it)
|
||||
{
|
||||
Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
|
||||
|
||||
if (!stuff) return NULL;
|
||||
return (void *) stuff->tuple.key;
|
||||
}
|
||||
|
||||
static Eina_Hash_Tuple *
|
||||
_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash *it)
|
||||
{
|
||||
Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
|
||||
|
||||
if (!stuff) return NULL;
|
||||
return &stuff->tuple;
|
||||
}
|
||||
|
||||
static void *
|
||||
_eina_hash_iterator_get_container(Eina_Iterator_Hash *it)
|
||||
{
|
||||
|
@ -767,14 +774,12 @@ eina_hash_iterator_data_new(const Eina_Hash *hash)
|
|||
if (!it) return NULL;
|
||||
|
||||
it->hash = hash;
|
||||
it->get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content);
|
||||
|
||||
it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
|
||||
it->iterator.get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content);
|
||||
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container);
|
||||
it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
|
||||
|
||||
_eina_hash_iterator_next(it);
|
||||
|
||||
return &it->iterator;
|
||||
}
|
||||
|
||||
|
@ -790,14 +795,12 @@ eina_hash_iterator_key_new(const Eina_Hash *hash)
|
|||
if (!it) return NULL;
|
||||
|
||||
it->hash = hash;
|
||||
it->get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_key_get_content);
|
||||
|
||||
it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
|
||||
it->iterator.get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_key_get_content);
|
||||
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container);
|
||||
it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
|
||||
|
||||
_eina_hash_iterator_next(it);
|
||||
|
||||
return &it->iterator;
|
||||
}
|
||||
|
||||
|
@ -813,14 +816,12 @@ eina_hash_iterator_tuple_new(const Eina_Hash *hash)
|
|||
if (!it) return NULL;
|
||||
|
||||
it->hash = hash;
|
||||
it->get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_tuple_get_content);
|
||||
|
||||
it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
|
||||
it->iterator.get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_tuple_get_content);
|
||||
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container);
|
||||
it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
|
||||
|
||||
_eina_hash_iterator_next(it);
|
||||
|
||||
return &it->iterator;
|
||||
}
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ START_TEST(eina_accessor_array_simple)
|
|||
it = eina_array_accessor_new(ea);
|
||||
fail_if(!it);
|
||||
|
||||
tmp = eina_accessor_data_get(it, 100);
|
||||
fail_if(eina_accessor_data_get(it, 100, &tmp) != EINA_TRUE);
|
||||
fail_if(!tmp);
|
||||
fail_if(*tmp != 100);
|
||||
|
||||
|
|
|
@ -61,16 +61,12 @@ START_TEST(eina_iterator_array_simple)
|
|||
it = eina_array_iterator_new(ea);
|
||||
fail_if(!it);
|
||||
|
||||
tmp = eina_iterator_data_get(it);
|
||||
fail_if(!tmp);
|
||||
fail_if(*tmp != 0);
|
||||
|
||||
i = -1;
|
||||
eina_iterator_foreach(it, EINA_EACH(eina_iterator_array_check), &i);
|
||||
fail_if(i != 199);
|
||||
|
||||
fail_if(eina_iterator_container_get(it) != ea);
|
||||
fail_if(eina_iterator_next(it) != EINA_FALSE);
|
||||
fail_if(eina_iterator_next(it, &tmp) != EINA_FALSE);
|
||||
|
||||
eina_iterator_free(it);
|
||||
|
||||
|
|
Loading…
Reference in New Issue