source: uKadecot/trunk/ssp/include/queue.h@ 108

Last change on this file since 108 was 108, checked in by coas-nagasima, 9 years ago

MIMEプロパティの変更

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr; charset=SHIFT_JIS
File size: 2.9 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2011 by Meika Sugimoto
6 *
7 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
9 * 再配布(以下,利用と呼ぶ)することを無償で許諾する.
10 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
11 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース
12 * コード中に含まれていること.
13 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
14 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
15 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
16 * 証規定を掲載すること.
17 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
18 * できない形で再配布する場合には,次のいずれかの条件を満たすこと.
19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
20 * 権表示,この利用条件および下記の無保証規定を掲載すること.
21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
22 * 告すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
24 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
25 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
26 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 *
28 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
29 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
30 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
31 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負
32 * わない.
33 *
34 */
35
36/*
37 * キュー操作ヘッダ
38 *
39 * SSPカーネルではメモリ節約のためにインデックスを使用したキューを用いる
40 */
41
42#ifndef TOPPERS_QUEUE_H
43#define TOPPERS_QUEUE_H
44
45/* キューのインデックス */
46typedef uint8_t QUEIDX;
47
48/* キュー構造体 */
49typedef struct
50{
51 QUEIDX next;
52 QUEIDX prev;
53} QUEUE;
54
55
56/* キューヘッダの初期化 */
57Inline void
58queue_initialize(QUEUE *queue , QUEIDX queue_null)
59{
60 queue->next = queue->prev = queue_null;
61}
62
63/* 指定した要素の前に新たな要素を追加 */
64Inline void
65queue_insert_prev(QUEUE *top , QUEIDX queue , QUEIDX entry)
66{
67 top[entry].prev = top[queue].prev;
68 top[entry].next = queue;
69 top[top[queue].prev].next = entry;
70 top[queue].prev = entry;
71}
72
73
74/* 指定したキューの次の要素を削除し,そのインデックスを返す */
75Inline QUEIDX
76queue_delete_next(QUEUE *top , QUEIDX queue)
77{
78 top[top[queue].next].prev = top[queue].prev;
79 top[top[queue].prev].next = top[queue].next;
80
81 return top[queue].next;
82}
83
84
85/*
86 * キューが空かどうかのテスト
87 *
88 * queueにはキューヘッダを指定すること
89 */
90Inline bool_t
91queue_empty(QUEUE *queue , QUEIDX queue_null)
92{
93 bool_t empty;
94
95 if(queue->next == queue_null)
96 {
97 empty = true;
98 }
99 else
100 {
101 empty = false;
102 }
103
104 return empty;
105}
106
107#endif /* TOPPERS_QUEUE_H */
Note: See TracBrowser for help on using the repository browser.