int process_top_request(omp_collector_message *req)
{
  switch(req->r) {
  case OMP_REQ_START:
    __ompc_req_start(req);   
    break;

  case OMP_REQ_REGISTER:
    register_event(req);
    break;

  case OMP_REQ_UNREGISTER:
    unregister_event(req);
    break; 
          
  case OMP_REQ_STATE:
    return_state(req);
    break; 

  case OMP_REQ_CURRENT_PRID:
    return_current_prid(req);
    break;

  case OMP_REQ_PARENT_PRID:
    return_parent_prid(req);
    break;

  case OMP_REQ_STOP:
    __ompc_req_stop(req);
    break;

  case OMP_REQ_PAUSE:
    __ompc_req_pause(req); 
    break;

  case OMP_REQ_RESUME:
    __ompc_req_resume(req);
    break;

#ifdef USE_COLLECTOR_TASK
  case OMP_REQ_TASK_ID:
    return_task_info(req);
    break;

  case OMP_REQ_TASK_PID:
    return_parent_task_info(req);
    break;
#endif

  default:
    *(req->ec) = OMP_ERRCODE_UNKNOWN;
    *(req->rsz) = 0;   
    break;
  }
  return 1;
   
}
static void comp_all_sampled_values(void)
{
    int i;

    logVs[num_samples] = log_dirichlet_pdf_value();

    for (i=num_samples-1; i>=0; i--) {
        if (smp_val_sw_count[i]==NULL) {
            logVs[i] = logVs[i+1];
        }
        else {
            return_state(i);
            logVs[i] = log_dirichlet_pdf_value();
        }
    }
}