9 #define C_defs(name,type)\ 10 void *new_##name(int s)\ 13 r=malloc(sizeof(*r));\ 16 r->sh = (shape*) malloc(sizeof(*r->sh));\ 17 allocate_shape(r->sh,1,s);\ 18 r->list=palloc(*r->sh,sizeof(type));\ 21 void delete_##name(name *x) \ 27 deallocate_shape(x->sh);\ 32 type get_##type(name *x,int i) {return [i](*x->list);}\ 33 void put_##type(name *x,int i,type y) {[i](*x->list)=y;}\ 34 void copy_##type(name *x,name *y) \ 36 if (x->size==0) return;\ 37 with (*x->sh) *x->list=*y->list;\ 40 void get_##type##_array(name* r,name* x,iarray* i)\ 42 if (r->size==0) return;\ 44 *r->list = [*i->list](*x->list);\ 46 void put_##type##_array(name* x,iarray* i,name* y)\ 48 if (y->size==0) return;\ 50 [*i->list](*x->list) = *y->list;\ 52 void broadcast_##type(name* x,type y)\ 54 if (x->size==0) return;\ 58 void name##_plus(name* r,name* x,name* y)\ 60 if (r->size==0) return;\ 62 *r->list = *x->list + *y->list;\ 64 void name##_minus(name* r,name* x,name* y)\ 66 if (r->size==0) return;\ 68 *r->list = *x->list - *y->list;\ 70 void name##_mul(name* r,name* x,name* y)\ 72 if (r->size==0) return;\ 74 *r->list = *x->list * *y->list;\ 76 void name##_div(name* r,name* x,name* y)\ 78 if (r->size==0) return;\ 80 *r->list = *x->list / *y->list;\ 82 void name##_cat(name* r,name* x,name* y)\ 87 [pcoord(0)]*r->list = *x->list;\ 89 if (y->size==0) return;\ 91 [pcoord(0)+x->size]*r->list = *y->list;\ 93 void name##_lt(iarray *r, name *x,name*y)\ 95 if (r->size==0) return;\ 97 *r->list = *x->list < *y->list;\ 99 void name##_le(iarray *r, name *x, name *y)\ 101 if (r->size==0) return;\ 103 *r->list = *x->list <= *y->list;\ 105 void name##_gt(iarray *r, name *x,name *y)\ 107 if (r->size==0) return;\ 109 *r->list = *x->list > *y->list;\ 111 void name##_ge(iarray *r, name *x,name *y)\ 113 if (r->size==0) return;\ 115 *r->list = *x->list >= *y->list;\ 117 void name##_eq(iarray *r,name *x, name *y)\ 119 if (r->size==0) return;\ 121 *r->list = *x->list == *y->list;\ 123 void name##_ne(iarray *r, name *x, name *y)\ 125 if (r->size==0) return;\ 127 *r->list = *x->list != *y->list;\