From 7958e9880911c822dcb78d3e1ac743a0ccdc1e03 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo@andromeda>
Date: Sat, 04 Dec 2010 20:56:15 +0000
Subject: [PATCH] The initial distribution file has been rewritten. The structure of dipyramid should be accurately recreated using new datastructure. While rewritting the new datastructure proved to be very easy to understand and no memory leaks occured. Still, some questions remains unanswered -- whether the vertex neighbours and links to bonds should be linked tightly together.

---
 src/bond.c |   38 ++++++++++++++++++++++++++++----------
 1 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/src/bond.c b/src/bond.c
index 492ad24..289079a 100644
--- a/src/bond.c
+++ b/src/bond.c
@@ -1,24 +1,42 @@
 #include<stdlib.h>
 #include "general.h"
-#include<stdio.h>
+#include "vertex.h"
 
-ts_bool init_bond_list(ts_bond_list *blist){
+ts_bond_list *init_bond_list(){
+    ts_bond_list *blist=(ts_bond_list *)malloc(sizeof(ts_bond_list));
 	blist->n=0;
 	blist->bond=NULL;
-	return TS_SUCCESS;
+	return blist;
 }
 
-ts_bool bond_add(ts_bond_list *blist, ts_vertex *vtx1, ts_vertex *vtx2){
+ts_bond  *bond_add(ts_bond_list *blist, ts_vertex *vtx1, ts_vertex *vtx2){
+    
+    /* no vertices must be null! */
+    if(vtx1==NULL || vtx2==NULL) return NULL;
+    /* TODO: Verify if the bond already exists... Don't do multiple bonds */
 	blist->n++;
-	blist->bond=realloc(blist->bond,blist->n*sizeof(ts_bond));
-	if(blist->bond==NULL) fatal("Cannot reallocate memory for additional *ts_bond.",5);
-	//NOW insert vertices!	
-	blist->bond[blist->n - 1].vtx1=vtx1;	
-	blist->bond[blist->n - 1].vtx2=vtx2;	
-	return TS_SUCCESS;
+	blist->bond=(ts_bond **)realloc(blist->bond,blist->n*sizeof(ts_bond *));
+	if(blist->bond==NULL) fatal("Cannot reallocate memory for additional **ts_bond.",100);
+    blist->bond[blist->n-1]=(ts_bond *)malloc(sizeof(ts_bond));
+    if(blist->bond[blist->n-1]==NULL) fatal("Cannot allocate memory for additional *ts_bond.",100);
+    blist->bond[blist->n-1]->data=(ts_bond_data *)malloc(sizeof(ts_bond_data));
+    
+	//NOW insert vertices into data!	
+	blist->bond[blist->n - 1]->data->vtx1=vtx1;	
+	blist->bond[blist->n - 1]->data->vtx2=vtx2;
+
+    //Should we calculate bond length NOW?
+	
+	return blist->bond[blist->n-1];
 }
 
 ts_bool bond_list_free(ts_bond_list *blist){
+    ts_uint i;
+    for(i=0;i<blist->n;i++){
+    free(blist->bond[i]->data);
+    free(blist->bond[i]);
+    }
     free(blist->bond);
+    free(blist);
     return TS_SUCCESS;
 }

--
Gitblit v1.9.3