From 9802f169c159d66159bc15fce86c4aaa3c9e9ce5 Mon Sep 17 00:00:00 2001 From: Samo Penic <samo@andromeda> Date: Sun, 28 Nov 2010 14:47:39 +0000 Subject: [PATCH] added function to remove vertex neighbour (but not connected vertex neighbour) --- src/Makefile.am | 2 +- src/main.c | 3 +++ src/vertex.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index c8e124d..0e3fea8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,4 +2,4 @@ trisurf_PROGRAMS=trisurf trisurf_SOURCES=general.c vertex.c bond.c main.c trisurf_LDFLAGS = -lm -lconfuse -trisurf_CFLAGS = -Wall -g +trisurf_CFLAGS = -Wall diff --git a/src/main.c b/src/main.c index 41475a9..bfbd732 100644 --- a/src/main.c +++ b/src/main.c @@ -23,6 +23,9 @@ retval=vtx_add_cneighbour(blist,vlist->vtx[0],vlist->vtx[1]); if(retval==TS_FAIL) printf("2. already a member or vertex is null!\n"); +retval=vtx_remove_neighbour(vlist->vtx[0],vlist->vtx[1]); +vtx_add_neighbour(vlist->vtx[0],vlist->vtx[1]); + vlist->vtx[0]->data->x=1.0; vlist->vtx[0]->data->x=1.1; diff --git a/src/vertex.c b/src/vertex.c index 52a8f93..4df3396 100644 --- a/src/vertex.c +++ b/src/vertex.c @@ -78,6 +78,42 @@ return TS_SUCCESS; } +/* TODO: optimize this. test this. */ +ts_bool vtx_remove_neighbour(ts_vertex *vtx, ts_vertex *nvtx){ +/* find a neighbour */ +/* remove it from the list while shifting remaining neighbours up */ + ts_uint i,j=0; + for(i=0;i<vtx->data->neigh_no;i++){ + if(vtx->data->neigh[i]!=nvtx){ + vtx->data->neigh[j]=vtx->data->neigh[i]; + j++; + } + } +/* resize memory. potentionally time consuming */ + vtx->data->neigh_no--; + vtx->data->neigh=(ts_vertex **)realloc(vtx->data->neigh,vtx->data->neigh_no*sizeof(ts_vertex *)); + if(vtx->data->neigh == NULL && vtx->data->neigh_no!=0) + fatal("Reallocation of memory failed during removal of vertex neighbour in vtx_remove_neighbour",100); + +/* repeat for the neighbour */ +/* find a neighbour */ +/* remove it from the list while shifting remaining neighbours up */ + for(i=0;i<nvtx->data->neigh_no;i++){ + if(nvtx->data->neigh[i]!=vtx){ + nvtx->data->neigh[j]=nvtx->data->neigh[i]; + j++; + } + } +/* resize memory. potentionally time consuming. */ + nvtx->data->neigh_no--; + nvtx->data->neigh=(ts_vertex **)realloc(nvtx->data->neigh,nvtx->data->neigh_no*sizeof(ts_vertex *)); + if(nvtx->data->neigh == NULL && nvtx->data->neigh_no!=0) + fatal("Reallocation of memory failed during removal of vertex neighbour in vtx_remove_neighbour",100); + + return TS_SUCCESS; +} + + ts_bool vtx_add_bond(ts_bond_list *blist,ts_vertex *vtx1,ts_vertex *vtx2){ ts_bond *bond; bond=bond_add(blist,vtx1,vtx2); @@ -100,6 +136,15 @@ return retval; } +/*TODO: write and optimize this urgently before use! */ +ts_bool vtx_remove_cneighbour(ts_bond_list *blist, ts_vertex *vtx1, ts_vertex +*vtx2){ +// ts_bool retval; +/* remove the bond */ +//retval=vtx_remove_bond(blist,vtx1,vtx2); +/* remove the vertices */ + return TS_SUCCESS; +} -- Gitblit v1.9.3