From 61ad95ca712a374f6e58127fda738b67c57d743d Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Wed, 04 Jan 2017 21:19:52 +0000
Subject: [PATCH] Added many changes to trisurf.py. Mostly readability. Great fix in class Runner by introducing @property tag

---
 src/cluster.c |   23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/cluster.c b/src/cluster.c
index 60d09c1..bb431f2 100644
--- a/src/cluster.c
+++ b/src/cluster.c
@@ -39,12 +39,14 @@
 	
 	for(i=0;i<cstlist->n;i++){
 		if(cstlist->cluster[i]==NULL){
+			if(i>=n) break;
+			//printf("Have to do compacting n=%d\n ",n);
 			do{
 				n--;
 			} while(cstlist->cluster[n]==NULL && n>i);
-			if(i<=n) break;
 			cstlist->cluster[i]=cstlist->cluster[n];
 			cstlist->cluster[n]=NULL;
+			//printf("After compacting n=%d\n",n);
 		}
 	}
 	cstlist->cluster=(ts_cluster **)realloc(cstlist->cluster,n*sizeof(ts_cluster *));
@@ -53,7 +55,7 @@
 }
 
 
-ts_bool cluster_join(ts_cluster *cluster1, ts_cluster *cluster2){
+ts_bool cluster_join(ts_cluster_list *cstlist, ts_cluster *cluster1, ts_cluster *cluster2){
 	ts_cluster *master_cluster,*slave_cluster;
 	ts_uint i;
 	if(cluster1->idx<cluster2->idx){
@@ -66,8 +68,13 @@
 	for(i=0;i<slave_cluster->nvtx;i++){
 		cluster_add_vertex(master_cluster,slave_cluster->vtx[i]);
 	}
-	cluster_free(slave_cluster);
-	slave_cluster=NULL;
+	//find cluster in the list and free the location of the cluster
+	for(i=0;i<cstlist->n;i++){
+		if(cstlist->cluster[i]==slave_cluster){
+			cluster_free(slave_cluster);
+			cstlist->cluster[i]=NULL;
+		}
+	}
 	return TS_SUCCESS;
 }
 
@@ -113,13 +120,13 @@
 	return NULL;
 }
 
-ts_bool cluster_vertex_neighbor_check(ts_vertex *vtx){
+ts_bool cluster_vertex_neighbor_check(ts_cluster_list *cstlist, ts_vertex *vtx){
 
 	int j;
 	for(j=0;j<vtx->neigh_no;j++){
 		if(vtx->neigh[j]->cluster!=NULL){
 			if(vtx->neigh[j]->cluster!=vtx->cluster){
-				cluster_join(vtx->cluster, vtx->neigh[j]->cluster);
+				cluster_join(cstlist, vtx->cluster, vtx->neigh[j]->cluster);
 			}
 		}
 	}
@@ -136,7 +143,7 @@
 	//for each vertex
 		vtx=vesicle->vlist->vtx[i];
 		if(is_clusterable(vtx)){
-			if(vtx->cluster!=NULL){
+			if(vtx->cluster==NULL){
 				//find first neigbor with cluster index
 				cst=cluster_vertex_neighbor(vtx);
 				if(cst==NULL){
@@ -146,7 +153,7 @@
 				} else {
 					//we are added to the first cluster found
 					cluster_add_vertex(cst,vtx);
-					cluster_vertex_neighbor_check(vtx);
+					cluster_vertex_neighbor_check(cstlist, vtx);
 					cluster_list_compact(cstlist);
 				}
 

--
Gitblit v1.9.3