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 void el6New(el6_t *ns, size_t len, bor_list_t *head) { size_t i, j; borListInit(head); for (i = 0; i < len; i++){ for (j = 0; j < 6; j++){ borVecSet(ns[i].v, j, borRand(&r, -10., 10.)); } borGUGElInit(&ns[i].c, ns[i].v); borListAppend(head, &ns[i].list); } }
static void elNew(el_t *ns, size_t len, bor_list_t *head) { size_t i; bor_real_t x, y; borListInit(head); for (i = 0; i < len; i++){ x = borRand(&r, -10., 10.); y = borRand(&r, -10., 10.); borVec2Set(&ns[i].v, x, y); borGUGElInit(&ns[i].c, (const bor_vec_t *)&ns[i].v); borListAppend(head, &ns[i].list); } }
static void _nnAddRm(uint8_t type, bor_nn_params_t *params) { bor_rand_mt_t *rand; bor_nn_t *nn; static bor_list_t els_list; static int els_len = ADD_ELS_LEN; static el_t els[ADD_ELS_LEN]; int i, j; rand = borRandMTNewAuto(); params->type = type; nn = borNNNew(params); borListInit(&els_list); for (i = 0; i < els_len; i++){ borVec2Set(&els[i].w, borRandMT(rand, -3, 3), borRandMT(rand, -3, 3)); borNNElInit(nn, &els[i].el, (const bor_vec_t *)&els[i].w); borListAppend(&els_list, &els[i].list); } for (i = 0; i < ADD_ELS_LEN; i++){ //fprintf(stdout, "%02d:\n", i); borNNAdd(nn, &els[i].el); //borNNDump(vp, stdout); } for (i = 0; i < ADD_ELS_LEN; i += 3){ borNNRemove(nn, &els[i].el); borListDel(&els[i].list); } for (i = 0; i < ADD_NUM_TESTS; i++){ for (j = 1; j <= ADD_NUM_NNS; j++){ test2(rand, nn, &els_list, j); } } borNNDel(nn); borRandMTDel(rand); }