Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}