1 // $Id: list-searchselforg.c,v 1.1 2005/03/17 14:47:21 ensc Exp $ --*- c -*--
3 // Copyright (C) 2005 Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; version 2 of the License.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 #include "list-internal.h"
30 List_searchSelfOrg(struct List const *list, void const *key,
31 int (*compare)(const void *, const void *),
32 ListSelfOrgMethod method)
34 struct List *list_v = (struct List *)(list);
35 struct ListItem **itm = &list_v->root;
39 while (*itm!=0 && compare((*itm)->data, key)!=0)
42 if (*itm && *itm!=list->root) {
43 struct ListItem *res = *itm;
46 res->next = list->root;
54 if (*itm!=0 && compare((*itm)->data, key)!=0) {
55 while ((*itm)->next!=0 &&
56 compare((*itm)->next->data, key)!=0)
62 struct ListItem *res = (*itm)->next;
64 (*itm)->next = res->next;
71 default : assert(false); return 0;
74 if (*itm!=0) return (*itm)->data;