static void
do_consensus ()
{
  int unique_indices[replication];
  unsigned int i;

  for (i = 0; i < num_values; i++)
  {
    unsigned int j;
    struct GNUNET_HashCode val;
    struct GNUNET_SET_Element element;

    generate_indices (unique_indices);
    GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &val);

    element.data = &val;
    element.size = sizeof (val);
    for (j = 0; j < replication; j++)
    {
      int cid;

      cid = unique_indices[j];
      GNUNET_CONSENSUS_insert (consensus_handles[cid],
                               &element,
                               NULL, NULL);
    }
  }

  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
              "all elements inserted, calling conclude\n");

  for (i = 0; i < num_peers; i++)
    GNUNET_CONSENSUS_conclude (consensus_handles[i],
                               conclude_cb, &consensus_handles[i]);
}
Beispiel #2
0
    void Geometry::read(const std::string& geomFileName, const std::string& condFileName, const bool OLD_ORDERING) {
        // clear all first
        vertices_.clear();
        meshes_.clear();
        domains_.clear();
        is_nested_ = has_cond_ = false;

        GeometryReader geoR(*this);

        geoR.read_geom(geomFileName);

        if (condFileName!="") {
            geoR.read_cond(condFileName);
            has_cond_ = true;
            //mark meshes that touch the 0-cond
            mark_current_barrier();
        }

        // generate the indices of our unknowns
        generate_indices(OLD_ORDERING);

        // print info
        info();
    }
static enum pipe_error retrieve_or_generate_indices( struct svga_hwtnl *hwtnl,
                                                     unsigned prim,
                                                     unsigned gen_type,
                                                     unsigned gen_nr,
                                                     unsigned gen_size,
                                                     u_generate_func generate,
                                                     struct pipe_resource **out_buf )
{
   enum pipe_error ret = PIPE_OK;
   int i;

   for (i = 0; i < IDX_CACHE_MAX; i++) {
      if (hwtnl->index_cache[prim][i].buffer != NULL &&
          hwtnl->index_cache[prim][i].generate == generate)
      {
         if (compare(hwtnl->index_cache[prim][i].gen_nr, gen_nr, gen_type))
         {
            pipe_resource_reference( out_buf,
                                   hwtnl->index_cache[prim][i].buffer );

            if (DBG)
               debug_printf("%s retrieve %d/%d\n", __FUNCTION__, i, gen_nr);

            return PIPE_OK;
         }
         else if (gen_type == U_GENERATE_REUSABLE)
         {
            pipe_resource_reference( &hwtnl->index_cache[prim][i].buffer,
                                   NULL );

            if (DBG)
               debug_printf("%s discard %d/%d\n", __FUNCTION__,
                            i, hwtnl->index_cache[prim][i].gen_nr);

            break;
         }
      }
   }

   if (i == IDX_CACHE_MAX)
   {
      unsigned smallest = 0;
      unsigned smallest_size = ~0;

      for (i = 0; i < IDX_CACHE_MAX && smallest_size; i++) {
         if (hwtnl->index_cache[prim][i].buffer == NULL)
         {
            smallest = i;
            smallest_size = 0;
         }
         else if (hwtnl->index_cache[prim][i].gen_nr < smallest)
         {
            smallest = i;
            smallest_size = hwtnl->index_cache[prim][i].gen_nr;
         }
      }

      assert (smallest != IDX_CACHE_MAX);

      pipe_resource_reference( &hwtnl->index_cache[prim][smallest].buffer,
                             NULL );

      if (DBG)
         debug_printf("%s discard smallest %d/%d\n", __FUNCTION__,
                      smallest, smallest_size);

      i = smallest;
   }

   ret = generate_indices( hwtnl,
                           gen_nr,
                           gen_size,
                           generate,
                           out_buf );
   if (ret != PIPE_OK)
      return ret;


   hwtnl->index_cache[prim][i].generate = generate;
   hwtnl->index_cache[prim][i].gen_nr = gen_nr;
   pipe_resource_reference( &hwtnl->index_cache[prim][i].buffer,
                          *out_buf );

   if (DBG)
      debug_printf("%s cache %d/%d\n", __FUNCTION__,
                   i, hwtnl->index_cache[prim][i].gen_nr);

   return PIPE_OK;
}