History log of /freebsd-9.3-release/share/man/man3/queue.3
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 267654 19-Jun-2014 gjb

Copy stable/9 to releng/9.3 as part of the 9.3-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 252365 29-Jun-2013 lstewart

MFC r251887:

Add new FOREACH_FROM variants of the queue(3) FOREACH macros which can
optionally start the traversal from a previously found element by passing the
element in as "var". Passing a NULL "var" retains the same semantics as the
regular FOREACH macros.

Reviewed by: jhb (previous version), rpaulo


# 242893 11-Nov-2012 ed

MFC r240422, r240426 and r240450:

Implement LIST_PREV().

Regular LISTs have been implemented in such a way that the prev-pointer
does not point to the previous element, but to the next-pointer stored
in the previous element. This is done to simplify LIST_REMOVE(). This
macro can be implemented without knowing the address of the list head.

Unfortunately this makes it harder to implement LIST_PREV(), which is
why this macro was never here. Still, it is possible to implement this
macro. If the prev-pointer points to the list head, we return NULL.
Otherwise we simply subtract the offset of the prev-pointer within the
structure.

It's not as efficient as traversing forward of course, but in practice
it shouldn't be that bad. In almost all use cases, people will want to
compare the value returned by LIST_PREV() against NULL, so an optimizing
compiler will not emit code that does more branching than TAILQs.

While there, add __containerof(). Compared to __member2struct(), this
macro has the following advantages:

- It ensures that the type of the pointer is compatible with the member
field of the structure (or a void pointer).
- It works properly in combination with volatile and const, though
unfortunately it drops these qualifiers from the returned value.

mdf@ proposed to add the container_of() macro, just like Linux has.
Eventually I decided against this, as <sys/param.h> is included all over
the place. It seems container_of() on Linux is specific to the kernel,
not userspace. I'd rather not pollute userspace with this.

I also thought about adding __container_of(), but this would have two
advantages. Xorg seems to already have a __container_of(), which is not
compatible with this version. Also, the underscore in the middle
conflicts with our existing macros (__offsetof, __rangeof, etc).


# 225736 22-Sep-2011 kensmith

Copy head to stable/9 as part of 9.0-RELEASE release cycle.

Approved by: re (implicit)


# 225346 02-Sep-2011 rse

Fix a little typo and get rid of a cryptic description by aligning the
text to the remaining description.

Approved by: re


# 221843 13-May-2011 mdf

Note that the _SWAP operation is supported for all list/queue types.
Also place STAILQ_REMOVE_HEAD in alphabetical order. Lastly, document
the _SWAP macros.

PR: kern/143033
MFC after: 1 week


# 217264 11-Jan-2011 gavin

Remove a bullet point that appears to have been accidentally inserted twice.
It has also been included within the feature lists to which it is relevant.

Submitted by: tobez
MFC after: 1 week


# 210215 18-Jul-2010 simon

Cross reference tree(3) and queue(3).

MFC after: 1 week


# 199349 17-Nov-2009 brueffer

Fix typo.

PR: 140615
Submitted by: Andrius Morkunas <hinokind@gmail.com>
MFC after: 3 days


# 192926 27-May-2009 ed

Rename the queue macros I introduced last year.

Last year I added SLIST_REMOVE_NEXT and STAILQ_REMOVE_NEXT, to remove
entries behind an element in the list, using O(1) time. I recently
discovered NetBSD also has a similar macro, called SLIST_REMOVE_AFTER.
In my opinion this approach is a lot better:

- It doesn't have the unused first argument of the list pointer. I added
this, mainly because OpenBSD also had it.

- The _AFTER suffix makes a lot more sense, because it is related to
SLIST_INSERT_AFTER. _NEXT is only used to iterate through the list.

The reason why I want to rename this now, is to make sure we don't
release a major version with the badly named macros.


# 179210 22-May-2008 ed

Introduce REMOVE_NEXT() macro's for SLIST and STAILQ.

Even though single linked lists allow items to be removed at constant time
(when the previous element is known), the queue macro's don't allow this.
Implement new REMOVE_NEXT() macro's. Because the REMOVE() macro's also
contain the same code, make it call REMOVE_NEXT().

The OpenBSD version of SLIST_REMOVE_NEXT() needs a reference to the list
head, even though it is unused. We'd better mimic this. The STAILQ version
also needs a reference to the list. This means the prototypes of both
macro's are the same.

Approved by: philip (mentor)
PR: kern/121117


# 173267 01-Nov-2007 obrien

Don't imply O(n) removal for the doubly linked data structures.


# 162404 18-Sep-2006 ru

Markup fixes.


# 157133 25-Mar-2006 emaste

The removal of CIRCLEQ left four queue macros. One sentence was missed
in the man page update.

PR: docs/94938
Submitted by: Ed Schouten <ed@fxq.nl>
MFC After: 3 days


# 157090 24-Mar-2006 mckusick

Typesetting fix for -r1.137.

If a tail queue is empty the return value of TAILQ_LAST is not
undefined, it is NULL.

Submitted by: Ruslan Ermilov <ru@FreeBSD.org>


# 156983 22-Mar-2006 mckusick

If a tail queue is empty the return value is not
undefined, it is NULL.


# 151422 17-Oct-2005 jhb

Remove a spurious newline. The TAILQ_INIT() is part of the 'faster tailq
deletion' example.

MFC after: 1 week


# 139386 28-Dec-2004 trhodes

Some grammar, spelling, and mdoc(7) fixes. No content changes.

PR: 75581
Submitted by: Nobuyuki Koganemaru n-kogane@syd.odn.ne.jp (original version)


# 131754 07-Jul-2004 ru

mdoc(7) fixes.


# 130848 21-Jun-2004 mpp

Spelling fixes.


# 118904 14-Aug-2003 kan

Add safe _FOREACH iterators to the rest of the queue.h types.


# 118879 13-Aug-2003 bmilekic

Document LIST_FOREACH_SAFE in queue(3).

Asked with "please" by Ruslan Ermilov. I've always had a weakness
for "please".


# 94939 17-Apr-2002 tmm

Document STAILQ_CONCAT and TAILQ_CONCAT.

PR: 20024
Submitted by: Tony Finch <dot@dotat.at> (TAILQ_CONCAT, slightly changed
by me)
Reviewed by: ru (earlier version)


# 89150 09-Jan-2002 ru

mdoc(7) police: tidy up previous delta.


# 88596 28-Dec-2001 julian

Document some behaviour I'm depending on.
(TAILQ_FOREACH leaves the variable NULL if there were no more to do)


# 84306 01-Oct-2001 ru

mdoc(7) police: Use the new .In macro for #include statements.


# 82029 21-Aug-2001 sobomax

STAILQ_LAST() macro takes 3 arguments, not 1.


# 79727 14-Jul-2001 schweikh

Removed whitespace at end-of-line; no content changes. I simply did
cd src/share; find man[1-9] -type f|xargs perl -pi -e 's/[ \t]+$//'

BTW, what editors are the culprits? I'm using vim and it shows
me whitespace at EOL in troff files with a thick blue block...

Reviewed by: Silence from cvs diff -b
MFC after: 7 days


# 79538 10-Jul-2001 ru

mdoc(7) police: removed HISTORY info from the .Os call.


# 74270 15-Mar-2001 dd

Remove the last remnants of circle queues.

PR: 25184
Submitted by: Alex Kapranoff <alex@kapran.bitmcnit.bryansk.su>
Approved by: nik


# 70515 30-Dec-2000 ben

Remove comma after final .Nm entry before .Nd


# 70469 29-Dec-2000 phk

CIRCLEQs are a disgrace to everything Knuth taught us in Volume 1 Chapter 2.

Retire them before anybody starts to use them again.

Use TAILQ instead, it provides the same functionality.


# 68537 09-Nov-2000 alfred

Manpage incorrectly states that STAILQ_REMOVE_HEAD takes an arg
called 'elm'. It doesn't take an arg 'elm', it simply removes the
element at the head of the list.


# 63918 27-Jul-2000 markm

Fix minor typo.


# 61499 10-Jun-2000 jake

(1) document *_HEAD_INITIALIZER
(2) fix a STAILQ_HEAD that should have been STAILQ_FIRST

Requested by: (1) bde
(2) W Gerald Hicks <jhix@mindspring.com>


# 59862 01-May-2000 archie

Document TAILQ_FOREACH_REVERSE() and CIRCLEQ_FOREACH_REVERSE() macros.

Submitted by: Jake Burkholder <jburkhol@home.com>


# 58667 27-Mar-2000 jhb

Update STAILQ example to use STAILQ_REMOVE_HEAD instead of
TAILQ_REMOVE_HEAD.

PR: docs/17590
Submitted by: Benno Rice <benno@netizen.com.au>


# 54833 19-Dec-1999 phantom

Sync with reality.

PR: docs/15036
Submitted by: Jake Burkholder <jburkhol@home.com>


# 50476 27-Aug-1999 peter

$Id$ -> $FreeBSD$


# 36692 06-Jun-1998 jkoshy

Spelling corrections.

PR: 6868
Submitted by: Josh Gilliam <josh@quick.net>


# 24018 19-Mar-1997 bde

Fixed wrong number of args in STAILQ_REMOVE_HEAD() in synopsis.


# 23556 08-Mar-1997 mpp

The CIRCLEQ_ENTRY example was wrong. Part of PR# 2917.


# 23466 07-Mar-1997 jmg

add missing cvs Id lines.


# 22148 30-Jan-1997 mpp

Minor mdoc cleanup.


# 21030 29-Dec-1996 phk

Add SLIST_EMPTY, SLIST_FIRST, SLIST_NEXT.

Is it time to split this into one "intro" type and a number of
detailed pages ?


# 17783 22-Aug-1996 mpp

Use the .Bx macro where appropriate.


# 17090 11-Jul-1996 mpp

Another man page with a messed up .Dd line.


# 15139 08-Apr-1996 phk

Document 5 new macros in TAILQ family.


# 14941 31-Mar-1996 gibbs

Update the queue man page for the new SLIST and STAILQ macros.


# 14055 12-Feb-1996 gibbs

4.4Lite2 implemented the LIST_INSERT_BEFORE and TAILQ_INSERT_BEFORE
exactly as I did (should have checked there first I guess) except my
macro for TAILQ_INSERT_BEFORE took an unneeded arg. We now match 4.4Lite2.

Suggested by: Jeffrey Hsu <hsu@FreeBSD.org>


# 13698 29-Jan-1996 gibbs

Add LIST_INSERT_BEFORE and TAILQ_INSERT_BEFORE.

Change examples to actually free() the nodes removed from lists.
Give examples of faster list deletion routines.


# 1639 30-May-1994 rgrimes

This commit was generated by cvs2svn to compensate for changes in r1638,
which included commits to RCS files with non-trunk default branches.


# 1638 30-May-1994 rgrimes

BSD 4.4 Lite Share Sources