Renamed ternary_insert() to ternary_insert_replace() and added the ability
to replace existing data (without a memory leak.) Added two DEFINES ternary_insert() and ternary_replace() to aid in coding.
This commit is contained in:
		
							parent
							
								
									22bdb8123d
								
							
						
					
					
						commit
						a328cefbf0
					
				@ -1,4 +1,4 @@
 | 
				
			|||||||
/* $Id: ternary.c,v 1.5 2001-05-23 17:59:53 rjkaes Exp $
 | 
					/* $Id: ternary.c,v 1.6 2001-08-30 16:52:09 rjkaes Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This module creates a Ternary Search Tree which can store both string
 | 
					 * This module creates a Ternary Search Tree which can store both string
 | 
				
			||||||
 * keys, and arbitrary data for each key. It works similar to a hash, and
 | 
					 * keys, and arbitrary data for each key. It works similar to a hash, and
 | 
				
			||||||
@ -294,7 +294,8 @@ int ternary_destroy(TERNARY tno, void (*freeptr)(void *))
 | 
				
			|||||||
 *		TE_TOOFULL	tree is full, so no new elements can be added.
 | 
					 *		TE_TOOFULL	tree is full, so no new elements can be added.
 | 
				
			||||||
 * Exceptions:	none
 | 
					 * Exceptions:	none
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int ternary_insert(TERNARY tno, const char *s, void *data)
 | 
					int ternary_insert_replace(TERNARY tno, const char *s, void *data,
 | 
				
			||||||
 | 
								   short int replace)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int cur;		/* index of current tree */
 | 
						int cur;		/* index of current tree */
 | 
				
			||||||
	Ttree *tree;		/* pointer to tree structure */
 | 
						Ttree *tree;		/* pointer to tree structure */
 | 
				
			||||||
@ -314,7 +315,13 @@ int ternary_insert(TERNARY tno, const char *s, void *data)
 | 
				
			|||||||
	while ((pp = *p)) {
 | 
						while ((pp = *p)) {
 | 
				
			||||||
		if ((d = *s - pp->splitchar) == 0) {
 | 
							if ((d = *s - pp->splitchar) == 0) {
 | 
				
			||||||
			if (*s++ == 0) {
 | 
								if (*s++ == 0) {
 | 
				
			||||||
				return TE_EXISTS;
 | 
									if (!replace)
 | 
				
			||||||
 | 
										return TE_EXISTS;
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										free(pp->eqkid);
 | 
				
			||||||
 | 
										pp->eqkid = (Tnode *)data;
 | 
				
			||||||
 | 
										return TE_NONE;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			p = &(pp->eqkid);
 | 
								p = &(pp->eqkid);
 | 
				
			||||||
		} else if (d < 0)
 | 
							} else if (d < 0)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
/* $Id: ternary.h,v 1.2 2000-09-26 04:59:20 rjkaes Exp $
 | 
					/* $Id: ternary.h,v 1.3 2001-08-30 16:52:09 rjkaes Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * See 'ternary.c' for a detailed description.
 | 
					 * See 'ternary.c' for a detailed description.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@ -58,7 +58,11 @@ extern char te_errbuf[256];
 | 
				
			|||||||
extern TERNARY ternary_new(void);
 | 
					extern TERNARY ternary_new(void);
 | 
				
			||||||
extern int ternary_destroy(TERNARY tno, void (*freeptr)(void *));
 | 
					extern int ternary_destroy(TERNARY tno, void (*freeptr)(void *));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int ternary_insert(TERNARY tno, const char *s, void *data);
 | 
					#define ternary_insert(x, y, z)  ternary_insert_replace(x, y, z, 0)
 | 
				
			||||||
 | 
					#define ternary_replace(x, y, z) ternary_insert_replace(x, y, z, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int ternary_insert_replace(TERNARY tno, const char *s, void *data,
 | 
				
			||||||
 | 
									  short int replace);
 | 
				
			||||||
extern int ternary_search(TERNARY tno, const char *s, void **data);
 | 
					extern int ternary_search(TERNARY tno, const char *s, void **data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user