Date: Thu, 15 Mar 2007 10:59:24 -0700 From: Bakul Shah <bakul@bitblocks.com> To: Yar Tikhiy <yar@comp.chem.msu.su> Cc: arch@freebsd.org, Poul-Henning Kamp <phk@phk.freebsd.dk> Subject: Re: <sys/queue.h> bikeshed proposal Message-ID: <20070315175924.68E265B49@mail.bitblocks.com> In-Reply-To: Your message of "Thu, 15 Mar 2007 16:43:00 %2B0300." <20070315134300.GE28354@comp.chem.msu.su>
next in thread | previous in thread | raw e-mail | index | archive | help
> On Tue, Mar 13, 2007 at 09:38:05AM +0000, Poul-Henning Kamp wrote: > > In message <39968.1173776514@critter.freebsd.dk>, Poul-Henning Kamp writes: > > > > > >It has always bothered me that some of the TAILQ macros need to > > >know the struct name of the header type. > > Yeah, <sys/queue.h> can present a challenge in understanding an > implementation of basic data structures and related algos. :-) > You thought that tqe_prev points to the whole entry structure when > making the patch, didn't you? > > Personally, I cannot explain to myself why in the double-linked > structs the prev member points to the next member in the previous > list element and not to the previous list element itself. Could > anybody with CS education explain merits of the current approach? > I can only see that now we have to go to the element before the > previous one for a pointer to the latter. I'm not going to dispute > the current way of things, just curious. IIRC, the main reason is so that you don't have to know the actual type of other things on the list. In particular the list head can be just a next/prev ptr pair and not the entire object. This is handy, for example, when you have a list hanging off another object -- you can remove any list element without detaching the entire list from the parent object. The queue.h trick is quite clever and useful. To appreciate it, try figuring out a solution using Lisp style lists! IIRC, your typical CS education doesn't spend much time on pragmatics.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070315175924.68E265B49>