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 <[email protected]> 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 > <[email protected]> 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 < > > [email protected]> wrote: > > > >> jeyzu pushed a commit to branch master. > >> > >> commit 2036f7d3447d4e568f2736441c839678da310f22 > >> Author: Jérémy Zurcher <[email protected]> > >> 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 > > [email protected] > > 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 > [email protected] > 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 [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
