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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
135
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
1 #include "context.h"
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
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
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
4 #include <stdio.h>
86
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
6 union Data* createSingleLinkedQueue(struct Context* context) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
7 struct Queue* queue = &ALLOCATE(context, Queue)->queue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
8 struct SingleLinkedQueue* singleLinkedQueue = &ALLOCATE(context, SingleLinkedQueue)->singleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
9 queue->queue = (union Data*)singleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
10 singleLinkedQueue->top = NULL;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
11 queue->get = C_getSingleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
12 queue->take = C_takeSingleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
13 queue->put = C_putSingleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
14 queue->isEmpty = C_isEmptySingleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
15 queue->clear = C_clearSingleLinkedQueue;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
16 return (union Data*)(queue);
86
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 }
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
19 void printQueue1(union Data* data) {
138
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
20 struct Node* node = &data->element.data->node;
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
21 if (node == NULL) {
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
22 printf("NULL");
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
23 } else {
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
24 printf("key = %d ,", node->key);
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
25 printQueue1((union Data*)data->element.next);
138
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
26 }
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
27 }
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
28
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
29 void printQueue(union Data* data) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
30 printQueue1(data);
138
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
31 printf("\n");
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
32 }
04a2f486a30d insert works but is not balanced
kono
parents: 136
diff changeset
33
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
34 __code clearSingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue,enum Code next) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
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
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
39 __code clearSingleLinkedQueue_stub(struct Context* context) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
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
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
43 __code putSingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue, struct Element* element, union Data* data, enum Code next) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
44 element->next = NULL;
130
2bb5e4f0fd35 Stackinterface
ikkun
parents: 113
diff changeset
45 element->data = data;
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
46 if (queue->last) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
47 Element* last = queue->last;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
48 last->next = element;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
49 queue->last = element;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
50 } else {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
51 queue->top = element;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
52 queue->last = element;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
53 }
130
2bb5e4f0fd35 Stackinterface
ikkun
parents: 113
diff changeset
54 goto meta(context, next);
86
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 }
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
57 __code putSingleLinkedQueue_stub(struct Context* context) {
135
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
58 struct Element* element = &ALLOCATE(context, Element)->element;
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
59 goto putSingleLinkedQueue(context,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
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
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
62 context->data[D_Queue]->queue.data,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
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
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
66 __code takeSingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue, union Data** data, enum Code next) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
67 if (queue->top) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
68 *data = queue->top->data;
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
69 queue->top = queue->top->next;
136
a747dc9d4da6 stack refactering no compile error
mir3636
parents: 135
diff changeset
70 } else {
a747dc9d4da6 stack refactering no compile error
mir3636
parents: 135
diff changeset
71 *data = NULL;
a747dc9d4da6 stack refactering no compile error
mir3636
parents: 135
diff changeset
72 }
130
2bb5e4f0fd35 Stackinterface
ikkun
parents: 113
diff changeset
73 goto meta(context, next);
86
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 }
e06e1a9e569e create worker
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
76 __code takeSingleLinkedQueue_stub(struct Context* context) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
77 goto takeSingleLinkedQueue(context,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
78 (struct SingleLinkedQueue *)context->data[D_Queue]->queue.queue->queue.queue,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
79 &context->data[D_Queue]->queue.data,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
80 context->data[D_Queue]->queue.next);
133
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
81 }
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
82
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
83 __code isEmptySingleLinkedQueue(struct Context* context, struct SingleLinkedQueue* queue, enum Code next,enum Code whenEmpty) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
84 if (queue->top)
133
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
85 goto meta(context, next);
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
86 else
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
87 goto meta(context, whenEmpty);
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
88 }
568730b1239e call stack interface in rb_tree
mir3636
parents: 132
diff changeset
89
167
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
90 __code isEmptySingleLinkedQueue_stub(struct Context* context) {
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
91 goto isEmptySingleLinkedQueue(context,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
92 (struct SingleLinkedQueue *)context->data[D_Queue]->queue.queue->queue.queue,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
93 context->data[D_Queue]->queue.next,
34562e63981f create queue.c
mir3636
parents: 148
diff changeset
94 context->data[D_Queue]->queue.whenEmpty);
132
7c309e1aea73 Code Gears stack api
one
parents: 131
diff changeset
95 }
7c309e1aea73 Code Gears stack api
one
parents: 131
diff changeset
96