/* Do dot product of two vectors, abstract version */ void dotproduct1(vec_ptr u, vec_ptr v, data_t *dest) { long int i; *dest = 1.0; for (i = 0; i < vec_length(u); i++) { data_t val1; data_t val2; get_vec_element(u, i, &val1); get_vec_element(v, i, &val2); *dest = *dest + val1 * val2; } }
/* Move call to vec_length out of loop */ void combine2(vec_ptr v, data_t *dest) { long int i; long int length = vec_length(v); *dest = IDENT; for (i = 0; i < length; i++) { data_t val; get_vec_element(v, i, &val); *dest = *dest OP val; } }
/* Implementation with maximum use of data abstraction */ void combine1(vec_ptr v, data_t *dest) { long int i; *dest = IDENT; for (i = 0; i < vec_length(v); i++) { data_t val; get_vec_element(v, i, &val); /* $begin combineline */ *dest = *dest OP val; /* $end combineline */ } }