Actual source code: freespace.c
1: #include "src/mat/utils/freespace.h"
3: #undef __FUNCT__
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: }
28: #undef __FUNCT__
30: int MakeSpaceContiguous(FreeSpaceList *head,int *space) {
31: FreeSpaceList a;
32: int ierr;
35: while ((*head)!=NULL) {
36: a = (*head)->more_space;
37: ierr = PetscMemcpy(space,(*head)->array_head,((*head)->local_used)*sizeof(int));
38: space += (*head)->local_used;
39: ierr = PetscFree((*head)->array_head);
40: ierr = PetscFree(*head);
41: *head = a;
42: }
43: return(0);
44: }