tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pserialize(9) vs. TAILQ
Date: Wed, 19 Nov 2014 16:28:41 +0800
From: Dennis Ferguson <dennis.c.ferguson%gmail.com@localhost>
On 19 Nov, 2014, at 01:54 , Taylor R Campbell <campbell+netbsd-tech-kern%mumble.net@localhost> wrote:
> What type pun is that? I don't see it.
I think this one:
#define TAILQ_LAST(head, headname) \
(*(((struct headname *)((head)->tqh_last))->tqh_last))
#define TAILQ_PREV(elm, headname, field) \
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
Pooh. Fortunately, it applies only to reverse iteration, which most
tailq users don't rely on.
Perhaps it's time to invent a new API where you have to declare the
queue type up front -- both TAILQ and CIRCLEQ use the same physical
structure for the head and entry, so if we had a struct tag declared
up front they could both use that. Something like:
BIDIQ_TYPE(frobq, frob);
/*
* struct frob;
* struct frobq { struct frob *bqh_first; struct frob **bqh_last; };
*/
BIDIQ_HEAD(frobq, frob_head);
/* struct frob_head { struct frobq q; }; */
struct frob_head the_frobs = BIDIQ_HEAD_INITIALIZER(&the_frobs);
struct frob {
...
BIDIQ_ENTRY(frobq) f_entry;
/* struct frobq f_entry; */
...
};
Home |
Main Index |
Thread Index |
Old Index