void compute_metrics(const Ty* X1, const Ty* X2, Ty* M, int d, int n1, int n2, int opcode, const mxArray *prhs[]) { switch (opcode) { case 1: cityblock(X1, X2, M, d, n1, n2); break; case 2: mindiff(X1, X2, M, d, n1, n2); break; case 3: maxdiff(X1, X2, M, d, n1, n2); break; case 4: minkowski(X1, X2, M, d, n1, n2, *((const Ty*)mxGetData(prhs[3]))); break; case 5: intersect(X1, X2, M, d, n1, n2); break; case 6: chisq(X1, X2, M, d, n1, n2); break; case 7: kldiv(X1, X2, M, d, n1, n2); break; case 8: jeffrey(X1, X2, M, d, n1, n2); break; } }
struct cidr * range2cidrlist(struct cidr *list, int *cli, int *cls, u_int32_t start, u_int32_t end) { u_int8_t maxsize, diff; struct cidr *tmp; while (end >= start) { maxsize = maxblock(start, 32); diff = maxdiff(start, end); maxsize = MAX(maxsize, diff); if (*cls <= *cli + 1) { /* one extra for terminator */ tmp = realloc(list, (*cls + 32) * sizeof(struct cidr)); if (tmp == NULL) errx(1, "malloc failed"); list = tmp; *cls += 32; } list[*cli].addr = start; list[*cli].bits = maxsize; (*cli)++; start = start + (1 << (32 - maxsize)); } return (list); }
struct cidr * range2cidrlist(u_int32_t start, u_int32_t end) { struct cidr *list = NULL; size_t cs = 0, cu = 0; u_int8_t maxsize, diff; struct cidr *tmp; while (end >= start) { maxsize = maxblock(start, 32); diff = maxdiff(start, end); maxsize = MAX(maxsize, diff); if (cs <= cu + 1) { /* one extra for terminator */ tmp = realloc(list, (cs + 32) * sizeof(struct cidr)); if (tmp == NULL) errx(1, "malloc failed"); list = tmp; cs += 32; } list[cu].addr = start; list[cu].bits = maxsize; cu++; list[cu].addr = 0; list[cu].bits = 0; start = start + (1 << (32 - maxsize)); } return (list); }
int main(void) { int test[] = {12,-356,18,9,-10, 35}; int size = 6; printf("max diff: %d\n", maxdiff(test,size)); return 0; }