Example #1
0
void user_manager::fini()
{
    release_vector(m_users);
    m_net_cut_user.clear();
    m_online_user.clear();
}
Example #2
0
/**
 * 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;
}