comparison CbC-examples/quicksort/quicksort_cbc.cbc @ 23:775dfe898662

add quicksort version 2.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Wed, 14 Oct 2009 12:12:51 +0900
parents 0eb6cac880f0
children f37d7058d1ce
comparison
equal deleted inserted replaced
22:0eb6cac880f0 23:775dfe898662
21 21
22 __code returner(stack sp) 22 __code returner(stack sp)
23 { 23 {
24 framep fp = (framep)sp; 24 framep fp = (framep)sp;
25 sp += fp->size; 25 sp += fp->size;
26 fp->code(fp->interface, sp); 26 goto fp->code(fp->interface, sp);
27 } 27 }
28 28
29 __code quicksort_start(void *arg, stack sp) 29 __code quicksort_start(void *arg, stack sp)
30 { 30 {
31 struct qs_if *recvif = arg; 31 struct qs_if *recvif = arg;
116 recvif->s = e+1; 116 recvif->s = e+1;
117 goto quicksort_start(outif, sp); 117 goto quicksort_start(outif, sp);
118 } 118 }
119 /* recursive call routine end. */ 119 /* recursive call routine end. */
120 120
121 #define STACK_SIZE 10240
121 int v[100]; 122 int v[100];
122 struct qs_if *outif; 123 struct qs_if *outif;
123 124
124 struct qs { 125 struct qs {
125 __code (*ret)(void*); 126 __code (*ret)(void*);
128 }; 129 };
129 __code 130 __code
130 quicksort(int *v, int s, int e, RET ret, void *arg ) 131 quicksort(int *v, int s, int e, RET ret, void *arg )
131 { 132 {
132 framep fp; 133 framep fp;
133 stack sp = malloc(10240)+10240; 134 stack sp = malloc(STACK_SIZE)+STACK_SIZE;
134 struct qs *finish_if; 135 struct qs *finish_if;
135 136
136 /* interface for quicksort_finish. */ 137 /* interface for quicksort_finish. */
137 finish_if = (sp -= sizeof(*finish_if)); 138 finish_if = (sp -= sizeof(*finish_if));
138 finish_if->ret = ret; 139 finish_if->ret = ret;
139 finish_if->ret_arg = arg; 140 finish_if->ret_arg = arg;
140 finish_if->sp = sp -10240 + sizeof(*finish_if); 141 finish_if->sp = sp -STACK_SIZE + sizeof(*finish_if);
141 142
142 /* interface for quicksort_start. */ 143 /* interface for quicksort_start. */
143 outif = (sp -= sizeof(*outif)); 144 outif = (sp -= sizeof(*outif));
144 outif->v = v; 145 outif->v = v;
145 outif->s = s; 146 outif->s = s;