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; }
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; }
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); }
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); } }
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; } }
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); }
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; }
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); }