comparison CbC-examples/quicksort/quicksort_cbc2.cbc @ 39:9117c3b65bc3

modify quicksort examples.
author kent@zeus.cr.ie.u-ryukyu.ac.jp
date Mon, 25 Jan 2010 16:14:42 +0900
parents 775dfe898662
children
comparison
equal deleted inserted replaced
38:27e6f95b2c21 39:9117c3b65bc3
11 typedef void *stack; 11 typedef void *stack;
12 typedef __code (*RET)(QS_IF, stack); 12 typedef __code (*RET)(QS_IF, stack);
13 typedef struct { 13 typedef struct {
14 int size; 14 int size;
15 QS_IF interface; 15 QS_IF interface;
16 RET code; 16 RET ret;
17 } frame, *framep; 17 } frame, *framep;
18 18
19 typedef __code (*RETTYPE)(void*); 19 typedef __code (*RETTYPE)(void*);
20 typedef struct { 20 typedef struct {
21 RETTYPE ret; 21 RETTYPE ret;
28 28
29 __code returner(stack sp) 29 __code returner(stack sp)
30 { 30 {
31 framep fp = (framep)sp; 31 framep fp = (framep)sp;
32 sp += fp->size; 32 sp += fp->size;
33 goto fp->code(fp->interface, sp); 33 goto fp->ret(fp->interface, sp);
34 } 34 }
35 35
36 __code quicksort_start(QS_IF recvif, stack sp) 36 __code quicksort_start(QS_IF recvif, stack sp)
37 { 37 {
38 int a,b,c,p; 38 int a,b,c,p;
93 recvif.v[e] = tmp; 93 recvif.v[e] = tmp;
94 s++; 94 s++;
95 e--; 95 e--;
96 goto quicksort_divider(recvif, s, e, p, sp); 96 goto quicksort_divider(recvif, s, e, p, sp);
97 } else { 97 } else {
98 assert(e+1==s || s==e); 98 //assert(e+1==s || s==e);
99 goto quicksort_treecall(recvif, s, e, sp); 99 goto quicksort_treecall(recvif, s, e, sp);
100 } 100 }
101 } 101 }
102 /* divide routin end. */ 102 /* divide routin end. */
103 103
107 { 107 {
108 framep fp; 108 framep fp;
109 109
110 /* interface for first quicksort_start this segment directly jump to. */ 110 /* interface for first quicksort_start this segment directly jump to. */
111 fp = (sp-=sizeof(frame)); 111 fp = (sp-=sizeof(frame));
112 fp->code = quicksort_start; 112 fp->ret = quicksort_start;
113 fp->size = sizeof(frame); 113 fp->size = sizeof(frame);
114 fp->interface.v = recvif.v; 114 fp->interface.v = recvif.v;
115 fp->interface.s = e+1; 115 fp->interface.s = e+1;
116 fp->interface.e = recvif.e; 116 fp->interface.e = recvif.e;
117 117
138 finish_if->sp = sp0; 138 finish_if->sp = sp0;
139 139
140 /* interface for quicksort_start. */ 140 /* interface for quicksort_start. */
141 /* frame for quicksort_finish. */ 141 /* frame for quicksort_finish. */
142 fp = (sp -= sizeof(frame)); 142 fp = (sp -= sizeof(frame));
143 fp->code = quicksort_finish; 143 fp->ret = quicksort_finish;
144 fp->size = sizeof(frame); 144 fp->size = sizeof(frame);
145 fp->interface.v = v; 145 fp->interface.v = v;
146 fp->interface.s = s; 146 fp->interface.s = s;
147 fp->interface.e = e; 147 fp->interface.e = e;
148 148