void* pcu_msg_pack(pcu_msg* m, int id, size_t size) { if (m->state != pack_state) reel_fail("PCU_Comm_Pack called at the wrong time"); pcu_msg_peer* peer = find_peer(m->peers,id); if (!peer) { peer = make_peer(id); pcu_aa_insert(&(peer->node),&(m->peers),peer_less); } return pcu_push_buffer(&(peer->message.buffer),size); }
static void prepare(pcu_order o, pcu_msg* t) { struct message* m; while (pcu_msg_receive(t)) { m = take_message(t); pcu_aa_insert(&m->node, &o->tree, message_less); } o->count = pcu_aa_count(o->tree); PCU_MALLOC(o->array, o->count); o->at = 0; fill(o, o->tree); o->at = -1; o->ready = true; }
pcu_aa_node* pcu_aa_insert(pcu_aa_node* x, pcu_aa_tree* t, pcu_aa_less* less) { pcu_aa_node* result; if (*t == &pcu_aa_bottom) { result = x; *t = x; (*t)->left = &pcu_aa_bottom; (*t)->right = &pcu_aa_bottom; (*t)->level = 1; } else { if (less(x,*t)) result = pcu_aa_insert(x,&((*t)->left),less); else if (less(*t,x)) result = pcu_aa_insert(x,&((*t)->right),less); else result = *t; skew(t); split(t); } return result; }