After benchmarking, providing inline does impact performance of list and array user.

SVN revision: 35407
This commit is contained in:
Cedric BAIL 2008-08-08 14:25:37 +00:00
parent ce23f3c2a9
commit 6eacc6aa2d
2 changed files with 61 additions and 4 deletions

View File

@ -26,7 +26,7 @@
#endif
static inline Eina_Bool
_eina_array_grow(Eina_Array *array)
eina_array_grow(Eina_Array *array)
{
void **tmp;
unsigned int total;
@ -42,16 +42,16 @@ _eina_array_grow(Eina_Array *array)
}
static inline void
_eina_array_append(Eina_Array *array, void *data)
eina_array_append(Eina_Array *array, void *data)
{
if (UNLIKELY((array->count + array->step) > array->total))
if (!_eina_array_grow(array)) return ;
if (!eina_array_grow(array)) return ;
array->data[array->count++] = data;
}
static inline void *
_eina_array_get(Eina_Array *array, unsigned int index)
eina_array_get(Eina_Array *array, unsigned int index)
{
return array->data[index];
}

View File

@ -0,0 +1,57 @@
/* EINA - EFL data type library
* Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library;
* if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef EINA_LIST_INLINE_H_
#define EINA_LIST_INLINE_H_
static inline Eina_List *
eina_list_last(const Eina_List *list)
{
if (!list) return NULL;
return list->accounting->last;
}
static inline Eina_List *
eina_list_next(const Eina_List *list)
{
if (!list) return NULL;
return list->next;
}
static inline Eina_List *
eina_list_prev(const Eina_List *list)
{
if (!list) return NULL;
return list->prev;
}
static inline void *
eina_list_data(const Eina_List *list)
{
if (!list) return NULL;
return list->data;
}
static inline int
eina_list_count(const Eina_List *list)
{
if (!list) return 0;
return list->accounting->count;
}
#endif /* EINA_LIST_INLINE_H_ */