Mercurial > hg > Gears > GearsAgda
annotate src/parallel_execution/queue.c @ 167:34562e63981f
create queue.c
author | mir3636 |
---|---|
date | Mon, 21 Nov 2016 18:03:43 +0900 |
parents | src/parallel_execution/stack.c@473b7d990a1f |
children | fa7419e2c67c |
rev | line source |
---|---|
135 | 1 #include "context.h" |
167 | 2 #include "queue.h" |
131
a4507906938c
Fix compile error but not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
130
diff
changeset
|
3 #include "origin_cs.h" |
138 | 4 #include <stdio.h> |
86 | 5 |
167 | 6 union Data* createSingleLinkedQueue(struct Context* context) { |
7 struct Queue* queue = &ALLOCATE(context, Queue)->queue; | |
8 struct SingleLinkedQueue* singleLinkedQueue = &ALLOCATE(context, SingleLinkedQueue)->singleLinkedQueue; | |
9 queue->queue = (union Data*)singleLinkedQueue; | |
10 singleLinkedQueue->top = NULL; | |
11 queue->get = C_getSingleLinkedQueue; | |
12 queue->take = C_takeSingleLinkedQueue; | |
13 queue->put = C_putSingleLinkedQueue; | |
14 queue->isEmpty = C_isEmptySingleLinkedQueue; | |
15 queue->clear = C_clearSingleLinkedQueue; | |
16 return (union Data*)(queue); | |
86 | 17 } |
18 | |
167 | 19 void printQueue1(union Data* data) { |
138 | 20 struct Node* node = &data->element.data->node; |
21 if (node == NULL) { | |
22 printf("NULL"); | |
23 } else { | |
24 printf("key = %d ,", node->key); | |
167 | 25 printQueue1((union Data*)data->element.next); |
138 | 26 } |
27 } | |
28 | |
167 | 29 void printQueue(union Data* data) { |
30 printQueue1(data); | |
138 | 31 printf("\n"); |
32 } | |
33 | |
167 | 34 __code clearSingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue,enum Code next) { |
35 queue->top = NULL; | |
145
cc071cf1ba85
add stack clear interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
144
diff
changeset
|
36 goto meta(context, next); |
cc071cf1ba85
add stack clear interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
144
diff
changeset
|
37 } |
cc071cf1ba85
add stack clear interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
144
diff
changeset
|
38 |
167 | 39 __code clearSingleLinkedQueue_stub(struct Context* context) { |
40 goto clearSingleLinkedQueue(context, (struct SingleLinkedQueue *)context->data[D_Queue]->queue.queue->queue.queue, context->data[D_Queue]->queue.next); | |
145
cc071cf1ba85
add stack clear interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
144
diff
changeset
|
41 } |
cc071cf1ba85
add stack clear interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
144
diff
changeset
|
42 |
167 | 43 __code putSingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue, struct Element* element, union Data* data, enum Code next) { |
44 element->next = NULL; | |
130 | 45 element->data = data; |
167 | 46 if (queue->last) { |
47 Element* last = queue->last; | |
48 last->next = element; | |
49 queue->last = element; | |
50 } else { | |
51 queue->top = element; | |
52 queue->last = element; | |
53 } | |
130 | 54 goto meta(context, next); |
86 | 55 } |
56 | |
167 | 57 __code putSingleLinkedQueue_stub(struct Context* context) { |
135 | 58 struct Element* element = &ALLOCATE(context, Element)->element; |
167 | 59 goto putSingleLinkedQueue(context, |
60 (struct SingleLinkedQueue *)context->data[D_Queue]->queue.queue->queue.queue, | |
131
a4507906938c
Fix compile error but not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
130
diff
changeset
|
61 element, |
167 | 62 context->data[D_Queue]->queue.data, |
63 context->data[D_Queue]->queue.next); | |
131
a4507906938c
Fix compile error but not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
130
diff
changeset
|
64 } |
a4507906938c
Fix compile error but not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
130
diff
changeset
|
65 |
167 | 66 __code takeSingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue, union Data** data, enum Code next) { |
67 if (queue->top) { | |
68 *data = queue->top->data; | |
69 queue->top = queue->top->next; | |
136 | 70 } else { |
71 *data = NULL; | |
72 } | |
130 | 73 goto meta(context, next); |
86 | 74 } |
75 | |
167 | 76 __code takeSingleLinkedQueue_stub(struct Context* context) { |
77 goto takeSingleLinkedQueue(context, | |
78 (struct SingleLinkedQueue *)context->data[D_Queue]->queue.queue->queue.queue, | |
79 &context->data[D_Queue]->queue.data, | |
80 context->data[D_Queue]->queue.next); | |
133 | 81 } |
82 | |
167 | 83 __code isEmptySingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue, enum Code next,enum Code whenEmpty) { |
84 if (queue->top) | |
133 | 85 goto meta(context, next); |
86 else | |
87 goto meta(context, whenEmpty); | |
88 } | |
89 | |
167 | 90 __code isEmptySingleLinkedQueue_stub(struct Context* context) { |
91 goto isEmptySingleLinkedQueue(context, | |
92 (struct SingleLinkedQueue *)context->data[D_Queue]->queue.queue->queue.queue, | |
93 context->data[D_Queue]->queue.next, | |
94 context->data[D_Queue]->queue.whenEmpty); | |
132 | 95 } |
96 |