Improved memory management
netzel

netzel commited on 2024-02-29 12:15:58
Showing 3 changed files, with 23 additions and 7 deletions.

... ...
@@ -64,10 +64,10 @@ void grow_adaptel(int i, LABELS* labels, MINLIST* minlist, SEEDS* seeds,
64 64
     CELL cell;    
65 65
 
66 66
 	// get seed
67
-	index = seeds->seeds[i].index;
67
+	index = get_seed_index(seeds, i);
68 68
 
69 69
 	if(labels->labels[index] < 0) {
70
-		insert_minlist(minlist, seeds->seeds[i].x, seeds->seeds[i].y, index, 0);
70
+		insert_minlist(minlist, get_seed_x(seeds, i), get_seed_y(seeds, i), index, 0);
71 71
 		distances[index] = 0.0;
72 72
 		init_label(labels, index);
73 73
 		nodata = (mask[index]==1);
... ...
@@ -7,7 +7,7 @@
7 7
 #define SEEDSINCREMENT 10000000
8 8
 
9 9
 SEEDS* create_seeds(long MAX_SIZE) {
10
-	long init_size = MAX_SIZE; //SEEDSINCREMENT;
10
+	long init_size = SEEDSINCREMENT;
11 11
 	SEEDS* seeds = (SEEDS *)malloc(sizeof(SEEDS));
12 12
     seeds->seeds = (SEED *)malloc(init_size*sizeof(SEED));
13 13
     seeds->N = 0;
... ...
@@ -23,14 +23,14 @@ void free_seeds(SEEDS *seeds) {
23 23
 }
24 24
 
25 25
 void insert_seed(SEEDS *seeds, long p, int x, int y, long index) {
26
-    int i = seeds->N;
26
+    int i = seeds->N - seeds->base;
27 27
     seeds->seeds[i].x = x;
28 28
     seeds->seeds[i].y = y;
29 29
     seeds->seeds[i].index = index;
30 30
     seeds->N++;
31
-    if (seeds->N - seeds->base == seeds->max_size) { // to do!!!!!
32
-		if(p > SEEDSINCREMENT - seeds->base) {
33
-			memmove(&(seeds->seeds[0]),&(seeds->seeds[p - seeds->base]),(i-p)*sizeof(SEED));
31
+    if (seeds->N - seeds->base >= seeds->max_size) { // to do!!!!!
32
+		if(p  - seeds->base > SEEDSINCREMENT) {
33
+			memmove(&(seeds->seeds[0]),&(seeds->seeds[p - seeds->base]),(seeds->N - p)*sizeof(SEED));
34 34
 			seeds->base = p;
35 35
 		} else {
36 36
 			seeds->max_size += SEEDSINCREMENT;
... ...
@@ -41,6 +41,18 @@ void insert_seed(SEEDS *seeds, long p, int x, int y, long index) {
41 41
     }
42 42
 }
43 43
 
44
+long get_seed_index(SEEDS* seeds, long i) {
45
+	return seeds->seeds[i - seeds->base].index;
46
+}
47
+
48
+int get_seed_x(SEEDS* seeds, long i) {
49
+	return seeds->seeds[i - seeds->base].x;
50
+}
51
+
52
+int get_seed_y(SEEDS* seeds, long i) {
53
+	return seeds->seeds[i - seeds->base].y;
54
+}
55
+
44 56
 SEED* get_seed(SEEDS* seeds, long i) {
45 57
 	return &(seeds->seeds[i - seeds->base]);
46 58
 }
... ...
@@ -19,5 +19,9 @@ void free_seeds(SEEDS *seeds);
19 19
 void insert_seed(SEEDS *seeds, long p, 
20 20
                  int x, int y, long index);
21 21
 SEED* get_seed(SEEDS* seeds, long i);
22
+long get_seed_index(SEEDS* seeds, long i);
23
+int get_seed_x(SEEDS* seeds, long i);
24
+int get_seed_y(SEEDS* seeds, long i);
25
+
22 26
 
23 27
 #endif
24 28