annotate src/parallel_execution/SingleLinkedQueue.cbc @ 382:f1d111e293c4

Enable Timer for bitonicSort
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Mon, 24 Jul 2017 20:05:08 +0900
parents 2c2e4e597eb0
children 394e38952c80
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
266
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
1 #include "../context.h"
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
2 #include <stdio.h>
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
3
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
4 Queue* createSingleLinkedQueue(struct Context* context) {
280
2c2e4e597eb0 generate no compile errors
mir3636
parents: 272
diff changeset
5 struct Queue* queue = new Queue();
266
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
6 struct SingleLinkedQueue* singleLinkedQueue = new SingleLinkedQueue();
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
7 queue->queue = (union Data*)singleLinkedQueue;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
8 singleLinkedQueue->top = NULL;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
9 singleLinkedQueue->last = NULL;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
10 queue->take = C_takeSingleLinkedQueue;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
11 queue->put = C_putSingleLinkedQueue;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
12 queue->isEmpty = C_isEmptySingleLinkedQueue;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
13 queue->clear = C_clearSingleLinkedQueue;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
14 return queue;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
15 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
16
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
17 void printQueue1(union Data* data) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
18 struct Node* node = &data->Element.data->Node;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
19 if (node == NULL) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
20 printf("NULL");
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
21 } else {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
22 printf("key = %d ,", node->key);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
23 printQueue1((union Data*)data->Element.next);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
24 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
25 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
26
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
27 void printQueue(union Data* data) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
28 printQueue1(data);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
29 printf("\n");
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
30 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
31
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
32 __code clearSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(...)) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
33 queue->top = NULL;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
34 goto next(...);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
35 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
36
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
37 __code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
38 Element* element = new Element();
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
39 element->next = NULL;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
40 element->data = data;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
41 if (queue->last) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
42 Element* last = queue->last;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
43 last->next = element;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
44 queue->last = element;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
45 } else {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
46 queue->top = element;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
47 queue->last = element;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
48 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
49 goto next(...);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
50 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
51
272
mir3636
parents: 266
diff changeset
52 __code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) {
266
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
53 if (queue->top) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
54 data = queue->top->data;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
55 queue->top = queue->top->next;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
56 } else {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
57 data = NULL;
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
58 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
59 goto next(data, ...);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
60 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
61
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
62 __code isEmptySingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(...), __code whenEmpty(...)) {
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
63 if (queue->top)
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
64 goto next(...);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
65 else
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
66 goto whenEmpty(...);
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
67 }
ffcd80cc3a83 create SingleLinkedQueue.cbc
mir3636
parents:
diff changeset
68