queue.h

説明を見る。
00001 /*
00002  *  TOPPERS Software
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems
00004  * 
00005  *  Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
00006  *                              Toyohashi Univ. of Technology, JAPAN
00007  *  Copyright (C) 2006-2008 by Embedded and Real-Time Systems Laboratory
00008  *              Graduate School of Information Science, Nagoya Univ., JAPAN
00009  * 
00010  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
00011  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
00012  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
00013  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00014  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00015  *      スコード中に含まれていること.
00016  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00017  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00018  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00019  *      の無保証規定を掲載すること.
00020  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00021  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00022  *      と.
00023  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00024  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00025  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00026  *        報告すること.
00027  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00028  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00029  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
00030  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
00031  *      免責すること.
00032  * 
00033  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00034  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
00035  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
00036  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
00037  *  の責任を負わない.
00038  * 
00039  *  @(#) $Id: queue.h 753 2008-03-07 17:40:04Z hiro $
00040  */
00041 
00042 /*
00043  *      キュー操作ライブラリ
00044  *
00045  *  このキュー操作ライブラリでは,キューヘッダを含むリング構造のダブル
00046  *  リンクキューを扱う.具体的には,キューヘッダの次エントリはキューの
00047  *  先頭のエントリ,前エントリはキューの末尾のエントリとする.また,キ
00048  *  ューの先頭のエントリの前エントリと,キューの末尾のエントリの次エン
00049  *  トリは,キューヘッダとする.空のキューは,次エントリ,前エントリと
00050  *  も自分自身を指すキューヘッダであらわす.
00051  */
00052 
00053 #ifndef TOPPERS_QUEUE_H
00054 #define TOPPERS_QUEUE_H
00055 
00056 #ifdef __cplusplus
00057 extern "C" {
00058 #endif
00059 
00060 /*
00061  *  キューのデータ構造の定義
00062  */
00063 typedef struct queue {
00064     struct queue *p_next;       /* 次エントリへのポインタ */
00065     struct queue *p_prev;       /* 前エントリへのポインタ */
00066 } QUEUE;
00067 
00068 /*
00069  *  キューの初期化
00070  *
00071  *  p_queueにはキューヘッダを指定する.
00072  */
00073 Inline void
00074 queue_initialize(QUEUE *p_queue)
00075 {
00076     p_queue->p_prev = p_queue->p_next = p_queue;
00077 }
00078 
00079 /*
00080  *  キューの前エントリへの挿入
00081  *
00082  *  p_queueの前にp_entryを挿入する.p_queueにキューヘッダを指定した場
00083  *  合には,キューの末尾にp_entryを挿入することになる.
00084  */
00085 Inline void
00086 queue_insert_prev(QUEUE *p_queue, QUEUE *p_entry)
00087 {
00088     p_entry->p_prev = p_queue->p_prev;
00089     p_entry->p_next = p_queue;
00090     p_queue->p_prev->p_next = p_entry;
00091     p_queue->p_prev = p_entry;
00092 }
00093 
00094 /*
00095  *  エントリの削除
00096  *
00097  *  p_entryをキューから削除する.
00098  */
00099 Inline void
00100 queue_delete(QUEUE *p_entry)
00101 {
00102     p_entry->p_prev->p_next = p_entry->p_next;
00103     p_entry->p_next->p_prev = p_entry->p_prev;
00104 }
00105 
00106 /*
00107  *  キューの次エントリの取出し
00108  *
00109  *  p_queueの次エントリをキューから削除し,削除したエントリを返す.
00110  *  p_queueにキューヘッダを指定した場合には,キューの先頭のエントリを
00111  *  取り出すことになる.p_queueに空のキューを指定して呼び出してはなら
00112  *  ない.
00113  */
00114 Inline QUEUE *
00115 queue_delete_next(QUEUE *p_queue)
00116 {
00117     QUEUE   *p_entry;
00118 
00119     assert(p_queue->p_next != p_queue);
00120     p_entry = p_queue->p_next;
00121     p_queue->p_next = p_entry->p_next;
00122     p_entry->p_next->p_prev = p_queue;
00123     return(p_entry);
00124 }
00125 
00126 /*
00127  *  キューが空かどうかのチェック
00128  *
00129  *  p_queueにはキューヘッダを指定する.
00130  */
00131 Inline bool_t
00132 queue_empty(QUEUE *p_queue)
00133 {
00134     if (p_queue->p_next == p_queue) {
00135         assert(p_queue->p_prev == p_queue);
00136         return(true);
00137     }
00138     return(false);
00139 }
00140 
00141 #ifdef __cplusplus
00142 }
00143 #endif
00144 
00145 #endif /* TOPPERS_QUEUE_H */

Copyright © 2008 by Kijineko Inc.

ホームページ制作