Actual source code: freespace.c

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

  3: int GetMoreSpace(int size,FreeSpaceList *list) {
  4:   FreeSpaceList a;

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

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

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

 26: int MakeSpaceContiguous(FreeSpaceList *head,int *space) {
 27:   FreeSpaceList a;
 28:   int           ierr;

 31:   while ((*head)!=NULL) {
 32:     a     =  (*head)->more_space;
 33:     ierr  =  PetscMemcpy(space,(*head)->array_head,((*head)->local_used)*sizeof(int));
 34:     space += (*head)->local_used;
 35:     ierr  =  PetscFree((*head)->array_head);
 36:     ierr  =  PetscFree(*head);
 37:     *head =  a;
 38:   }
 39:   return(0);
 40: }