Example #1
0
static void test_set_insert_ex(CuTest * tc)
{
    const char * strings[] = {
        "aaa", "bbb", "ccc", "ddd"
    };
    struct quicklist *ql = NULL;
    int qi;

    /* insert a string: */
    CuAssertIntEquals(tc, ql_true, ql_set_insert_ex(&ql, (void *)strings[0], cmp_str));
    CuAssertIntEquals(tc, 1, ql_length(ql));

    /* insert a second string: */
    CuAssertIntEquals(tc, ql_true, ql_set_insert_ex(&ql, (void *)strings[1], cmp_str));
    CuAssertIntEquals(tc, 2, ql_length(ql));
    /* same string again, no change: */
    CuAssertIntEquals(tc, ql_false, ql_set_insert_ex(&ql, (void *)strings[1], cmp_str));
    CuAssertIntEquals(tc, 2, ql_length(ql));

    /* a third string */
    CuAssertIntEquals(tc, ql_true, ql_set_insert_ex(&ql, (void *)strings[2], cmp_str));
    CuAssertIntEquals(tc, 3, ql_length(ql));

    /* check that they are alphabetically ordered: */
    for (qi = 0; qi != 3; ++qi) {
        CuAssertPtrEquals(tc, (void *)strings[qi], ql_get(ql, qi));
    }

    CuAssertIntEquals(tc, 1, ql_set_find_ex(&ql, &qi, (void *)strings[2], cmp_str));
    CuAssertIntEquals(tc, 2, qi);
    ql_free(ql);
}
void add_donation(faction * f1, faction * f2, int amount, region * r)
{
    transfer tr, *tf;
    quicklist *ql = transfers;
    int qi = 0;

    tr.r = r;
    tr.f1 = f1;
    tr.f2 = f2;
    tr.amount = amount;
    if (ql_set_find_ex(&ql, &qi, &tr, cmp_transfer)) {
        tf = (transfer *)ql_get(ql, qi);
        tf->amount += amount;
    }
    else {
        tf = malloc(sizeof(transfer));
        memcpy(tf, &tr, sizeof(transfer));
    }
    ql_set_insert_ex(&transfers, tf, cmp_transfer);
}