Browse Source

TODO: free structures done in diglib, part 2

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@36403 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 16 years ago
parent
commit
767aa7b5d5
3 changed files with 38 additions and 4 deletions
  1. 4 3
      lib/vector/diglib/plus_area.c
  2. 5 1
      lib/vector/diglib/plus_line.c
  3. 29 0
      lib/vector/diglib/struct_alloc.c

+ 4 - 3
lib/vector/diglib/plus_area.c

@@ -424,7 +424,8 @@ int dig_del_area(struct Plus_head *plus, int area)
 	}
     }
 
-    /* TODO: free structures */
+    /* free structures */
+    dig_free_area(Area);
     plus->Area[area] = NULL;
     return 1;
 }
@@ -778,8 +779,8 @@ int dig_del_isle(struct Plus_head *plus, int isle)
 	}
     }
 
-    /* TODO: free structures */
-
+    /* free structures */
+    dig_free_isle(Isle);
     plus->Isle[isle] = NULL;
 
     return 1;

+ 5 - 1
lib/vector/diglib/plus_line.c

@@ -188,7 +188,6 @@ int dig_del_line(struct Plus_head *plus, int line)
     P_LINE *Line;
     P_NODE *Node;
 
-    /* TODO: free structures */
     G_debug(3, "dig_del_line() line =  %d", line);
 
     Line = plus->Line[line];
@@ -211,6 +210,8 @@ int dig_del_line(struct Plus_head *plus, int line)
     if (Node->n_lines == 0) {
 	G_debug(3, "    node %d has 0 lines -> delete", Line->N1);
 	dig_spidx_del_node(plus, Line->N1);
+	/* free structures */
+	dig_free_node(Node);
 	plus->Node[Line->N1] = NULL;
     }
     else {
@@ -235,6 +236,8 @@ int dig_del_line(struct Plus_head *plus, int line)
 	if (Node->n_lines == 0) {
 	    G_debug(3, "    node %d has 0 lines -> delete", Line->N2);
 	    dig_spidx_del_node(plus, Line->N2);
+	    /* free structures */
+	    dig_free_node(Node);
 	    plus->Node[Line->N2] = NULL;
 	}
 	else {
@@ -244,6 +247,7 @@ int dig_del_line(struct Plus_head *plus, int line)
     }
 
     /* Delete line */
+    dig_free_line(Line);
     plus->Line[line] = NULL;
 
     return 0;

+ 29 - 0
lib/vector/diglib/struct_alloc.c

@@ -35,6 +35,7 @@
  ** Allocate array space to add 'add' elements
  */
 
+/* TODO: use G_malloc and friends instead of malloc et al.? */
 
 /* allocate new node structure */
 P_NODE *dig_alloc_node()
@@ -53,6 +54,14 @@ P_NODE *dig_alloc_node()
     return (Node);
 }
 
+/* free node structure */
+void dig_free_node(P_NODE *Node)
+{
+    free(Node->lines);
+    free(Node->angles);
+    free(Node);
+}
+
 /* dig_node_alloc_line (node, add)
  **     allocate space in  P_node,  lines and angles arrays to add 'add' more
  **     lines
@@ -118,6 +127,12 @@ P_LINE *dig_alloc_line()
     return (Line);
 }
 
+/* free line structure */
+void dig_free_line(P_LINE *Line)
+{
+    free(Line);
+}
+
 /* Reallocate array of pointers to lines.
  *  Space for 'add' number of lines is added.
  * 
@@ -207,6 +222,14 @@ P_AREA *dig_alloc_area()
     return (Area);
 }
 
+/* free area structure */
+void dig_free_area(P_AREA *Area)
+{
+    free(Area->lines);
+    free(Area->isles);
+    free(Area);
+}
+
 /* alloc new isle structure */
 P_ISLE *dig_alloc_isle()
 {
@@ -225,6 +248,12 @@ P_ISLE *dig_alloc_isle()
     return (Isle);
 }
 
+/* free isle structure */
+void dig_free_isle(P_ISLE *Isle)
+{
+    free(Isle->lines);
+    free(Isle);
+}
 
 /* allocate room for  'num'   X and Y  arrays in struct line_pnts 
  **   returns -1 on out of memory