Beispiel #1
0
static int htableEq(const bor_list_t *k1, const bor_list_t *k2, void *ud)
{
    state_t *s1 = BOR_LIST_ENTRY(k1, state_t, htable);
    state_t *s2 = BOR_LIST_ENTRY(k2, state_t, htable);
    plan_ma_private_state_t *aps = (plan_ma_private_state_t *)ud;

    return memcmp(s1->state, s2->state, aps->state_size) == 0;
}
Beispiel #2
0
bor_fibo_node_t *borFiboExtractMin(bor_fibo_t *f)
{
    bor_list_t *item;
    bor_fibo_node_t *min, *n;

    if (!f->min)
        return NULL;

    min = f->min;

    // put all children to root list
    while (!borListEmpty(&min->children)){
        item = borListNext(&min->children);
        n    = BOR_LIST_ENTRY(item, bor_fibo_node_t, list);

        borListDel(item);
        borListAppend(&f->root, item);
        n->parent = NULL;
    }

    // remove minimum from root list
    borListDel(&min->list);

    __borFiboConsolidate(f);

    return min;
}
Beispiel #3
0
static bor_real_t dist2(void *item1, bor_list_t *item2,
                        void *data)
{
    bor_vec2_t *p = (bor_vec2_t *)item1;
    el_t *el = BOR_LIST_ENTRY(item2, el_t, list);

    return borVec2Dist(p, &el->w);
}
Beispiel #4
0
void planMAMsgTracePathAppendPath(plan_ma_msg_t *msg,
                                  const plan_path_t *path)
{
    bor_list_t *item;
    const plan_path_op_t *p;
    plan_ma_msg_op_t *op;

    for (item = path->prev; item != path; item = item->prev){
        p = BOR_LIST_ENTRY(item, plan_path_op_t, path);

        op = planMAMsgAddOp(msg);
        planMAMsgOpSetOpId(op, p->global_id);
        planMAMsgOpSetCost(op, p->cost);
        planMAMsgOpSetOwner(op, p->owner);
        if (p->name)
            planMAMsgOpSetName(op, p->name);
    }
}
Beispiel #5
0
int planMAPrivateStateInsert(plan_ma_private_state_t *aps, int *state_ids)
{
    state_t *state;
    bor_list_t *hfound;
    int *dst;
    int i, j;

    state = borExtArrGet(aps->states, aps->num_states);
    dst = state->state;
    for (i = 0, j = 0; i < aps->num_agents; ++i){
        if (i != aps->agent_id)
            dst[j++] = state_ids[i];
    }

    hfound = borHTableInsertUnique(aps->htable, &state->htable);
    if (hfound == NULL){
        aps->num_states++;
        return state->id;
    }else{
        state = BOR_LIST_ENTRY(hfound, state_t, htable);
        return state->id;
    }
}
Beispiel #6
0
static bor_htable_key_t htableHash(const bor_list_t *key, void *ud)
{
    state_t *state = BOR_LIST_ENTRY(key, state_t, htable);
    plan_ma_private_state_t *aps = (plan_ma_private_state_t *)ud;
    return borCityHash_64(state->state, aps->state_size);
}
Beispiel #7
0
static int eq(const bor_list_t *key1, const bor_list_t *key2, void *ud)
{
    el_t *el1 = BOR_LIST_ENTRY(key1, el_t, htable);
    el_t *el2 = BOR_LIST_ENTRY(key2, el_t, htable);
    return el1->val == el2->val;
}
Beispiel #8
0
static bor_htable_key_t hash(const bor_list_t *key, void *ud)
{
    el_t *el = BOR_LIST_ENTRY(key, el_t, htable);
    return borHashJenkins(&el->val, 1, 0);
}