Actual source code: freespace.c

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

  5: int GetMoreSpace(int size,FreeSpaceList *list) {
  6:   FreeSpaceList a;

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

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

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

 30: int MakeSpaceContiguous(FreeSpaceList *head,int *space) {
 31:   FreeSpaceList a;
 32:   int           ierr;

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