ilist.h is not useful as-is

Поиск
Список
Период
Сортировка
От Tom Lane
Тема ilist.h is not useful as-is
Дата
Msg-id 24647.1374679560@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: ilist.h is not useful as-is  (Andres Freund <andres@2ndquadrant.com>)
Список pgsql-hackers
So I went off to implement the SPITupleTable tracking discussed in
<6553.1374424838@sss.pgh.pa.us>, and thought it would be cool to
use the slist infrastructure defined in lib/ilist.h rather than
creating a separate List node for each SPITupleTable struct.
However, I soon ran into a problem: there's no real support for
"remove the current element of an slist while we're scanning it",
which is really the only list manipulation I need.  The only way
to remove an element is slist_delete(), which will iterate over
the list *again* and thus create an O(N^2) penalty.  Or I could
use a dlist, but two pointers per struct seem pretty silly.

So I'm going to end up hand-implementing the same kind of manipulation
we frequently use with traditional Lists, namely keep a second variable
that's the preceding list element (not the next one) so I can unlink and
delete the target element when I find it.  ilist.h is not offering me
any useful support at all for this scenario.  Seems like we're missing
a bet here.
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: [bug fix] PITR corrupts the database cluster
Следующее
От: Andres Freund
Дата:
Сообщение: Re: ilist.h is not useful as-is