diff --git a/include/tr/list.h b/include/tr/list.h index c2b6a52..3e328f3 100644 --- a/include/tr/list.h +++ b/include/tr/list.h @@ -44,10 +44,12 @@ TR_CLASS(TR_List) { TR_INSTANCE_INIT(TR_List); TR_CLASSVARS_DECL(TR_List) {}; -void TR_listPut(TR_List, void *); -void TR_listPutFirst(TR_List, void *); -void * TR_listGet(TR_List); -void * TR_listGetFirst(TR_List); +void TR_listPut(TR_List, void *); +void TR_listPutFirst(TR_List, void *); +void * TR_listGet(TR_List); +void * TR_listGetFirst(TR_List); +ssize_t TR_listFind(TR_List, void *); +void TR_listDelete(TR_List, void *); #define TR_listEmpty(this) (this->start == this->end) #define TR_listFirst(this) ((this)->start) diff --git a/src/list/Makefile.am b/src/list/Makefile.am index 75c21b8..8585643 100644 --- a/src/list/Makefile.am +++ b/src/list/Makefile.am @@ -8,7 +8,9 @@ LIST = list.c \ get.c \ get_first.c \ put.c \ - put_first.c + put_first.c \ + find.c \ + delete.c noinst_LTLIBRARIES = liblist.la diff --git a/src/list/delete.c b/src/list/delete.c new file mode 100644 index 0000000..53a785b --- /dev/null +++ b/src/list/delete.c @@ -0,0 +1,31 @@ +/** + * \file + * + * \author Georg Hopp + * + * \copyright + * Copyright © 2014 Georg Hopp + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "trbase.h" +#include "tr/list.h" + +void +TR_listDelete(TR_List this, void * msg) +{ +} + +// vim: set ts=4 sw=4: diff --git a/src/list/find.c b/src/list/find.c new file mode 100644 index 0000000..c014fb7 --- /dev/null +++ b/src/list/find.c @@ -0,0 +1,45 @@ +/** + * \file + * + * \author Georg Hopp + * + * \copyright + * Copyright © 2014 Georg Hopp + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "trbase.h" +#include "tr/list.h" + +#include "_resize.h" + +ssize_t +TR_listFind(TR_List this, void * msg) +{ + /* + * With an array I know no better way than doing it in O(n). + * The list pattern needs to keep the elements in the order in + * which they were added. + */ + size_t i = this->start; + while (i++ < this->end) { + if (this->data[i] == msg) { + return i; + } + } + return -1; +} + +// vim: set ts=4 sw=4: