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