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.