source: UsbWattMeter/trunk/asp_dcre/include/queue.h@ 164

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

TOPPERS/ECNLサンプルアプリ「USB充電器電力計」を追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 5.6 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2006-2011 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
11 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
12 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
13 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
14 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
15 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
16 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
17 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
18ƒƒ“ƒgi—˜—p
19 * ŽÒƒ}ƒjƒ…
20ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
21 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
22 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
23 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
24 * ‚ƁD
25 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
26ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
27ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
28 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
29 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
30 * •ñ‚·‚邱‚ƁD
31 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
32 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
33 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
34 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
35 * –Ɛӂ·‚邱‚ƁD
36 *
37 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
38 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
39 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
40 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
41 * ‚̐ӔC‚𕉂í‚È‚¢D
42 *
43 * @(#) $Id: queue.h 164 2016-03-07 11:33:50Z coas-nagasima $
44 */
45
46/*
47 * ƒLƒ…
48[‘€ìƒ‰ƒCƒuƒ‰ƒŠ
49 *
50 * ‚±‚̃Lƒ…
51[‘€ìƒ‰ƒCƒuƒ‰ƒŠ‚ł́CƒLƒ…
52[ƒwƒbƒ_‚ðŠÜ‚ÞƒŠƒ“ƒO\‘¢‚̃_ƒuƒ‹
53 * ƒŠƒ“ƒNƒLƒ…
54[‚ðˆµ‚¤D‹ï‘Ì“I‚ɂ́CƒLƒ…
55[ƒwƒbƒ_‚ÌŽŸƒGƒ“ƒgƒŠ‚̓Lƒ…
56[‚Ì
57 * æ“ª‚̃Gƒ“ƒgƒŠC‘OƒGƒ“ƒgƒŠ‚̓Lƒ…
58[‚Ì––”ö‚̃Gƒ“ƒgƒŠ‚Æ‚·‚éD‚Ü‚½CƒL
59 * ƒ…
60[‚̐擪‚̃Gƒ“ƒgƒŠ‚Ì‘OƒGƒ“ƒgƒŠ‚ƁCƒLƒ…
61[‚Ì––”ö‚̃Gƒ“ƒgƒŠ‚ÌŽŸƒGƒ“
62 * ƒgƒŠ‚́CƒLƒ…
63[ƒwƒbƒ_‚Æ‚·‚éD‹ó‚̃Lƒ…
64[‚́CŽŸƒGƒ“ƒgƒŠC‘OƒGƒ“ƒgƒŠ‚Æ
65 * ‚àŽ©•ªŽ©g‚ðŽw‚·ƒLƒ…
66[ƒwƒbƒ_‚Å‚ ‚ç‚í‚·D
67 */
68
69#ifndef TOPPERS_QUEUE_H
70#define TOPPERS_QUEUE_H
71
72#ifdef __cplusplus
73extern "C" {
74#endif
75
76/*
77 * ƒLƒ…
78[‚̃f[ƒ^\‘¢‚Ì’è‹`
79 */
80typedef struct queue {
81 struct queue *p_next; /* ŽŸƒGƒ“ƒgƒŠ‚ւ̃|ƒCƒ“ƒ^ */
82 struct queue *p_prev; /* ‘OƒGƒ“ƒgƒŠ‚ւ̃|ƒCƒ“ƒ^ */
83} QUEUE;
84
85/*
86 * ƒLƒ…
87[‚̏‰Šú‰»
88 *
89 * p_queue‚ɂ̓Lƒ…
90[ƒwƒbƒ_‚ðŽw’è‚·‚éD
91 */
92Inline void
93queue_initialize(QUEUE *p_queue)
94{
95 p_queue->p_prev = p_queue;
96 p_queue->p_next = p_queue;
97}
98
99/*
100 * ƒLƒ…
101[‚Ì‘OƒGƒ“ƒgƒŠ‚Ö‚Ì‘}“ü
102 *
103 * p_queue‚Ì‘O‚Ép_entry‚ð‘}“ü‚·‚éDp_queue‚ɃLƒ…
104[ƒwƒbƒ_‚ðŽw’肵‚½ê
105 * ‡‚ɂ́CƒLƒ…
106[‚Ì––”ö‚Ép_entry‚ð‘}“ü‚·‚邱‚Æ‚É‚È‚éD
107 */
108Inline void
109queue_insert_prev(QUEUE *p_queue, QUEUE *p_entry)
110{
111 p_entry->p_prev = p_queue->p_prev;
112 p_entry->p_next = p_queue;
113 p_queue->p_prev->p_next = p_entry;
114 p_queue->p_prev = p_entry;
115}
116
117/*
118 * ƒLƒ…
119[‚ÌŽŸƒGƒ“ƒgƒŠ‚Ö‚Ì‘}“ü
120 *
121 * p_queue‚ÌŽŸ‚Ép_entry‚ð‘}“ü‚·‚éDp_queue‚ɃLƒ…
122[ƒwƒbƒ_‚ðŽw’肵‚½ê
123 * ‡‚ɂ́CƒLƒ…
124[‚̐擪‚Ép_entry‚ð‘}“ü‚·‚邱‚Æ‚É‚È‚éD
125 */
126Inline void
127queue_insert_next(QUEUE *p_queue, QUEUE *p_entry)
128{
129 p_entry->p_prev = p_queue;
130 p_entry->p_next = p_queue->p_next;
131 p_queue->p_next->p_prev = p_entry;
132 p_queue->p_next = p_entry;
133}
134
135/*
136 * ƒGƒ“ƒgƒŠ‚̍폜
137 *
138 * p_entry‚ðƒLƒ…
139[‚©‚çíœ‚·‚éD
140 */
141Inline void
142queue_delete(QUEUE *p_entry)
143{
144 p_entry->p_prev->p_next = p_entry->p_next;
145 p_entry->p_next->p_prev = p_entry->p_prev;
146}
147
148/*
149 * ƒLƒ…
150[‚Ì—ñ‹“
151 *
152 * ˆø”p_top‚ðƒLƒ…
153[‚Æ‚·‚éƒGƒ“ƒgƒŠ‚ðæ“ª‚©‚ç—ñ‹“‚·‚éB
154 * Å‰‚̌ďo‚µ‚ł́Ap_entry‚ÉNULL‚ð“n‚·B•Ô’l‚Íp_top‚ÌŽŸ‚̃Gƒ“ƒgƒŠ(‚‚܂èæ“ª)‚Å‚ ‚éB
155 * ŽŸ‰ñˆÈ~‚Í‘O‰ñ‚É“¾‚½ƒGƒ“ƒgƒŠ‚ðp_entry‚É“n‚·B•Ô’l‚Íp_entry‚ÌŽŸ‚̃Gƒ“ƒgƒŠ‚Æ‚È‚éB
156 * p_entry‚ÌŽŸ‚̃Gƒ“ƒgƒŠ‚ªp_top‚¾‚Á‚½‚Æ‚«ANULL‚ð•Ô’l‚Æ‚µ‚āAƒLƒ…
157[‚̏I’[‚ð‚ ‚ç‚í‚·B
158 * p_top‚ÌNULLƒ`ƒFƒbƒN‚âp_entry‚̑Ó–«ŒŸØ‚͍s‚Á‚Ä‚¢‚È‚¢BŒÄo‚µ‘¤‚̐ӔC‚ōs‚¤‚±‚ƁB
159 * ‚Ü‚½AŒ¾‚¤‚Ü‚Å‚à‚È‚¢‚ªAƒXƒŒƒbƒhƒZ[ƒt‚ɂ͂Ȃ肦‚È‚¢B—ñ‹“ƒ‹[ƒv’†‚Í”r‘¼‚Í
160 * ŒÄo‚µ‘¤‚̐ӔC‚ōs‚¤‚±‚ƁB
161 */
162Inline QUEUE *
163queue_enumerate(QUEUE *p_top, QUEUE *p_entry)
164{
165 QUEUE *p_result;
166 if (p_entry == NULL) {
167 p_result = p_top->p_next;
168 } else {
169 p_result = p_entry->p_next;
170 }
171 if (p_result == p_top) {
172 return NULL;
173 }
174 return p_result;
175}
176
177/*
178 * ƒLƒ…
179[‚ÌŽŸƒGƒ“ƒgƒŠ‚ÌŽæo‚µ
180 *
181 * p_queue‚ÌŽŸƒGƒ“ƒgƒŠ‚ðƒLƒ…
182[‚©‚çíœ‚µCíœ‚µ‚½ƒGƒ“ƒgƒŠ‚ð•Ô‚·D
183 * p_queue‚ɃLƒ…
184[ƒwƒbƒ_‚ðŽw’肵‚½ê‡‚ɂ́CƒLƒ…
185[‚̐擪‚̃Gƒ“ƒgƒŠ‚ð
186 * Žæ‚èo‚·‚±‚Æ‚É‚È‚éDp_queue‚É‹ó‚̃Lƒ…
187[‚ðŽw’肵‚ČĂяo‚µ‚Ä‚Í‚È‚ç
188 * ‚È‚¢D
189 */
190Inline QUEUE *
191queue_delete_next(QUEUE *p_queue)
192{
193 QUEUE *p_entry;
194
195 assert(p_queue->p_next != p_queue);
196 p_entry = p_queue->p_next;
197 p_queue->p_next = p_entry->p_next;
198 p_entry->p_next->p_prev = p_queue;
199 return(p_entry);
200}
201
202/*
203 * ƒLƒ…
204[‚ÌŽŸƒGƒ“ƒgƒŠ‚̃|ƒCƒ“ƒ^‚ðŽæ“¾
205 *
206 * p_queue ‚ÌŽŸƒGƒ“ƒgƒŠ‚ð•Ô‚·Dp_queue ‚ɃLƒ…
207[ƒwƒbƒ_‚ðŽw’肵‚½ê‡‚ɂ́C
208 * ƒLƒ…
209[‚̐擪‚̃Gƒ“ƒgƒŠ‚ðŽæ‚èo‚·‚±‚Æ‚É‚È‚éDp_queue ‚É‹ó‚̃Lƒ…
210[‚ð
211 * Žw’肵‚ČĂяo‚µ‚Ä‚Í‚È‚ç‚È‚¢D
212 */
213Inline QUEUE *
214queue_peek_next(QUEUE *p_queue)
215{
216 assert(p_queue->p_next != p_queue);
217
218 return(p_queue->p_next);
219}
220
221/*
222 * ƒLƒ…
223[‚ª‹ó‚©‚Ç‚¤‚©‚̃`ƒFƒbƒN
224 *
225 * p_queue‚ɂ̓Lƒ…
226[ƒwƒbƒ_‚ðŽw’è‚·‚éD
227 */
228Inline bool_t
229queue_empty(QUEUE *p_queue)
230{
231 if (p_queue->p_next == p_queue) {
232 assert(p_queue->p_prev == p_queue);
233 return(true);
234 }
235 return(false);
236}
237
238#ifdef __cplusplus
239}
240#endif
241
242#endif /* TOPPERS_QUEUE_H */
Note: See TracBrowser for help on using the repository browser.