1062 lines
25 KiB
Groff
1062 lines
25 KiB
Groff
.\" Copyright (c) 1993
|
||
.\" The Regents of the University of California. All rights reserved.
|
||
.\"
|
||
.\" Redistribution and use in source and binary forms, with or without
|
||
.\" modification, are permitted provided that the following conditions
|
||
.\" are met:
|
||
.\" 1. Redistributions of source code must retain the above copyright
|
||
.\" notice, this list of conditions and the following disclaimer.
|
||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||
.\" notice, this list of conditions and the following disclaimer in the
|
||
.\" documentation and/or other materials provided with the distribution.
|
||
.\" 3. All advertising materials mentioning features or use of this software
|
||
.\" must display the following acknowledgement:
|
||
.\" This product includes software developed by the University of
|
||
.\" California, Berkeley and its contributors.
|
||
.\" 4. Neither the name of the University nor the names of its contributors
|
||
.\" may be used to endorse or promote products derived from this software
|
||
.\" without specific prior written permission.
|
||
.\"
|
||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
.\" SUCH DAMAGE.
|
||
.\"
|
||
.\" @(#)queue.3 8.2 (Berkeley) 1/24/94
|
||
.\" %FreeBSD: src/share/man/man3/queue.3,v 1.15.2.7 2001/12/18 10:09:02 ru Exp %
|
||
.\" $FreeBSD$
|
||
.\"
|
||
.Dd January 24, 1994
|
||
.Dt QUEUE 3
|
||
.Os
|
||
.Sh ̾¾Î
|
||
.Nm SLIST_EMPTY ,
|
||
.Nm SLIST_ENTRY ,
|
||
.Nm SLIST_FIRST ,
|
||
.Nm SLIST_FOREACH ,
|
||
.Nm SLIST_HEAD ,
|
||
.Nm SLIST_HEAD_INITIALIZER ,
|
||
.Nm SLIST_INIT ,
|
||
.Nm SLIST_INSERT_AFTER ,
|
||
.Nm SLIST_INSERT_HEAD ,
|
||
.Nm SLIST_NEXT ,
|
||
.Nm SLIST_REMOVE_HEAD ,
|
||
.Nm SLIST_REMOVE ,
|
||
.Nm STAILQ_EMPTY ,
|
||
.Nm STAILQ_ENTRY ,
|
||
.Nm STAILQ_FIRST ,
|
||
.Nm STAILQ_FOREACH ,
|
||
.Nm STAILQ_HEAD ,
|
||
.Nm STAILQ_HEAD_INITIALIZER ,
|
||
.Nm STAILQ_INIT ,
|
||
.Nm STAILQ_INSERT_AFTER ,
|
||
.Nm STAILQ_INSERT_HEAD ,
|
||
.Nm STAILQ_INSERT_TAIL ,
|
||
.Nm STAILQ_LAST ,
|
||
.Nm STAILQ_NEXT ,
|
||
.Nm STAILQ_REMOVE_HEAD ,
|
||
.Nm STAILQ_REMOVE ,
|
||
.Nm LIST_EMPTY ,
|
||
.Nm LIST_ENTRY ,
|
||
.Nm LIST_FIRST ,
|
||
.Nm LIST_FOREACH ,
|
||
.Nm LIST_HEAD ,
|
||
.Nm LIST_HEAD_INITIALIZER ,
|
||
.Nm LIST_INIT ,
|
||
.Nm LIST_INSERT_AFTER ,
|
||
.Nm LIST_INSERT_BEFORE ,
|
||
.Nm LIST_INSERT_HEAD ,
|
||
.Nm LIST_NEXT ,
|
||
.Nm LIST_REMOVE ,
|
||
.Nm TAILQ_EMPTY ,
|
||
.Nm TAILQ_ENTRY ,
|
||
.Nm TAILQ_FIRST ,
|
||
.Nm TAILQ_FOREACH ,
|
||
.Nm TAILQ_FOREACH_REVERSE ,
|
||
.Nm TAILQ_HEAD ,
|
||
.Nm TAILQ_HEAD_INITIALIZER ,
|
||
.Nm TAILQ_INIT ,
|
||
.Nm TAILQ_INSERT_AFTER ,
|
||
.Nm TAILQ_INSERT_BEFORE ,
|
||
.Nm TAILQ_INSERT_HEAD ,
|
||
.Nm TAILQ_INSERT_TAIL ,
|
||
.Nm TAILQ_LAST ,
|
||
.Nm TAILQ_NEXT ,
|
||
.Nm TAILQ_PREV ,
|
||
.Nm TAILQ_REMOVE ,
|
||
.Nm CIRCLEQ_EMPTY ,
|
||
.Nm CIRCLEQ_ENTRY ,
|
||
.Nm CIRCLEQ_FIRST ,
|
||
.Nm CIRCLEQ_FOREACH ,
|
||
.Nm CIRCLEQ_FOREACH_REVERSE ,
|
||
.Nm CIRCLEQ_HEAD ,
|
||
.Nm CIRCLEQ_HEAD_INITIALIZER ,
|
||
.Nm CIRCLEQ_INIT ,
|
||
.Nm CIRCLEQ_INSERT_AFTER ,
|
||
.Nm CIRCLEQ_INSERT_BEFORE ,
|
||
.Nm CIRCLEQ_INSERT_HEAD ,
|
||
.Nm CIRCLEQ_INSERT_TAIL ,
|
||
.Nm CIRCLE_LAST ,
|
||
.Nm CIRCLE_NEXT ,
|
||
.Nm CIRCLE_PREV ,
|
||
.Nm CIRCLEQ_REMOVE
|
||
.Nd ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¡¢Ã±°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¡¢¥ê¥¹¥È¡¢¥Æ¡¼¥ë¥¥å¡¼¡¢
|
||
½Û´Ä¥¥å¡¼¤Î¼ÂÁõ
|
||
.Sh ½ñ¼°
|
||
.In sys/queue.h
|
||
.\"
|
||
.Fn SLIST_EMPTY "SLIST_HEAD *head"
|
||
.Fn SLIST_ENTRY "TYPE"
|
||
.Fn SLIST_FIRST "SLIST_HEAD *head"
|
||
.Fn SLIST_FOREACH "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME"
|
||
.Fn SLIST_HEAD "HEADNAME" "TYPE"
|
||
.Fn SLIST_HEAD_INITIALIZER "SLIST_HEAD head"
|
||
.Fn SLIST_INIT "SLIST_HEAD *head"
|
||
.Fn SLIST_INSERT_AFTER "TYPE *listelm" "TYPE *elm" "SLIST_ENTRY NAME"
|
||
.Fn SLIST_INSERT_HEAD "SLIST_HEAD *head" "TYPE *elm" "SLIST_ENTRY NAME"
|
||
.Fn SLIST_NEXT "TYPE *elm" "SLIST_ENTRY NAME"
|
||
.Fn SLIST_REMOVE_HEAD "SLIST_HEAD *head" "SLIST_ENTRY NAME"
|
||
.Fn SLIST_REMOVE "SLIST_HEAD *head" "TYPE *elm" "TYPE" "SLIST_ENTRY NAME"
|
||
.\"
|
||
.Fn STAILQ_EMPTY "STAILQ_HEAD *head"
|
||
.Fn STAILQ_ENTRY "TYPE"
|
||
.Fn STAILQ_FIRST "STAILQ_HEAD *head"
|
||
.Fn STAILQ_FOREACH "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_HEAD "HEADNAME" "TYPE"
|
||
.Fn STAILQ_HEAD_INITIALIZER "STAILQ_HEAD head"
|
||
.Fn STAILQ_INIT "STAILQ_HEAD *head"
|
||
.Fn STAILQ_INSERT_AFTER "STAILQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_INSERT_HEAD "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_INSERT_TAIL "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_LAST "STAILQ_HEAD *head" "TYPE" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_NEXT "TYPE *elm" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_REMOVE_HEAD "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
|
||
.Fn STAILQ_REMOVE "STAILQ_HEAD *head" "TYPE *elm" "TYPE" "STAILQ_ENTRY NAME"
|
||
.\"
|
||
.Fn LIST_EMPTY "LIST_HEAD *head"
|
||
.Fn LIST_ENTRY "TYPE"
|
||
.Fn LIST_FIRST "LIST_HEAD *head"
|
||
.Fn LIST_FOREACH "TYPE *var" "LIST_HEAD *head" "LIST_ENTRY NAME"
|
||
.Fn LIST_HEAD "HEADNAME" "TYPE"
|
||
.Fn LIST_HEAD_INITIALIZER "LIST_HEAD head"
|
||
.Fn LIST_INIT "LIST_HEAD *head"
|
||
.Fn LIST_INSERT_AFTER "TYPE *listelm" "TYPE *elm" "LIST_ENTRY NAME"
|
||
.Fn LIST_INSERT_BEFORE "TYPE *listelm" "TYPE *elm" "LIST_ENTRY NAME"
|
||
.Fn LIST_INSERT_HEAD "LIST_HEAD *head" "TYPE *elm" "LIST_ENTRY NAME"
|
||
.Fn LIST_NEXT "TYPE *elm" "LIST_ENTRY NAME"
|
||
.Fn LIST_REMOVE "TYPE *elm" "LIST_ENTRY NAME"
|
||
.\"
|
||
.Fn TAILQ_EMPTY "TAILQ_HEAD *head"
|
||
.Fn TAILQ_ENTRY "TYPE"
|
||
.Fn TAILQ_FIRST "TAILQ_HEAD *head"
|
||
.Fn TAILQ_FOREACH "TYPE *var" "TAILQ_HEAD *head" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_FOREACH_REVERSE "TYPE *var" "TAILQ_HEAD *head" "HEADNAME" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_HEAD "HEADNAME" "TYPE"
|
||
.Fn TAILQ_HEAD_INITIALIZER "TAILQ_HEAD head"
|
||
.Fn TAILQ_INIT "TAILQ_HEAD *head"
|
||
.Fn TAILQ_INSERT_AFTER "TAILQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_INSERT_BEFORE "TYPE *listelm" "TYPE *elm" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_INSERT_HEAD "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_INSERT_TAIL "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_LAST "TAILQ_HEAD *head" "HEADNAME"
|
||
.Fn TAILQ_NEXT "TYPE *elm" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_PREV "TYPE *elm" "HEADNAME" "TAILQ_ENTRY NAME"
|
||
.Fn TAILQ_REMOVE "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
|
||
.\"
|
||
.Fn CIRCLEQ_EMPTY "CIRCLEQ_HEAD *head"
|
||
.Fn CIRCLEQ_ENTRY "TYPE"
|
||
.Fn CIRCLEQ_FIRST "CIRCLEQ_HEAD *head"
|
||
.Fn CIRCLEQ_FOREACH "TYPE *var" "CIRCLEQ_HEAD *head" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_FOREACH_REVERSE "TYPE *var" "CIRCLEQ_HEAD *head" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_HEAD "HEADNAME" "TYPE"
|
||
.Fn CIRCLEQ_HEAD_INITIALIZER "CIRCLEQ_HEAD head"
|
||
.Fn CIRCLEQ_INIT "CIRCLEQ_HEAD *head"
|
||
.Fn CIRCLEQ_INSERT_AFTER "CIRCLEQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_INSERT_BEFORE "CIRCLEQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_INSERT_HEAD "CIRCLEQ_HEAD *head" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_INSERT_TAIL "CIRCLEQ_HEAD *head" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_LAST "CIRCLEQ_HEAD *head"
|
||
.Fn CIRCLEQ_NEXT "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLE_PREV "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Fn CIRCLEQ_REMOVE "CIRCLEQ_HEAD *head" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
|
||
.Sh ²òÀâ
|
||
¤³¤Î¥Þ¥¯¥í¤Ï¡¢Ã±°ì¥ê¥ó¥¯¥ê¥¹¥È¡¢Ã±°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¡¢¥ê¥¹¥È¡¢
|
||
¥Æ¡¼¥ë¥¥å¡¼¡¢½Û´Ä¥¥å¡¼¤È¤¤¤¦¡¢5 ¼ïÎà¤Î¥Ç¡¼¥¿¹½Â¤¤òÄêµÁ¤·¤Æ¤½¤³¤Çưºî¤·¤Þ¤¹¡£
|
||
5 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤Ï¤¹¤Ù¤Æ¡¢°Ê²¼¤Îµ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎÀèÆ¬¤Ë¿·¤·¤¤¥¨¥ó¥È¥ê¤òÁÞÆþ¤¹¤ë¡£
|
||
.It
|
||
¥ê¥¹¥È¤Ë¸ºß¤¹¤ëǤ°Õ¤ÎÍ×ÁǤθå¤í¤Ë¿·¤·¤¤¥¨¥ó¥È¥ê¤òÁÞÆþ¤¹¤ë¡£
|
||
.It
|
||
¥ê¥¹¥È¤ÎÀèÆ¬¤«¤é¥¨¥ó¥È¥ê¤ò O(1) ºï½ü¤¹¤ë¡£
|
||
.It
|
||
¥ê¥¹¥È¤ÎǤ°Õ¤Î¥¨¥ó¥È¥ê¤ò O(n) ºï½ü¤¹¤ë¡£
|
||
.It
|
||
¥ê¥¹¥È¤òÁ°¤«¤éÁöºº¤¹¤ë¡£
|
||
.El
|
||
.Pp
|
||
ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¤Ï¡¢5 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤ÎÃæ¤ÇºÇ¤âñ½ã¤Ç¡¢¾å¤Î 5¤Ä¤Îµ¡Ç½¤·
|
||
¤«¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó¡£
|
||
ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¤Ï¡¢
|
||
¥Ç¡¼¥¿¥»¥Ã¥È¤¬Â礤¯¡¢ºï½ü¤¬¤Û¤È¤ó¤É¤Ê¤¤¡¢¤â¤·¤¯¤Ï¡¢Á´¤¯¤Ê¤¤¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡¢
|
||
¤Þ¤¿¤Ï LIFO ¥¥å¡¼¤Î¼ÂÁõ¤ËÍýÁÛŪ¤Ç¤¹¡£
|
||
.Pp
|
||
ñ°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¤Ë¤Ï°Ê²¼¤Îµ¡Ç½¤â¤¢¤ê¤Þ¤¹¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎËöÈø¤Ë¥¨¥ó¥È¥ê¤òÄɲ乤롣
|
||
.El
|
||
¤·¤«¤·°Ê²¼¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎÁÞÆþ¤Ç¤Ï¡¢¥ê¥¹¥È¤Î¥Ø¥Ã¥É¤òɬ¤º»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¡£
|
||
.It
|
||
³Æ¥Ø¥Ã¥É¥¨¥ó¥È¥ê¤Ç¤Ï¡¢1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤¬É¬ÍפǤ¢¤ë¡£
|
||
.It
|
||
ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¤è¤ê¡¢¥³¡¼¥É¥µ¥¤¥º¤ÏÌó 15% Â礤¯¡¢Æ°ºî¤ÏÌó 20% ÃÙ¤¤¡£
|
||
.El
|
||
.Pp
|
||
ñ°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¤Ï¡¢
|
||
¥Ç¡¼¥¿¥»¥Ã¥È¤¬Â礤¯¡¢ºï½ü¤¬¤Û¤È¤ó¤É¤Ê¤¤¡¢¤â¤·¤¯¤Ï¡¢Á´¤¯¤Ê¤¤¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡¢
|
||
¤Þ¤¿¤Ï FIFO ¥¥å¡¼¤Î¼ÂÁõ¤ËÍýÁÛŪ¤Ç¤¹¡£
|
||
.Pp
|
||
Æó½Å¥ê¥ó¥¯¥¿¥¤¥×¤Î¤¹¤Ù¤Æ¤Î¥Ç¡¼¥¿¹½Â¤ (¥ê¥¹¥È¡¢¥Æ¡¼¥ë¥¥å¡¼¡¢½Û´Ä¥¥å¡¼) ¤Ë¤Ï
|
||
°Ê²¼¤Îµ¡Ç½¤â¤¢¤ê¤Þ¤¹¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤Ë¸ºß¤¹¤ëǤ°Õ¤ÎÍ×ÁǤÎÁ°¤Ë¿·¤·¤¤¥¨¥ó¥È¥ê¤òÁÞÆþ¤¹¤ë¡£
|
||
.It
|
||
¥ê¥¹¥È¤ÎǤ°Õ¤Î¥¨¥ó¥È¥ê¤ò O(1) ºï½ü¤¹¤ë¡£
|
||
.El
|
||
¤·¤«¤·°Ê²¼¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
³ÆÍ×ÁǤˤϡ¢1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤¬É¬ÍפǤ¢¤ë¡£
|
||
.It
|
||
ñ°ì¥ê¥ó¥¯¥Ç¡¼¥¿¹½Â¤¤è¤ê¡¢¥³¡¼¥É¥µ¥¤¥º¤È¼Â¹Ô»þ´Ö (ºï½ü¤Ï½ü¤¯) ¤¬Ìó 2 ÇܤË
|
||
¤Ê¤ë¡£
|
||
.El
|
||
.Pp
|
||
¥ê¥ó¥¯¥ê¥¹¥È¤Ï¡¢Æó½Å¥ê¥ó¥¯¥Ç¡¼¥¿¹½Â¤¤ÎÃæ¤ÇºÇ¤âñ½ã¤Ç¡¢Ã±°ì¥ê¥ó¥¯¥ê¥¹¥È¤Î
|
||
µ¡Ç½¤Ë²Ã¤¨¤Æ¾å¤Îµ¡Ç½¤·¤«¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó¡£
|
||
.Pp
|
||
¥Æ¡¼¥ë¥¥å¡¼¤Ë¤Ï°Ê²¼¤Îµ¡Ç½¤â¤¢¤ê¤Þ¤¹¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎËöÈø¤Ë¥¨¥ó¥È¥ê¤òÄɲ乤롣
|
||
.It
|
||
ËöÈø¤«¤éÀèÆ¬¤Ø¤ÈµÕ¤ËÁöºº¤¹¤ë¡£
|
||
.El
|
||
¤·¤«¤·°Ê²¼¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎÁÞÆþ¤Èºï½ü¤Ç¤Ï¡¢¥ê¥¹¥È¤Î¥Ø¥Ã¥É¤òɬ¤º»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¡£
|
||
.It
|
||
³Æ¥Ø¥Ã¥É¥¨¥ó¥È¥ê¤Ç¤Ï¡¢1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤¬É¬ÍפǤ¢¤ë¡£
|
||
.It
|
||
ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¤è¤ê¡¢¥³¡¼¥É¥µ¥¤¥º¤ÏÌó 15% Â礤¯¡¢½èÍý»þ´Ö¤ÏÌó 20% Ť¤¡£
|
||
.El
|
||
.Pp
|
||
½Û´Ä¥¥å¡¼¤Ë¤Ï°Ê²¼¤Îµ¡Ç½¤â¤¢¤ê¤Þ¤¹¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎËöÈø¤Ë¥¨¥ó¥È¥ê¤òÄɲ乤롣
|
||
.It
|
||
ËöÈø¤«¤éÀèÆ¬¤Ø¤ÈµÕ¤ËÁöºº¤¹¤ë¡£
|
||
.El
|
||
¤·¤«¤·°Ê²¼¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
|
||
.Bl -enum -compact -offset indent
|
||
.It
|
||
¥ê¥¹¥È¤ÎÁÞÆþ¤Èºï½ü¤Ç¤Ï¡¢¥ê¥¹¥È¤Î¥Ø¥Ã¥É¤òɬ¤º»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¡£
|
||
.It
|
||
³Æ¥Ø¥Ã¥É¥¨¥ó¥È¥ê¤Ç¤Ï¡¢1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤¬É¬ÍפǤ¢¤ë¡£
|
||
.It
|
||
Áöºº¤Î½ªÎ»¾ò·ï¤¬¤è¤êÊ£»¨¤Ç¤¢¤ë¡£
|
||
.It
|
||
¥ê¥¹¥È¤è¤ê¡¢¥³¡¼¥É¥µ¥¤¥º¤ÏÌó 40% Â礤¯¡¢½èÍý»þ´Ö¤ÏÌó 45% Ť¤¡£
|
||
.El
|
||
.Pp
|
||
¥Þ¥¯¥íÄêµÁ¤Ç¤Ï¡¢
|
||
.Fa TYPE
|
||
¤Ï¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿¹½Â¤ÂΤÎ̾Á°¤Ç¤¹¡£¤³¤Î¹½Â¤ÂΤˤϡ¢
|
||
.Fa NAME
|
||
¤È¤¤¤¦Ì¾Á°¤¬ÉÕ¤¤¤¿¡¢
|
||
.Li SLIST_ENTRY ,
|
||
.Li STAILQ_ENTRY ,
|
||
.Li LIST_ENTRY ,
|
||
.Li TAILQ_ENTRY ,
|
||
.Li CIRCLEQ_ENTRY
|
||
¤È¤¤¤¦·¿¤Î¥Õ¥£¡¼¥ë¥É¤ò´Þ¤á¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
|
||
°ú¿ô
|
||
.Fa HEADNAME
|
||
¤Ï
|
||
¥Þ¥¯¥í
|
||
.Li SLIST_HEAD ,
|
||
.Li STAILQ_HEAD ,
|
||
.Li LIST_HEAD ,
|
||
.Li TAILQ_HEAD ,
|
||
.Li CIRCLEQ_HEAD
|
||
¤ÇÀë¸À¤¹¤ëɬÍפΤ¢¤ë¡¢¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿¹½Â¤ÂΤÎ̾Á°¤Ç¤¹¡£
|
||
¤³¤Î¥Þ¥¯¥í¤Î»ÈÍÑË¡¤Î¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢°Ê²¼¤Î»ÈÍÑÎã¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
|
||
.Sh ñ°ì¥ê¥ó¥¯¥ê¥¹¥È
|
||
ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¤ÎºÇ½é¤Ë¤Ï¡¢
|
||
.Nm SLIST_HEAD
|
||
¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÉÕ¤¤Þ¤¹¡£
|
||
¤³¤Î¹½Â¤ÂΤˤϡ¢¥ê¥¹¥È¤ÎÀèÆ¬¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤¬ 1 ¤Ä´Þ¤Þ¤ì¤Þ¤¹¡£
|
||
Í×ÁǤϡ¢Ç¤°Õ¤ÎÍ×ÁǤΠO(n) ºï½ü¤òµ¾À·¤Ë¤·¤Æ¡¢
|
||
¥¹¥Ú¡¼¥¹¤È¥Ý¥¤¥ó¥¿Áàºî¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤¬ºÇ¾®¤Ë¤Ê¤ë¤è¤¦¤Ëñ°ì¥ê¥ó¥¯¤µ¤ì¤Þ¤¹¡£
|
||
¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤθå¤í¡¢¥ê¥¹¥È¤ÎÀèÆ¬¤Ç¥ê¥¹¥È¤ËÄɲäǤ¤Þ¤¹¡£
|
||
.Fa SLIST_HEAD
|
||
¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
SLIST_HEAD(HEADNAME, TYPE) head;
|
||
.Ed
|
||
.Pp
|
||
¤³¤³¤Ç
|
||
.Fa HEADNAME
|
||
¤ÏÄêµÁ¤¹¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¡¢
|
||
.Fa TYPE
|
||
¤Ï¥ê¥¹¥È¤Ë¥ê¥ó¥¯¤¹¤ëÍ×ÁǤη¿¤Ç¤¹¡£
|
||
¥ê¥¹¥È¤Î¥Ø¥Ã¥É¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¸å¤Ç°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤Ç¤¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
struct HEADNAME *headp;
|
||
.Ed
|
||
.Pp
|
||
(̾Á°
|
||
.Li head
|
||
¤È
|
||
.Li headp
|
||
¤Ï¡¢¥æ¡¼¥¶¤¬Áª¤Ù¤Þ¤¹¡£)
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_HEAD_INITIALIZER
|
||
¤Ï¥ê¥¹¥È¤Î
|
||
.Fa head
|
||
¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_EMPTY
|
||
¤Ï¥ê¥¹¥È¤ËÍ×ÁǤ¬¤Ê¤¤¾ì¹ç¤Ë¿¿¤Ë¤Ê¤ê¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_ENTRY
|
||
¤Ï¥ê¥¹¥È¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_FIRST
|
||
¤Ï¥ê¥¹¥È¤ÎÀèÆ¬¤ÎÍ×ÁǤò¡¢¥ê¥¹¥È¤¬¶õ¤Ê¤é NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_FOREACH
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë¥ê¥¹¥È¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤Æ½çÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_INIT
|
||
¤Ï
|
||
.Fa head
|
||
¤¬»²¾È¤¹¤ë¥ê¥¹¥È¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_INSERT_HEAD
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò¥ê¥¹¥È¤ÎÀèÆ¬¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_INSERT_AFTER
|
||
¤ÏÍ×ÁÇ
|
||
.Fa listelm
|
||
¤Î¸å¤í¤Ë¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_NEXT
|
||
¤Ï¥ê¥¹¥È¤Î¼¡¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_REMOVE_HEAD
|
||
¤Ï¥ê¥¹¥È¤ÎÀèÆ¬¤«¤éÍ×ÁÇ
|
||
.Fa elm
|
||
¤òºï½ü¤·¤Þ¤¹¡£
|
||
ºÇŬ¤Ê¸úΨ¤òÆÀ¤ë¤¿¤á¤Ë¡¢¥ê¥¹¥È¤ÎÀèÆ¬¤«¤éÍ×ÁǤòºï½ü¤¹¤ë¾ì¹ç¤Ë¤Ï
|
||
°ìÈÌŪ¤Ê
|
||
.Fa SLIST_REMOVE
|
||
¥Þ¥¯¥í¤ÎÂå¤ï¤ê¤Ë¤³¤Î¥Þ¥¯¥í¤òÌÀ¼¨Åª¤Ë»ÈÍѤ¹¤Ù¤¤Ç¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm SLIST_REMOVE
|
||
¤Ï¥ê¥¹¥È¤«¤éÍ×ÁÇ
|
||
.Fa elm
|
||
¤òºï½ü¤·¤Þ¤¹¡£
|
||
.Sh ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¤Î»ÈÍÑÎã
|
||
.Bd -literal
|
||
SLIST_HEAD(slisthead, entry) head =
|
||
SLIST_HEAD_INITIALIZER(head);
|
||
struct slisthead *headp; /* ñ°ì¥ê¥ó¥¯¥ê¥¹¥È¥Ø¥Ã¥É */
|
||
struct entry {
|
||
...
|
||
SLIST_ENTRY(entry) entries; /* ñ°ì¥ê¥ó¥¯¥ê¥¹¥È */
|
||
...
|
||
} *n1, *n2, *n3, *np;
|
||
|
||
SLIST_INIT(&head); /* ¥ê¥¹¥È¤ò½é´ü²½ */
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ÀèÆ¬¤ËÁÞÆþ */
|
||
SLIST_INSERT_HEAD(&head, n1, entries);
|
||
|
||
n2 = malloc(sizeof(struct entry)); /* ¸å¤í¤ËÁÞÆþ */
|
||
SLIST_INSERT_AFTER(n1, n2, entries);
|
||
|
||
SLIST_REMOVE(&head, n2, entry, entries);/* ºï½ü */
|
||
free(n2);
|
||
|
||
n3 = SLIST_FIRST(&head);
|
||
SLIST_REMOVE_HEAD(&head, entries); /* ÀèÆ¬¤«¤éºï½ü */
|
||
free(n3);
|
||
/* ½çÁöºº */
|
||
SLIST_FOREACH(np, &head, entries)
|
||
np-> ...
|
||
|
||
while (!SLIST_EMPTY(&head)) { /* ¥ê¥¹¥È¤Îºï½ü */
|
||
n1 = SLIST_FIRST(&head);
|
||
SLIST_REMOVE_HEAD(&head, entries);
|
||
free(n1);
|
||
}
|
||
.Ed
|
||
.Sh ñ°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼
|
||
ñ°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¤ÎºÇ½é¤Ë¤Ï¡¢
|
||
.Nm STAILQ_HEAD
|
||
¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬¤Ä¤¤Þ¤¹¡£
|
||
¤³¤Î¹½Â¤ÂΤˤϥơ¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤È
|
||
¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤Î 2 ¤Ä¤¬´Þ¤Þ¤ì¤Þ¤¹¡£
|
||
Í×ÁǤϡ¢Ç¤°Õ¤ÎÍ×ÁǤΠO(n) ºï½ü¤òµ¾À·¤Ë¤·¤Æ¡¢
|
||
¥¹¥Ú¡¼¥¹¤È¥Ý¥¤¥ó¥¿Áàºî¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤¬ºÇ¾®¤Ë¤Ê¤ë¤è¤¦¤Ëñ°ì¥ê¥ó¥¯¤µ¤ì¤Þ¤¹¡£
|
||
¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤθå¤í¡¢¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¡¢¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤Ç
|
||
¥Æ¡¼¥ë¥¥å¡¼¤ËÄɲäǤ¤Þ¤¹¡£
|
||
.Fa STAILQ_HEAD
|
||
¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
STAILQ_HEAD(HEADNAME, TYPE) head;
|
||
.Ed
|
||
.Pp
|
||
¤³¤³¤Ç
|
||
.Li HEADNAME
|
||
¤ÏÄêµÁ¤¹¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¡¢
|
||
.Li TYPE
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤Ë¥ê¥ó¥¯¤¹¤ëÍ×ÁǤη¿¤Ç¤¹¡£
|
||
¥Æ¡¼¥ë¥¥å¡¼¤Î¥Ø¥Ã¥É¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¸å¤Ç°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤Ç¤¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
struct HEADNAME *headp;
|
||
.Ed
|
||
.Pp
|
||
(̾Á°
|
||
.Li head
|
||
¤È
|
||
.Li headp
|
||
¤Ï¡¢¥æ¡¼¥¶¤¬Áª¤Ù¤Þ¤¹¡£)
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_HEAD_INITIALIZER
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤Î
|
||
.Fa head
|
||
¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_EMPTY
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ËÍ×ÁǤ¬¤Ê¤¤¾ì¹ç¤Ë¿¿¤Ë¤Ê¤ê¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_ENTRY
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_FIRST
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤ÎÍ×ÁǤò¡¢¥Æ¡¼¥ë¥¥å¡¼¤¬¶õ¤Ê¤é NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_FOREACH
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë¥Æ¡¼¥ë¥¥å¡¼¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤Æ½çÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_INIT
|
||
¤Ï
|
||
.Fa head
|
||
¤¬»²¾È¤¹¤ë¥Æ¡¼¥ë¥¥å¡¼¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_INSERT_HEAD
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_INSERT_TAIL
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_INSERT_AFTER
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤Î¸å¤í¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_LAST
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
¥Æ¡¼¥ë¥¥å¡¼¤¬¶õ¤Ê¤é¡¢Ìá¤êÃͤÏ̤ÄêµÁ¤Ç¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_NEXT
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤Î¼¡¤ÎÍ×ÁǤò¡¢¤³¤ÎÍ×ÁǤ¬ËöÈø¤Ê¤é NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_REMOVE_HEAD
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤«¤éÍ×ÁÇ
|
||
¤òºï½ü¤·¤Þ¤¹¡£
|
||
ºÇŬ¤Ê¸úΨ¤òÆÀ¤ë¤¿¤á¤Ë¡¢¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤«¤éÍ×ÁǤòºï½ü¤¹¤ë¾ì¹ç¤Ë¤Ï
|
||
°ìÈÌŪ¤Ê
|
||
.Fa STAILQ_REMOVE
|
||
¥Þ¥¯¥í¤è¤ê¤â¤³¤Î¥Þ¥¯¥í¤òÌÀ¼¨Åª¤Ë»ÈÍѤ¹¤Ù¤¤Ç¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm STAILQ_REMOVE
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤«¤éÍ×ÁÇ
|
||
.Fa elm
|
||
¤òºï½ü¤·¤Þ¤¹¡£
|
||
.Sh ñ°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¤Î»ÈÍÑÎã
|
||
.Bd -literal
|
||
STAILQ_HEAD(stailhead, entry) head =
|
||
STAILQ_HEAD_INITIALIZER(head);
|
||
struct stailhead *headp; /* ñ°ì¥ê¥ó¥¯¥Æ¡¼¥ë¥¥å¡¼¥Ø¥Ã¥É */
|
||
struct entry {
|
||
...
|
||
STAILQ_ENTRY(entry) entries; /* ¥Æ¡¼¥ë¥¥å¡¼ */
|
||
...
|
||
} *n1, *n2, *n3, *np;
|
||
|
||
STAILQ_INIT(&head); /* ¥¥å¡¼¤ò½é´ü²½ */
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ÀèÆ¬¤ËÁÞÆþ */
|
||
STAILQ_INSERT_HEAD(&head, n1, entries);
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ËöÈø¤ËÁÞÆþ */
|
||
STAILQ_INSERT_TAIL(&head, n1, entries);
|
||
|
||
n2 = malloc(sizeof(struct entry)); /* ¸å¤í¤ËÁÞÆþ */
|
||
STAILQ_INSERT_AFTER(&head, n1, n2, entries);
|
||
/* ºï½ü */
|
||
STAILQ_REMOVE(&head, n2, entry, entries);
|
||
free(n2);
|
||
/* ÀèÆ¬¤«¤éºï½ü */
|
||
n3 = STAILQ_FIRST(&head);
|
||
STAILQ_REMOVE_HEAD(&head, entries);
|
||
free(n3);
|
||
/* ½çÁöºº */
|
||
STAILQ_FOREACH(np, &head, entries)
|
||
np-> ...
|
||
/* ¥Æ¡¼¥ë¥¥å¡¼¤Îºï½ü */
|
||
while (!STAILQ_EMPTY(&head)) {
|
||
n1 = STAILQ_FIRST(&head);
|
||
STAILQ_REMOVE_HEAD(&head, entries);
|
||
free(n1);
|
||
}
|
||
/* ¥Æ¡¼¥ë¥¥å¡¼¤Î¹â®¤Êºï½ü */
|
||
n1 = STAILQ_FIRST(&head);
|
||
while (n1 != NULL) {
|
||
n2 = STAILQ_NEXT(n1, entries);
|
||
free(n1);
|
||
n1 = n2;
|
||
}
|
||
STAILQ_INIT(&head);
|
||
.Ed
|
||
.Sh ¥ê¥¹¥È
|
||
¥ê¥¹¥È¤ÎºÇ½é¤Ë¤Ï¡¢
|
||
.Nm LIST_HEAD
|
||
¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÉÕ¤¤Þ¤¹¡£
|
||
¤³¤Î¹½Â¤ÂΤˤϡ¢¥ê¥¹¥È¤ÎÀèÆ¬¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤¬ 1 ¤Ä´Þ¤Þ¤ì¤Þ¤¹¡£
|
||
Í×ÁÇ¤ÏÆó½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥ê¥¹¥È¤òÁöºº¤»¤º¤ËǤ°Õ¤ÎÍ×ÁǤòºï½ü¤Ç¤¤Þ¤¹¡£
|
||
¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤÎÁ°¡¢´û¸¤ÎÍ×ÁǤθ塢¥ê¥¹¥È¤ÎÀèÆ¬¤Ç
|
||
¥ê¥¹¥È¤ËÄɲäǤ¤Þ¤¹¡£
|
||
.Fa LIST_HEAD
|
||
¹½Â¤ÂΤϡ¢°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
LIST_HEAD(HEADNAME, TYPE) head;
|
||
.Ed
|
||
.Pp
|
||
¤³¤³¤Ç
|
||
.Fa HEADNAME
|
||
¤ÏÄêµÁ¤¹¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¡¢
|
||
.Fa TYPE
|
||
¤Ï¥ê¥¹¥È¤Ë¥ê¥ó¥¯¤¹¤ëÍ×ÁǤη¿¤Ç¤¹¡£
|
||
¥ê¥¹¥È¤Î¥Ø¥Ã¥É¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¸å¤Ç°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤Ç¤¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
struct HEADNAME *headp;
|
||
.Ed
|
||
.Pp
|
||
(̾Á°
|
||
.Li head
|
||
¤È
|
||
.Li headp
|
||
¤Ï¡¢¥æ¡¼¥¶¤¬Áª¤Ù¤Þ¤¹¡£)
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_HEAD_INITIALIZER
|
||
¤Ï¥ê¥¹¥È¤Î
|
||
.Fa head
|
||
¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_EMPTY
|
||
¤Ï¥ê¥¹¥È¤ËÍ×ÁǤ¬¤Ê¤¤¾ì¹ç¤Ë¿¿¤Ë¤Ê¤ê¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_ENTRY
|
||
¤Ï¥ê¥¹¥È¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_FIRST
|
||
¤Ï¥ê¥¹¥È¤ÎºÇ½é¤ÎÍ×ÁǤò¡¢¥ê¥¹¥È¤¬¶õ¤Ê¤é NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_FOREACH
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë¥ê¥¹¥È¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤Æ½çÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_INIT
|
||
¤Ï
|
||
.Fa head
|
||
¤¬»²¾È¤¹¤ë¥ê¥¹¥È¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_INSERT_HEAD
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò¥ê¥¹¥È¤ÎÀèÆ¬¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_INSERT_AFTER
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤Î¸å¤í¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_INSERT_BEFORE
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤ÎÁ°¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_NEXT
|
||
¤Ï¥ê¥¹¥È¤Î¼¡¤ÎÍ×ÁǤò¡¢¤³¤ÎÍ×ÁǤ¬ËöÈø¤Ê¤é NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm LIST_REMOVE
|
||
¤ÏÍ×ÁÇ
|
||
.Fa elm
|
||
¤ò¥ê¥¹¥È¤«¤éºï½ü¤·¤Þ¤¹¡£
|
||
.Sh ¥ê¥¹¥È¤Î»ÈÍÑÎã
|
||
.Bd -literal
|
||
LIST_HEAD(listhead, entry) head =
|
||
LIST_HEAD_INITIALIZER(head);
|
||
struct listhead *headp; /* ¥ê¥¹¥È¥Ø¥Ã¥É */
|
||
struct entry {
|
||
...
|
||
LIST_ENTRY(entry) entries; /* ¥ê¥¹¥È */
|
||
...
|
||
} *n1, *n2, *n3, *np;
|
||
|
||
LIST_INIT(&head); /* ¥ê¥¹¥È¤ò½é´ü²½ */
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ÀèÆ¬¤ËÁÞÆþ */
|
||
LIST_INSERT_HEAD(&head, n1, entries);
|
||
|
||
n2 = malloc(sizeof(struct entry)); /* ¸å¤í¤ËÁÞÆþ */
|
||
LIST_INSERT_AFTER(n1, n2, entries);
|
||
|
||
n3 = malloc(sizeof(struct entry)); /* Á°¤ËÁÞÆþ */
|
||
LIST_INSERT_BEFORE(n2, n3, entries);
|
||
|
||
LIST_REMOVE(n2, entries); /* ºï½ü */
|
||
free(n2);
|
||
/* ½çÁöºº */
|
||
LIST_FOREACH(np, &head, entries)
|
||
np-> ...
|
||
|
||
while (!LIST_EMPTY(&head)) { /* ¥ê¥¹¥È¤Îºï½ü */
|
||
n1 = LIST_FIRST(&head);
|
||
LIST_REMOVE(n1, entries);
|
||
free(n1);
|
||
}
|
||
|
||
n1 = LIST_FIRST(&head); /* ¥ê¥¹¥È¤Î¹â®¤Êºï½ü */
|
||
while (n1 != NULL) {
|
||
n2 = LIST_NEXT(n1, entries);
|
||
free(n1);
|
||
n1 = n2;
|
||
}
|
||
LIST_INIT(&head);
|
||
.Ed
|
||
.Sh ¥Æ¡¼¥ë¥¥å¡¼
|
||
¥Æ¡¼¥ë¥¥å¡¼¤ÎºÇ½é¤Ë¤Ï¡¢
|
||
.Nm TAILQ_HEAD
|
||
¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÉÕ¤¤Þ¤¹¡£
|
||
¤³¤Î¹½Â¤ÂΤˤϡ¢¥Æ¡¼¥ë¥¥å¡¼¤ÎºÇ½é¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤È
|
||
¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤Î 2 ¤Ä¤¬´Þ¤Þ¤ì¤Þ¤¹¡£
|
||
Í×ÁÇ¤ÏÆó½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥Æ¡¼¥ë¥¥å¡¼¤òÁöºº¤»¤º¤Ë
|
||
Ǥ°Õ¤ÎÍ×ÁǤòºï½ü¤Ç¤¤Þ¤¹¡£
|
||
¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤÎÁ°¡¢´û¸¤ÎÍ×ÁǤθ塢¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¡¢
|
||
¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤Ç¥Æ¡¼¥ë¥¥å¡¼¤ËÄɲäǤ¤Þ¤¹¡£
|
||
.Fa TAILQ_HEAD
|
||
¹½Â¤ÂΤϡ¢°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
TAILQ_HEAD(HEADNAME, TYPE) head;
|
||
.Ed
|
||
.Pp
|
||
¤³¤³¤Ç
|
||
.Li HEADNAME
|
||
¤ÏÄêµÁ¤¹¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¡¢
|
||
.Li TYPE
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤Ë¥ê¥ó¥¯¤¹¤ëÍ×ÁǤη¿¤Ç¤¹¡£
|
||
¥Æ¡¼¥ë¥¥å¡¼¤Î¥Ø¥Ã¥É¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¸å¤Ç°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
struct HEADNAME *headp;
|
||
.Ed
|
||
.Pp
|
||
(̾Á°
|
||
.Li head
|
||
¤È
|
||
.Li headp
|
||
¤Ï¡¢¥æ¡¼¥¶¤¬Áª¤Ù¤Þ¤¹¡£)
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_HEAD_INITIALIZER
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤Î
|
||
.Fa head
|
||
¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_EMPTY
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ËÍ×ÁǤ¬¤Ê¤¤¾ì¹ç¤Ë¿¿¤Ë¤Ê¤ê¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_ENTRY
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_FIRST
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎºÇ½é¤ÎÍ×ÁǤò¡¢¥Æ¡¼¥ë¥¥å¡¼¤¬¶õ¤Ê¤é NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_FOREACH
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë¥Æ¡¼¥ë¥¥å¡¼¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤Æ½çÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_FOREACH_REVERSE
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë¥Æ¡¼¥ë¥¥å¡¼¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤ÆµÕÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_INIT
|
||
¤Ï
|
||
.Fa head
|
||
¤¬»²¾È¤¹¤ë¥Æ¡¼¥ë¥¥å¡¼¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_INSERT_HEAD
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò¥Æ¡¼¥ë¥¥å¡¼¤ÎÀèÆ¬¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_INSERT_TAIL
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_INSERT_AFTER
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤Î¸å¤í¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_INSERT_BEFORE
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤ÎÁ°¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_LAST
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎËöÈø¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
¥Æ¡¼¥ë¥¥å¡¼¤¬¶õ¤Î¾ì¹ç¡¢Ìá¤êÃͤÏ̤ÄêµÁ¤Ç¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_NEXT
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤Î¼¡¤ÎÍ×ÁǤò¡¢¤½¤ÎÍ×ÁǤ¬ËöÈø¤Î¾ì¹ç¤Ï NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_PREV
|
||
¤Ï¥Æ¡¼¥ë¥¥å¡¼¤ÎÁ°¤ÎÍ×ÁǤò¡¢¤½¤ÎÍ×ÁǤ¬ÀèÆ¬¤Î¾ì¹ç¤Ï NULL ¤òÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm TAILQ_REMOVE
|
||
¤ÏÍ×ÁÇ
|
||
.Fa elm
|
||
¤ò¥Æ¡¼¥ë¥¥å¡¼¤«¤éºï½ü¤·¤Þ¤¹¡£
|
||
.Sh ¥Æ¡¼¥ë¥¥å¡¼¤Î»ÈÍÑÎã
|
||
.Bd -literal
|
||
TAILQ_HEAD(tailhead, entry) head =
|
||
TAILQ_HEAD_INITIALIZER(head);
|
||
struct tailhead *headp; /* ¥Æ¡¼¥ë¥¥å¡¼¥Ø¥Ã¥É */
|
||
struct entry {
|
||
...
|
||
TAILQ_ENTRY(entry) entries; /* ¥Æ¡¼¥ë¥¥å¡¼ */
|
||
...
|
||
} *n1, *n2, *n3, *np;
|
||
|
||
TAILQ_INIT(&head); /* ¥¥å¡¼¤ò½é´ü²½ */
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ÀèÆ¬¤ËÁÞÆþ */
|
||
TAILQ_INSERT_HEAD(&head, n1, entries);
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ËöÈø¤ËÁÞÆþ */
|
||
TAILQ_INSERT_TAIL(&head, n1, entries);
|
||
|
||
n2 = malloc(sizeof(struct entry)); /* ¸å¤í¤ËÁÞÆþ */
|
||
TAILQ_INSERT_AFTER(&head, n1, n2, entries);
|
||
|
||
n3 = malloc(sizeof(struct entry)); /* Á°¤ËÁÞÆþ */
|
||
TAILQ_INSERT_BEFORE(n2, n3, entries);
|
||
|
||
TAILQ_REMOVE(&head, n2, entries); /* ºï½ü */
|
||
free(n2);
|
||
/* ½çÁöºº */
|
||
TAILQ_FOREACH(np, &head, entries)
|
||
np-> ...
|
||
/* µÕÁöºº */
|
||
TAILQ_FOREACH_REVERSE(np, &head, tailhead, entries)
|
||
np-> ...
|
||
/* ¥Æ¡¼¥ë¥¥å¡¼¤Îºï½ü */
|
||
while (!TAILQ_EMPTY(&head)) {
|
||
n1 = TAILQ_FIRST(&head);
|
||
TAILQ_REMOVE(&head, n1, entries);
|
||
free(n1);
|
||
}
|
||
/* ¥Æ¡¼¥ë¥¥å¡¼¤Î¹â®¤Êºï½ü */
|
||
n1 = TAILQ_FIRST(&head);
|
||
while (n1 != NULL) {
|
||
n2 = TAILQ_NEXT(n1, entries);
|
||
free(n1);
|
||
n1 = n2;
|
||
}
|
||
TAILQ_INIT(&head);
|
||
.Ed
|
||
.Sh ½Û´Ä¥¥å¡¼
|
||
½Û´Ä¥¥å¡¼¤ÎºÇ½é¤Ë¤Ï¡¢
|
||
.Nm CIRCLEQ_HEAD
|
||
¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÉÕ¤¤Þ¤¹¡£
|
||
¤³¤Î¹½Â¤ÂΤˤϡ¢½Û´Ä¥¥å¡¼¤ÎÀèÆ¬¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤È
|
||
½Û´Ä¥¥å¡¼¤ÎËöÈø¤ÎÍ×ÁǤò»Ø¤¹¥Ý¥¤¥ó¥¿¤Î 2 ¤Ä¤¬´Þ¤Þ¤ì¤Þ¤¹¡£
|
||
Í×ÁÇ¤ÏÆó½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥¥å¡¼¤òÁöºº¤»¤º¤Ë
|
||
Ǥ°Õ¤ÎÍ×ÁǤòºï½ü¤Ç¤¤Þ¤¹¡£
|
||
¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤÎÁ°¡¢´û¸¤ÎÍ×ÁǤθå¤í¡¢½Û´Ä¥¥å¡¼¤ÎÀèÆ¬¡¢
|
||
½Û´Ä¥¥å¡¼¤ÎËöÈø¤Ç½Û´Ä¥¥å¡¼¤ËÄɲäǤ¤Þ¤¹¡£
|
||
.Fa CIRCLEQ_HEAD
|
||
¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
CIRCLEQ_HEAD(HEADNAME, TYPE) head;
|
||
.Ed
|
||
.Pp
|
||
¤³¤³¤Ç
|
||
.Li HEADNAME
|
||
¤ÏÄêµÁ¤¹¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¡¢
|
||
.Li TYPE
|
||
¤Ï½Û´Ä¥¥å¡¼¤Ë¥ê¥ó¥¯¤¹¤ëÍ×ÁǤη¿¤Ç¤¹¡£
|
||
½Û´Ä¥¥å¡¼¤Î¥Ø¥Ã¥É¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¸å¤Ç°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤Ç¤¤Þ¤¹¡£
|
||
.Bd -literal -offset indent
|
||
struct HEADNAME *headp;
|
||
.Ed
|
||
.Pp
|
||
(̾Á°
|
||
.Li head
|
||
¤È
|
||
.Li headp
|
||
¤Ï¡¢¥æ¡¼¥¶¤¬Áª¤Ù¤Þ¤¹¡£)
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_HEAD_INITIALIZER
|
||
¤Ï½Û´Ä¥¥å¡¼¤Î
|
||
.Fa head
|
||
¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_EMPTY
|
||
¤Ï½Û´Ä¥¥å¡¼¤ËÍ×ÁǤ¬¤Ê¤¤¾ì¹ç¤Ë¿¿¤Ë¤Ê¤ê¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_ENTRY
|
||
¤Ï½Û´Ä¥¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_FIRST
|
||
¤Ï½Û´Ä¥¥å¡¼¤ÎÀèÆ¬¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CICRLEQ_FOREACH
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë½Û´Ä¥¥å¡¼¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤Æ½çÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CICRLEQ_FOREACH_REVERSE
|
||
¤Ï
|
||
.Fa head
|
||
¤Ç»²¾È¤µ¤ì¤ë½Û´Ä¥¥å¡¼¤ò¡¢³ÆÍ×ÁǤò½ç¤Ë
|
||
.Fa var
|
||
¤Ë³ä¤êÅö¤Æ¤ÆµÕÊý¸þ¤ËÁöºº¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_INIT
|
||
¤Ï
|
||
.Fa head
|
||
¤¬»²¾È¤¹¤ë½Û´Ä¥¥å¡¼¤ò½é´ü²½¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_INSERT_HEAD
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò½Û´Ä¥¥å¡¼¤ÎÀèÆ¬¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_INSERT_TAIL
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤ò½Û´Ä¥¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_INSERT_AFTER
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤Î¸å¤í¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_INSERT_BEFORE
|
||
¤Ï¿·¤·¤¤Í×ÁÇ
|
||
.Fa elm
|
||
¤òÍ×ÁÇ
|
||
.Fa listelm
|
||
¤ÎÁ°¤ËÁÞÆþ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_LAST
|
||
¤Ï½Û´Ä¥¥å¡¼¤ÎËöÈø¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_NEXT
|
||
¤Ï½Û´Ä¥¥å¡¼¤Î¼¡¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_PREV
|
||
¤Ï½Û´Ä¥¥å¡¼¤ÎÁ°¤ÎÍ×ÁǤòÊÖ¤·¤Þ¤¹¡£
|
||
.Pp
|
||
¥Þ¥¯¥í
|
||
.Nm CIRCLEQ_REMOVE
|
||
¤ÏÍ×ÁÇ
|
||
.Fa elm
|
||
¤ò½Û´Ä¥¥å¡¼¤«¤éºï½ü¤·¤Þ¤¹¡£
|
||
.Sh ½Û´Ä¥¥å¡¼¤Î»ÈÍÑÎã
|
||
.Bd -literal
|
||
CIRCLEQ_HEAD(circlehead, entry) head =
|
||
CIRCLEQ_HEAD_INITIALIZER(head);
|
||
struct circleq *headp; /* ½Û´Ä¥¥å¡¼¥Ø¥Ã¥É */
|
||
struct entry {
|
||
...
|
||
CIRCLEQ_ENTRY(entry) entries; /* ½Û´Ä¥¥å¡¼ */
|
||
...
|
||
} *n1, *n2, *np;
|
||
|
||
CIRCLEQ_INIT(&head); /* ½Û´Ä¥¥å¡¼¤ò½é´ü²½ */
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ÀèÆ¬¤ËÁÞÆþ */
|
||
CIRCLEQ_INSERT_HEAD(&head, n1, entries);
|
||
|
||
n1 = malloc(sizeof(struct entry)); /* ËöÈø¤ËÁÞÆþ */
|
||
CIRCLEQ_INSERT_TAIL(&head, n1, entries);
|
||
|
||
n2 = malloc(sizeof(struct entry)); /* ¸å¤í¤ËÁÞÆþ */
|
||
CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
|
||
|
||
n2 = malloc(sizeof(struct entry)); /* Á°¤ËÁÞÆþ */
|
||
CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
|
||
|
||
CIRCLEQ_REMOVE(&head, n1, entries); /* ºï½ü */
|
||
free(n1);
|
||
/* ½çÁöºº */
|
||
CIRCLEQ_FOREACH(np, &head, entries)
|
||
np-> ...
|
||
/* µÕÁöºº */
|
||
CIRCLEQ_FOREACH_REVERSE(np, &head, entries)
|
||
np-> ...
|
||
/* ½Û´Ä¥¥å¡¼¤Îºï½ü */
|
||
while (CIRCLEQ_FIRST(&head) != (void *)&head) {
|
||
n1 = CIRCLEQ_HEAD(&head);
|
||
CIRCLEQ_REMOVE(&head, n1, entries);
|
||
free(n1);
|
||
}
|
||
/* ½Û´Ä¥¥å¡¼¤Î¹â®¤Êºï½ü */
|
||
n1 = CIRCLEQ_FIRST(&head);
|
||
while (n1 != (void *)&head) {
|
||
n2 = CIRCLEQ_NEXT(n1, entries);
|
||
free(n1);
|
||
n1 = n2;
|
||
}
|
||
CIRCLEQ_INIT(&head);
|
||
.Ed
|
||
.Sh Îò»Ë
|
||
.Nm queue
|
||
´Ø¿ô¤Ï
|
||
.Bx 4.4
|
||
¤Ç¤Ï¤¸¤á¤ÆÅо줷¤Þ¤·¤¿¡£
|