GadgetSeed  0.9.6
queue.c
[詳解]
1 /** @file
2  @brief キュー操作
3 
4  @date 2011.03.17
5  @author Takashi SHUDO
6 */
7 
8 #include "queue.h"
9 
10 void init_queue(struct st_queue *queue)
11 {
12  queue->next = queue;
13  queue->prev = queue;
14 }
15 
16 /* NOT API
17  @brief 末尾にキューを追加する
18 */
19 void add_queue(struct st_queue *queue, struct st_queue *entry)
20 {
21  entry->prev = queue->prev;
22  entry->next = queue;
23  queue->prev->next = entry;
24  queue->prev = entry;
25 }
26 
27 /* NOT API
28  @brief 先頭にキューを挿入する
29 */
30 void insert_queue(struct st_queue *queue, struct st_queue *entry)
31 {
32  entry->prev = queue;
33  entry->next = queue->next;
34  queue->next->prev = entry;
35  queue->next = entry;
36 }
37 
38 /* NOT API
39  @brief キューを削除する
40 */
41 void del_queue(struct st_queue *entry)
42 {
43  entry->prev->next = entry->next;
44  entry->next->prev = entry->prev;
45 
46  init_queue(entry);
47 }
48 
49 /* NOT API
50  @brief 先頭キューを削除し、戻り値として返す
51 */
52 struct st_queue *del_next_queue(struct st_queue *queue)
53 {
54  struct st_queue *entry = 0;
55 
56  if(queue->next == queue) {
57  return entry;
58  }
59  entry = queue->next;
60 
61  queue->next = entry->next;
62  entry->next->prev = queue;
63 
64  return entry;
65 }
66 
67 /* NOT API
68  @brief 先頭キューを末尾に移動する
69 */
70 void rotate_queue(struct st_queue *queue)
71 {
72  if(queue->next != queue) {
73  add_queue(queue, del_next_queue(queue));
74  }
75 }
76 
77 /* NOT API
78  @brief キューが空なら0を返す
79 */
80 int check_queue(struct st_queue *queue)
81 {
82  if(queue->next == queue) {
83  return 0;
84  }
85 
86  return 1;
87 }
キュー構造
Definition: queue.h:13
タスクキュー操作