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