source: atk2-sc3_fl850f1l/include/queue.h@ 165

Last change on this file since 165 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 4.8 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2006-2015 by Center for Embedded Computing Systems
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
11 * Copyright (C) 2011-2013 by Spansion LLC, USA
12 * Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
13 * Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
14 * Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
15 * Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
16 * Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
17 * Copyright (C) 2011-2015 by Witz Corporation
18 * Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
19 * Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
20 * Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
21 *
22 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
23 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
24 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
25 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
26 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
27 * スコード中に含まれていること.
28 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
29 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
30 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
31 * の無保証規定を掲載すること.
32 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
33 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
34 * と.
35 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
43 * 免責すること.
44 *
45 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
46 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
47 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
48 * 用する者に対して,AUTOSARパートナーになることを求めている.
49 *
50 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
51 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
52 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
53 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
54 * の責任を負わない.
55 *
56 * $Id: queue.h 187 2015-06-25 03:39:04Z t_ishikawa $
57 */
58
59/*
60 * キュー操作ライブラリ
61 *
62 * このキュー操作ライブラリでは,キューヘッダを含むリング構造のダブル
63 * リンクキューを扱う.具体的には,キューヘッダの次エントリはキューの
64 * 先頭のエントリ,前エントリはキューの末尾のエントリとする.また,キ
65 * ューの先頭のエントリの前エントリと,キューの末尾のエントリの次エン
66 * トリは,キューヘッダとする.空のキューは,次エントリ,前エントリと
67 * も自分自身を指すキューヘッダであらわす
68 */
69
70#ifndef TOPPERS_QUEUE_H
71#define TOPPERS_QUEUE_H
72
73/*
74 * キューのデータ構造の定義
75 */
76typedef struct queue {
77 struct queue *p_next; /* 次エントリへのポインタ */
78 struct queue *p_prev; /* 前エントリへのポインタ */
79} QUEUE;
80
81/*
82 * キューの初期化
83 */
84LOCAL_INLINE void
85queue_initialize(QUEUE *p_queue)
86{
87 p_queue->p_prev = p_queue;
88 p_queue->p_next = p_queue;
89}
90
91/*
92 * キューの前エントリへの挿入
93 */
94LOCAL_INLINE void
95queue_insert_prev(QUEUE *p_queue, QUEUE *p_entry)
96{
97 p_entry->p_prev = p_queue->p_prev;
98 p_entry->p_next = p_queue;
99 p_queue->p_prev->p_next = p_entry;
100 p_queue->p_prev = p_entry;
101}
102
103/*
104 * キューの後エントリへの挿入
105 */
106LOCAL_INLINE void
107queue_insert_next(QUEUE *p_queue, QUEUE *p_entry)
108{
109 p_entry->p_next = p_queue->p_next;
110 p_entry->p_prev = p_queue;
111 p_queue->p_next->p_prev = p_entry;
112 p_queue->p_next = p_entry;
113}
114
115/*
116 * エントリの削除
117 */
118LOCAL_INLINE void
119queue_delete(QUEUE *p_entry)
120{
121 p_entry->p_prev->p_next = p_entry->p_next;
122 p_entry->p_next->p_prev = p_entry->p_prev;
123}
124
125/*
126 * キューの次エントリの取出し
127 */
128LOCAL_INLINE QUEUE *
129queue_delete_next(QUEUE *p_queue)
130{
131 QUEUE *p_entry;
132
133 ASSERT(p_queue->p_next != p_queue);
134 p_entry = p_queue->p_next;
135 p_queue->p_next = p_entry->p_next;
136 p_entry->p_next->p_prev = p_queue;
137 return(p_entry);
138}
139
140/*
141 * キューが空かどうかのチェック
142 */
143LOCAL_INLINE boolean
144queue_empty(const QUEUE *p_queue)
145{
146 return(p_queue->p_next == p_queue);
147}
148
149#endif /* TOPPERS_QUEUE_H */
Note: See TracBrowser for help on using the repository browser.