void user_manager::fini() { release_vector(m_users); m_net_cut_user.clear(); m_online_user.clear(); }
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */ int* diffWaysToCompute(char* input, int* returnSize) { int operators[1024], operands[1024], n, i, j, k, r; char *tmp, *next; struct vector *left, *right, *prod, *tmp_v, **table; int *ret; // parse input to operators && operands for (tmp = input, n = 0; *tmp != '\0';) { operands[n++] = strtol(tmp, &next, 10); if (*next == '\0') break; operators[n - 1] = *next; tmp = next + 1; } // verify the parsing /* for (i = 0; i < n; i++) { printf("%d%c", operators[i], i < n -1 ? operands[i] : '\n'); } */ // alloc table table = (struct vector **)malloc(sizeof(struct vector*) * n * n); memset(table, 0, sizeof(struct vector *) * n * n); for (i = 0; i < n; i++) { for (j = 0; j + i < n; j++) { k = i * n + j; //printf("i = %d, j = %d, k = %d\n", i, j, k); if (i == 0) { table[k] = create_vector(1); table[k]->data[0] = operands[j]; } else { table[k] = create_vector(0); for (r = 0; r < i; r++) { left = table[r * n + j]; right = table[(i - 1 - r) * n + j + r + 1]; prod = mul(left, right, operators[j + r]); tmp_v = concat(table[k], prod); release_vector(table[k]); table[k] = tmp_v; //printf("r = %d\n", r); //printf("left = "); print_vector(left); //printf("right = "); print_vector(right); //printf("prod = "); print_vector(prod); release_vector(prod); } } //printf("table[k] = ");print_vector(table[k]); } } *returnSize = table[(n - 1) * n]->length; ret = (int *)malloc(sizeof(int) * (*returnSize)); memcpy(ret, table[(n - 1) * n]->data, sizeof(int) * (*returnSize)); for (i = 0; i < n * n; i++) { if (table[i]) release_vector(table[i]); } free(table); return ret; }