Re: linked list rewrite

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: linked list rewrite
Дата
Msg-id 6870.1080079185@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: linked list rewrite  (Bruce Momjian <pgman@candle.pha.pa.us>)
Ответы Re: linked list rewrite  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: linked list rewrite  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: linked list rewrite  (Neil Conway <neilc@samurai.com>)
Список pgsql-hackers
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> What does the 'n' stand for in ncons?  I also felt that lcons
> (construct) and nconc(concat) were too similarly named.

I think nconc is a direct copy from the Lisp original; whatever its
origins are, they're back in Lisp prehistory.  I don't mind renaming
that one ;-)

Let's see ... fleshing out this idea a bit, here's a rundown of all the
symbols in pg_list.h and suggested new names:

ListCell accessors:

lfirst        no change
lfirsti        lfirst_int
lfirsto        lfirst_oid
lnext        no change
foreach        no change

List accessors:

length        no change

lfirstcell    new function to get first cell, or NULL if none

lfirst        rewrite as lfirst(lfirstcell()) when applied to a List

lsecond, lthird, lfourth    not clear if worth keeping

llastnode    llastcell

llast        Perhaps rewrite as lfirst(llastcell()) instead of keeping

makeListN    list_makeN or possibly list_make_N
makeListiN    list_makeN_int or list_make_N_int
makeListoN    list_makeN_oid or list_make_N_oid

lcons        no change
lconsi        lcons_int
lconso        lcons_oid

lappend        no change
lappendi    lappend_int
lappendo    lappend_oid

nconc        list_concat
We might also need a function to attach some bare ListCells to a List

nth        list_nth    list_nth_int    list_nth_oid
Should add list_nth_int, list_nth_oid, even though there are no
corresponding functions at the moment

member        list_member
ptrMember    list_member_ptr
intMember    list_member_int
oidMember    list_member_oid

LispRemove    list_remove
lremove        list_remove_ptr
lremovei    list_remove_int    list_remove_oid        add, though not currently used

ltruncate    list_truncate

set_union    list_union
set_ptrUnion    list_union_ptr    list_union_int        not currently used
set_uniono    list_union_oid

set_difference    list_difference
set_ptrDifference  list_difference_ptr    list_difference_int    not currently used
set_differenceo    list_difference_oid

equali and equalo become just calls on equal()

freeList    list_free  (frees only List, not pointed-to objects)

listCopy    list_copy  (shallow copy of List only)

A couple of notes here: I propose using the suffix "_ptr" for operations
that use pointer equality rather than equal().  Neil proposed "_simple"
but that seems less than clear to me --- which one is "simple" and which
isn't?  Also, for the "set" operations I have just "list_union" etc
where Neil proposed "list_set_union".

Neil proposed inventing "list_deep_copy" which as far as I can see is
entirely redundant with copyObject.  Similarly I can't see any value in
list_equal when equal() will do the trick.
        regards, tom lane


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: [COMMITTERS] pgsql-server/ oc/src/sgml/ref/alter_table.sgml
Следующее
От: Tom Lane
Дата:
Сообщение: Re: linked list rewrite