Re: embedded list - Mailing list pgsql-hackers

From Alvaro Herrera
Subject Re: embedded list
Date
Msg-id 20121010033534.GA11741@alvh.no-ip.org
Whole thread Raw
In response to Re: embedded list v3  (Andres Freund <andres@2ndquadrant.com>)
Responses Re: embedded list  (Alvaro Herrera <alvherre@2ndquadrant.com>)
List pgsql-hackers
Here's a new version of this patch, updated to STATIC_IF_INLINE.  It
addresses most stuff mentioned so far, excepting only the ugly clang
warning in the static assert macros as pointed out by Peter.  The
explanatory comment at the top of ilist.h got reformatted a bit and
slightly reworded as well.

The first file, ilist-4.patch, follows the same semantics implemented by
Andres originally: doubly linked lists are always circular, even when
empty.  If you apply the second file (ilist-4-circular.patch) on top of
that, you get lists that can be validly initialized to two NULL
pointers.  catcache.c gets an example of such lists: instead of calling
dlist_init repeatedly for each cache, we just MemSet() the whole bunch.

I also included two new functions in that patch, dlisti_push_head and
dlisti_push_tail.  These functions are identical to dlist_push_head and
dlist_push_tail, except that they do not accept non-circular lists.
What this means is that callers that find the non-circularity acceptable
can use the regular version, and will run dlist_init() on demand;
callers that want the super-tight code can use the other version.
I didn't bother with a new dlist_is_empty.

I imagine both sides will have much to say about this approach.  Please
opine.

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachment

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Truncate if exists
Next
From: Noah Misch
Date:
Subject: Re: Truncate if exists