If last is part of the inlist struct, then I guess the implementation of eina_inlist_last is wrong.
S. On 04/09/2013 12:48 PM, Michael Blumenkrantz wrote: > It's not the same; the eina_list one is O(1), this is not. > > > On Tue, Apr 9, 2013 at 11:43 AM, Cedric BAIL <cedric.b...@free.fr> wrote: > >> It is an helper, the same symmetrical one we have for Eina_List. >> >> On Tue, Apr 9, 2013 at 7:06 PM, Michael Blumenkrantz >> <michael.blumenkra...@gmail.com> wrote: >>> I don't see the point of eina_inlist_last given that last is part of the >>> inlist struct. >>> >>> >>> On Tue, Apr 9, 2013 at 11:01 AM, Jérémy Zurcher - Enlightenment Git < >>> no-re...@enlightenment.org> wrote: >>> >>>> jeyzu pushed a commit to branch master. >>>> >>>> commit 2036f7d3447d4e568f2736441c839678da310f22 >>>> Author: Jérémy Zurcher <jer...@asynk.ch> >>>> Date: Tue Apr 9 12:03:05 2013 +0200 >>>> >>>> eina: add eina_inlist_first and eina_inlist_last >>>> >>>> - both as static inline functions >>>> - test added in eina_inlist_simple >>>> --- >>>> ChangeLog | 4 ++++ >>>> NEWS | 2 ++ >>>> src/Makefile_Eina.am | 1 + >>>> src/lib/eina/eina_inline_inlist.x | 46 >>>> +++++++++++++++++++++++++++++++++++++++ >>>> src/lib/eina/eina_inlist.h | 34 +++++++++++++++++++++++++++++ >>>> src/tests/eina/eina_test_inlist.c | 6 +++++ >>>> 6 files changed, 93 insertions(+) >>>> >>>> diff --git a/ChangeLog b/ChangeLog >>>> index f9734d0..2a8e558 100644 >>>> --- a/ChangeLog >>>> +++ b/ChangeLog >>>> @@ -1,3 +1,7 @@ >>>> +2013-04-09 Jérémy Zurcher (jeyzu) >>>> + >>>> + * Eina: Add eina_inlist_first and eina_inlist_last >>>> + >>>> 2013-04-08 Tom Hacohen >>>> >>>> * Evas font: Fix a bug with cluster size calculation with texts >>>> ending >>>> diff --git a/NEWS b/NEWS >>>> index de6a308..ed33eef 100644 >>>> --- a/NEWS >>>> +++ b/NEWS >>>> @@ -23,6 +23,8 @@ Additions: >>>> - Add eina_list_shuffle() >>>> - Add eina_file_mkstemp() >>>> - Add eina_log_timing() >>>> + - Add eina_inlist_first >>>> + - Add eina_inlist_last >>>> * Add Cserve2 scalecache support >>>> * ecore_x: >>>> - Add window profile support. >>>> diff --git a/src/Makefile_Eina.am b/src/Makefile_Eina.am >>>> index d79486b..1080b58 100644 >>>> --- a/src/Makefile_Eina.am >>>> +++ b/src/Makefile_Eina.am >>>> @@ -26,6 +26,7 @@ lib/eina/eina_clist.h \ >>>> lib/eina/eina_inline_clist.x \ >>>> lib/eina/eina_inarray.h \ >>>> lib/eina/eina_inlist.h \ >>>> +lib/eina/eina_inline_inlist.x \ >>>> lib/eina/eina_list.h \ >>>> lib/eina/eina_file.h \ >>>> lib/eina/eina_mempool.h \ >>>> diff --git a/src/lib/eina/eina_inline_inlist.x >>>> b/src/lib/eina/eina_inline_inlist.x >>>> new file mode 100644 >>>> index 0000000..f4cd95e >>>> --- /dev/null >>>> +++ b/src/lib/eina/eina_inline_inlist.x >>>> @@ -0,0 +1,46 @@ >>>> +/* EINA - EFL data type library >>>> + * Copyright (C) 2013 Jérémy Zurcher >>>> + * >>>> + * 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_INLIST_INLINE_H_ >>>> +#define EINA_INLIST_INLINE_H_ >>>> + >>>> +static inline Eina_Inlist * >>>> +eina_inlist_first(const Eina_Inlist *list) >>>> +{ >>>> + Eina_Inlist *l; >>>> + >>>> + if (!list) return NULL; >>>> + >>>> + for (l = (Eina_Inlist*)list; l->prev; l = l->prev); >>>> + >>>> + return l; >>>> +} >>>> + >>>> +static inline Eina_Inlist * >>>> +eina_inlist_last(const Eina_Inlist *list) >>>> +{ >>>> + Eina_Inlist *l; >>>> + >>>> + if (!list) return NULL; >>>> + >>>> + for (l = (Eina_Inlist*)list; l->next; l = l->next); >>>> + >>>> + return l; >>>> +} >>>> + >>>> +#endif /* EINA_INLIST_INLINE_H_ */ >>>> diff --git a/src/lib/eina/eina_inlist.h b/src/lib/eina/eina_inlist.h >>>> index 6a318d7..2829967 100644 >>>> --- a/src/lib/eina/eina_inlist.h >>>> +++ b/src/lib/eina/eina_inlist.h >>>> @@ -580,6 +580,38 @@ EAPI Eina_Inlist *eina_inlist_demote(Eina_Inlist >>>> *list, >>>> Eina_Inlist *item) >>>> EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; >>>> >>>> /** >>>> + * @brief Get the first list node in the list. >>>> + * >>>> + * @param list The list to get the first list node from. >>>> + * @return The first list node in the list. >>>> + * >>>> + * This function returns the first list node in the list @p list. If >>>> + * @p list is @c NULL, @c NULL is returned. >>>> + * >>>> + * This is a O(N) operation (it takes time proportional >>>> + * to the length of the list). >>>> + * >>>> + * @since 1.8 >>>> + */ >>>> +static inline Eina_Inlist *eina_inlist_first(const Eina_Inlist *list) >>>> EINA_PURE EINA_WARN_UNUSED_RESULT; >>>> + >>>> +/** >>>> + * @brief Get the last list node in the list. >>>> + * >>>> + * @param list The list to get the last list node from. >>>> + * @return The last list node in the list. >>>> + * >>>> + * This function returns the last list node in the list @p list. If >>>> + * @p list is @c NULL, @c NULL is returned. >>>> + * >>>> + * This is a O(N) operation (it takes time proportional >>>> + * to the length of the list). >>>> + * >>>> + * @since 1.8 >>>> + */ >>>> +static inline Eina_Inlist *eina_inlist_last(const Eina_Inlist *list) >>>> EINA_PURE EINA_WARN_UNUSED_RESULT; >>>> + >>>> +/** >>>> * @brief Get the count of the number of items in a list. >>>> * >>>> * @param list The list whose count to return. >>>> @@ -825,6 +857,8 @@ EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist >> *head, >>>> Eina_Compare_Cb func); >>>> for (it = NULL, it = (list ? _EINA_INLIST_CONTAINER(it, list->last) : >>>> NULL); \ >>>> it; it = (EINA_INLIST_GET(it)->prev ? _EINA_INLIST_CONTAINER(it, >>>> EINA_INLIST_GET(it)->prev) : NULL)) >>>> >>>> +#include "eina_inline_inlist.x" >>>> + >>>> /** >>>> * @} >>>> */ >>>> diff --git a/src/tests/eina/eina_test_inlist.c >>>> b/src/tests/eina/eina_test_inlist.c >>>> index 7d29b37..46257c8 100644 >>>> --- a/src/tests/eina/eina_test_inlist.c >>>> +++ b/src/tests/eina/eina_test_inlist.c >>>> @@ -86,6 +86,7 @@ _eina_test_inlist_build(int i) >>>> START_TEST(eina_inlist_simple) >>>> { >>>> Eina_Inlist *lst = NULL; >>>> + Eina_Inlist *tmpl = NULL; >>>> Eina_Test_Inlist *tmp; >>>> Eina_Test_Inlist *prev; >>>> int i = 0; >>>> @@ -285,6 +286,11 @@ START_TEST(eina_inlist_simple) >>>> lst = bkp; >>>> #endif >>>> >>>> + tmpl = eina_inlist_last(lst); >>>> + fail_if(tmpl == lst); >>>> + tmpl = eina_inlist_first(tmpl); >>>> + fail_if(tmpl != lst); >>>> + >>>> tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist); >>>> lst = eina_inlist_demote(lst, lst); >>>> fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist) == tmp); >>>> >>>> -- >>>> >>>> >>>> >> ------------------------------------------------------------------------------ >>>> Precog is a next-generation analytics platform capable of advanced >>>> analytics on semi-structured data. The platform includes APIs for >> building >>>> apps and a phenomenal toolset for data science. Developers can use >>>> our toolset for easy data analysis & visualization. Get a free account! >>>> http://www2.precog.com/precogplatform/slashdotnewsletter >>> >> ------------------------------------------------------------------------------ >>> Precog is a next-generation analytics platform capable of advanced >>> analytics on semi-structured data. The platform includes APIs for >> building >>> apps and a phenomenal toolset for data science. Developers can use >>> our toolset for easy data analysis & visualization. Get a free account! >>> http://www2.precog.com/precogplatform/slashdotnewsletter >>> _______________________________________________ >>> enlightenment-devel mailing list >>> enlightenment-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >>> >> >> >> >> -- >> Cedric BAIL >> >> >> ------------------------------------------------------------------------------ >> Precog is a next-generation analytics platform capable of advanced >> analytics on semi-structured data. The platform includes APIs for building >> apps and a phenomenal toolset for data science. Developers can use >> our toolset for easy data analysis & visualization. Get a free account! >> http://www2.precog.com/precogplatform/slashdotnewsletter >> _______________________________________________ >> enlightenment-devel mailing list >> enlightenment-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >> > ------------------------------------------------------------------------------ > Precog is a next-generation analytics platform capable of advanced > analytics on semi-structured data. The platform includes APIs for building > apps and a phenomenal toolset for data science. Developers can use > our toolset for easy data analysis & visualization. Get a free account! > http://www2.precog.com/precogplatform/slashdotnewsletter > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel