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: }