Actual source code: freespace.c

  1: #include "src/mat/utils/freespace.h"

  5: PetscErrorCode GetMoreSpace(PetscInt n,FreeSpaceList *list)
  6: {
  7:   FreeSpaceList  a;

 11:   PetscMalloc(sizeof(FreeSpace),&a);
 12:   PetscMalloc(n*sizeof(PetscInt),&(a->array_head));
 13:   a->array            = a->array_head;
 14:   a->local_remaining  = n;
 15:   a->local_used       = 0;
 16:   a->total_array_size = 0;
 17:   a->more_space       = NULL;

 19:   if (*list) {
 20:     (*list)->more_space = a;
 21:     a->total_array_size = (*list)->total_array_size;
 22:   }

 24:   a->total_array_size += n;
 25:   *list               =  a;
 26:   return(0);
 27: }

 31: PetscErrorCode MakeSpaceContiguous(FreeSpaceList *head,PetscInt *space)
 32: {
 33:   FreeSpaceList  a;

 37:   while ((*head)!=NULL) {
 38:     a     =  (*head)->more_space;
 39:      PetscMemcpy(space,(*head)->array_head,((*head)->local_used)*sizeof(PetscInt));
 40:     space += (*head)->local_used;
 41:      PetscFree((*head)->array_head);
 42:      PetscFree(*head);
 43:     *head =  a;
 44:   }
 45:   return(0);
 46: }