one more little step
This commit is contained in:
		
							parent
							
								
									398a5d3957
								
							
						
					
					
						commit
						6a5d00fa10
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -9,6 +9,7 @@ toto | ||||
| 
 | ||||
| tools/*.obj | ||||
| ! tools/minimal.obj | ||||
| ! tools/cube.obj | ||||
| tools/read_obj | ||||
| tools/*.xyz | ||||
| tools/*.asc | ||||
|  | ||||
							
								
								
									
										78
									
								
								edges.c
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								edges.c
									
									
									
									
									
								
							| @ -65,6 +65,26 @@ return 0; | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| /*
 | ||||
|  *	with this func, you can search for duplicates, but  | ||||
|  *	it is going to be SLOW with huges object. | ||||
|  */ | ||||
| static int is_edge_in_list(EdgeList *list, int p0, int p1) | ||||
| { | ||||
| int		idx; | ||||
| 
 | ||||
| for (idx=0; idx < list->fidx; idx++) { | ||||
| 	if (	(list->edges[idx].A == p0) && | ||||
| 		(list->edges[idx].B == p1) )		return 1; | ||||
| 
 | ||||
| 	if (	(list->edges[idx].A == p1) && | ||||
| 		(list->edges[idx].B == p0) )		return 2; | ||||
| 	} | ||||
| 
 | ||||
| return 0;		/* NOT FOUND */ | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| /*
 | ||||
|  * | ||||
|  *	we have two functions for adding an edge to a list | ||||
|  *	the first one add unconditionnaly the edge to the | ||||
|  *	(non full) list... | ||||
| @ -88,6 +108,7 @@ list->edges[list->fidx].B = p1; | ||||
| list->fidx ++; | ||||
| return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  *	and the second only insert an edge if it was missing | ||||
|  *	from the currently know list. | ||||
| @ -114,24 +135,6 @@ if ( ! is_edge_in_list(list, p0, p1) ) { | ||||
| return 0; | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| /*
 | ||||
|  *	with this func, you can search for duplicates | ||||
|  */ | ||||
| int is_edge_in_list(EdgeList *list, int p0, int p1) | ||||
| { | ||||
| int		idx; | ||||
| 
 | ||||
| for (idx=0; idx < list->fidx; idx++) { | ||||
| 	if (	(list->edges[idx].A == p0) && | ||||
| 		(list->edges[idx].B == p1) )		return 1; | ||||
| 
 | ||||
| 	if (	(list->edges[idx].A == p1) && | ||||
| 		(list->edges[idx].B == p0) )		return 2; | ||||
| 	} | ||||
| 
 | ||||
| return 0;		/* NOT FOUND */ | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| int  print_edgelist_desc(EdgeList *list, int k) | ||||
| { | ||||
| 
 | ||||
| @ -147,12 +150,43 @@ fprintf(stderr, "\tsize                %8d\n",      list->size); | ||||
| fprintf(stderr, "\tnext free           %8d\n",      list->fidx); | ||||
| fprintf(stderr, "\tmagic              0x%08lX\n",   list->magic); | ||||
| 
 | ||||
| return 0; | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| /*
 | ||||
|  *	/!\	the output format is subject to changes in | ||||
|  *		a near futur. | ||||
|  */ | ||||
| int  edges_to_data(char *fname, EdgeList *list, int k) | ||||
| { | ||||
| FILE		*fp; | ||||
| int		idx, foo; | ||||
| 
 | ||||
| #if DEBUG_LEVEL | ||||
| fprintf(stderr, ">>> %s ( '%s'  %p %d )\n", __func__, fname, list, k); | ||||
| #endif | ||||
| 
 | ||||
| if (NULL==(fp=fopen(fname, "w"))) { | ||||
| 	perror(fname); | ||||
| 	return -1; | ||||
| 	} | ||||
| for (idx=0; idx<list->fidx; idx++) { | ||||
| 	foo = fprintf(fp, "%d %d\n", list->edges[idx].A, list->edges[idx].B); | ||||
| 	/*
 | ||||
| 	 * error check | ||||
| 	 */ | ||||
| 	if (foo < 0) { | ||||
| 		perror(fname); | ||||
| 		exit(1);		/* be violent ! */ | ||||
| 		} | ||||
| 	} | ||||
| fclose(fp); | ||||
| return 0; | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| int  print_the_edges(FILE *fp, EdgeList *list, int k) | ||||
| { | ||||
| int		foo; | ||||
| int		idx; | ||||
| 
 | ||||
| #if DEBUG_LEVEL | ||||
| fprintf(stderr, ">>> %s ( %p %d )\n", __func__, list, k); | ||||
| @ -165,9 +199,9 @@ if (k) { | ||||
| 
 | ||||
| fprintf(stderr, "    list.fidx = %d\n", list->fidx); | ||||
| 
 | ||||
| for (foo=0; foo<list->fidx; foo++) { | ||||
| 	fprintf(fp, "%6d\t\t%5d %5d\n", foo, | ||||
| 			list->edges[foo].A, list->edges[foo].B); | ||||
| for (idx=0; idx<list->fidx; idx++) { | ||||
| 	fprintf(fp, "%6d\t\t%5d %5d\n", idx, | ||||
| 			list->edges[idx].A, list->edges[idx].B); | ||||
| 	} | ||||
| 
 | ||||
| return -1; | ||||
|  | ||||
							
								
								
									
										7
									
								
								edges.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								edges.h
									
									
									
									
									
								
							| @ -1,13 +1,15 @@ | ||||
| /*
 | ||||
|  *		edges.h | ||||
|  *	a part of libbubulle from tTh | ||||
|  * | ||||
|  *		https://git.tetalab.org/tTh/libbubulle
 | ||||
|  */ | ||||
| 
 | ||||
| /* --------------------------------------------------------------------- */ | ||||
| 
 | ||||
| typedef struct { | ||||
| 	int		A, B; | ||||
| 	short		burz; | ||||
| 	short		burz;			/* for what usage ??? */ | ||||
| 	} AnEdge; | ||||
| 
 | ||||
| typedef struct { | ||||
| @ -26,9 +28,10 @@ int 		free_edgelist(EdgeList *list, int k); | ||||
| int 		push_an_edge(EdgeList *list, int p0, int p1); | ||||
| int 		push_a_missing_edge(EdgeList *list, int p0, int p1); | ||||
| 
 | ||||
| int 		is_edge_in_list(EdgeList *list, int p0, int p1); | ||||
| // int 		is_edge_in_list(EdgeList *list, int p0, int p1);
 | ||||
| 
 | ||||
| int  		print_edgelist_desc(EdgeList *list, int k); | ||||
| int 		edges_to_data(char *fname, EdgeList *list, int k); | ||||
| int  		print_the_edges(FILE *file, EdgeList *list, int k); | ||||
| 
 | ||||
| /* --------------------------------------------------------------------- */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 tTh
						tTh