Mercurial > hg > CbC > CbC_gcc
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 |