Exemplo n.º 1
0
static MemChunk* mem_chunk_new_from_buffer (gsize size, gconstpointer buffer)
{
	g_return_val_if_fail (size > 0, NULL);
	MemChunk *chunk = mem_chunk_new (size);
	memcpy (chunk->data, buffer, size);
	return chunk;
}
Exemplo n.º 2
0
GAULFUNC boolean ga_chromosome_integer_allocate( population *pop,
                                        entity *embryo )
  {
  int		i;		/* Loop variable over all chromosomes */

  if (!pop) die("Null pointer to population structure passed.");
  if (!embryo) die("Null pointer to entity structure passed.");

  if (embryo->chromosome!=NULL)
    die("This entity already contains chromosomes.");

#ifdef USE_CHROMO_CHUNKS
  THREAD_LOCK(pop->chromo_chunk_lock);
  if (!pop->chromo_chunk)
    {
    pop->chromoarray_chunk = mem_chunk_new(pop->num_chromosomes*sizeof(int *), 1024);
    pop->chromo_chunk = mem_chunk_new(pop->num_chromosomes*pop->len_chromosomes*sizeof(int), 2048); 
    }

  embryo->chromosome = mem_chunk_alloc(pop->chromoarray_chunk);
  embryo->chromosome[0] = mem_chunk_alloc(pop->chromo_chunk);
  THREAD_UNLOCK(pop->chromo_chunk_lock);
#else
  if ( !(embryo->chromosome = s_malloc(pop->num_chromosomes*sizeof(int *))) )
    die("Unable to allocate memory");
  if ( !(embryo->chromosome[0] = s_malloc(pop->num_chromosomes*pop->len_chromosomes*sizeof(int))) )
    die("Unable to allocate memory");
#endif

  for (i=1; i<pop->num_chromosomes; i++)
    {
    embryo->chromosome[i] = &(((int *)embryo->chromosome[i-1])[pop->len_chromosomes]);
    }

  return TRUE;
  }
Exemplo n.º 3
0
static MemChunk* flatten_mem_chunks (GSList *chunks)
{
	gsize chunk_size = 0;
	
	GSList *iter = chunks;
	while (iter != NULL) {
		chunk_size += MEM_CHUNK(iter->data)->size;
		iter = g_slist_next (iter);
	}

	MemChunk *chunk = mem_chunk_new (chunk_size);
	gsize copied_chunk_size = 0;
	iter = chunks;

	while (iter != NULL) {
		MemChunk *jchunk = MEM_CHUNK (iter->data); 
		memcpy (chunk->data + copied_chunk_size, jchunk->data, jchunk->size);
		copied_chunk_size += jchunk->size;
		iter = g_slist_next (iter);
	}

	return chunk;
}