From 73771431acbfbd1ffa2f3aeabb21fed9016fca42 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo@andromeda>
Date: Sat, 27 Nov 2010 20:11:27 +0000
Subject: [PATCH] Before adding additional completeley unnecessary level of pointers in vertex list.

---
 src/vertex.c |   94 +++++++++++++++++++++++++++--------------------
 1 files changed, 54 insertions(+), 40 deletions(-)

diff --git a/src/vertex.c b/src/vertex.c
index 54ae9b7..b83f609 100644
--- a/src/vertex.c
+++ b/src/vertex.c
@@ -5,35 +5,31 @@
 #include "vertex.h"
 #include<stdio.h>
 
-/* Argument je struktura vlist in stevilo vertexov, ki jih zelimo dati v
- * vlist je lahko NULL, N mora biti vecje od 0. Ce vlist obstaja, potem resizamo
- * vlist na stevilo N.
- */
-ts_vertex **init_vertex_list(ts_uint N){	
+ts_vertex_list *init_vertex_list(ts_uint N){	
 	ts_int i;
-    ts_vertex **vlist;
+    ts_vertex_list *vlist=(ts_vertex_list *)malloc(sizeof(ts_vertex_list *));
+    
 	if(N==0){
 		err("Initialized vertex list with zero elements. Pointer set to NULL");
-		vlist=NULL;
-		return NULL;
+        vlist->n=0;
+		vlist->vtx=NULL;
+		return vlist;
 	}
-		vlist=(ts_vertex **)malloc(N*sizeof(ts_vertex *));
-        if(vlist==NULL)
-            fatal("Fatal error reserving memory space for vertex list! Could number of requsted vertices be too large?", 100);
-        
-        for(i=0;i<N;i++){
-               vlist[i]=init_vertex(i); 
-        }
+	
+    vlist->vtx=(ts_vertex *)malloc(N*sizeof(ts_vertex));
+    if(vlist->vtx==NULL)
+        fatal("Fatal error reserving memory space for vertex list! Could number of requsted vertices be too large?", 100);
+    for(i=0;i<N;i++) vlist->vtx[i].data=init_vertex_data();
+    vlist->n=N;
 	return vlist;
 }
 
-ts_vertex *init_vertex(ts_uint idx){
-    ts_vertex *vtx;
-    vtx=(ts_vertex *)malloc(sizeof(ts_vertex));
-    if(vtx==NULL)
+ts_vertex_data *init_vertex_data(){
+    ts_vertex_data *data;
+    data=(ts_vertex_data *)malloc(sizeof(ts_vertex_data));
+    if(data==NULL)
         fatal("Fatal error reserving memory space for ts_vertex! Memory full?", 100);
-    vtx->idx=idx;
-    return vtx;
+    return data;
 }
 
 /*
@@ -49,27 +45,27 @@
 
 
 
-ts_bool vtx_add_neighbour(ts_vertex **vtx, ts_vertex **nvtx){
+ts_bool vtx_add_neighbour(ts_vertex *vtx, ts_vertex *nvtx){
     ts_uint i;
     /* no neighbour can be null! */
     if(vtx==NULL || nvtx==NULL) return TS_FAIL;
     
     /*if it is already a neighbour don't add it to the list */
-    for(i=0; i<(*vtx)->neigh_no;i++){
-        if((*vtx)->neigh[i]==nvtx) return TS_FAIL;
+    for(i=0; i<vtx->data->neigh_no;i++){
+        if(vtx->data->neigh[i]==nvtx) return TS_FAIL;
     }
-    ts_uint nn=(*vtx)->neigh_no++;
-    (*vtx)->neigh=(ts_vertex ***)realloc((*vtx)->neigh, nn*sizeof(ts_vertex **));
-    (*vtx)->neigh[nn]=nvtx;
+    ts_uint nn=vtx->data->neigh_no++;
+    vtx->data->neigh=(ts_vertex **)realloc(vtx->data->neigh, nn*sizeof(ts_vertex *));
+    vtx->data->neigh[nn]=nvtx;
 
     /* pa se sosedu dodamo vertex */
     /*if it is already a neighbour don't add it to the list */
-    for(i=0; i<(*nvtx)->neigh_no;i++){
-        if((*nvtx)->neigh[i]==vtx) return TS_FAIL;
+    for(i=0; i<nvtx->data->neigh_no;i++){
+        if(nvtx->data->neigh[i]==vtx) return TS_FAIL;
     } 
-    nn=(*nvtx)->neigh_no++;
-    (*nvtx)->neigh=(ts_vertex ***)realloc((*nvtx)->neigh, nn*sizeof(ts_vertex **));
-    (*nvtx)->neigh[nn]=vtx;
+    nn=nvtx->data->neigh_no++;
+    nvtx->data->neigh=(ts_vertex **)realloc(nvtx->data->neigh, nn*sizeof(ts_vertex *));
+    nvtx->data->neigh[nn]=vtx;
 
 
 /* Ustvari bond in doloci dolzino */
@@ -78,17 +74,35 @@
 }
 
 
-ts_bool vtx_free(ts_vertex **vtx){
-    if((*vtx)->neigh!=NULL)   free((*vtx)->neigh);
-    if((*vtx)->tristar!=NULL) free((*vtx)->tristar);
-    if((*vtx)->bond!=NULL)    free((*vtx)->bond);
-    if((*vtx)->cell!=NULL)    free((*vtx)->cell);
-    free(*vtx);
+ts_bool vtx_data_free(ts_vertex_data *data){
+    if(data->neigh!=NULL)   free(data->neigh);
+    if(data->tristar!=NULL) free(data->tristar);
+    if(data->bond!=NULL)    free(data->bond);
+    if(data->cell!=NULL)    free(data->cell);
+    free(data);
+    return TS_SUCCESS;
+}
+
+ts_bool vtx_free(ts_vertex  *vtx){
+    vtx_data_free(vtx->data);
+    free(vtx);
+    return TS_SUCCESS;
+}
+
+ts_bool vtx_list_free(ts_vertex_list *vlist){
+    int i;
+    for(i=0;i<vlist->n;i++){
+        vtx_data_free(vlist->vtx[i].data);
+    }
+    free(vlist->vtx);
+    free(vlist);
     return TS_SUCCESS;
 }
 
 
-inline ts_double vertex_distance_sq(ts_vertex **vtx1, ts_vertex **vtx2){
+
+/* rewrite for additional structure in chain */
+/*inline ts_double vtx_distance_sq(ts_vertex *vtx1, ts_vertex *vtx2){
     ts_double dist;
 #ifdef TS_DOUBLE_DOUBLE
     dist=pow((*vtx1)->x-(*vtx2)->x,2) + pow((*vtx1)->y-(*vtx2)->y,2) + pow((*vtx1)->z-(*vtx2)->z,2);
@@ -101,4 +115,4 @@
 #endif
     return(dist);
 }
-
+*/

--
Gitblit v1.9.3