still modifying ase_lda_t
This commit is contained in:
		| @ -22,6 +22,7 @@ | |||||||
| typedef struct ase_lda_t ase_lda_t; | typedef struct ase_lda_t ase_lda_t; | ||||||
| typedef struct ase_lda_cell_t ase_lda_cell_t; | typedef struct ase_lda_cell_t ase_lda_cell_t; | ||||||
|  |  | ||||||
|  | #define ASE_LDA_COPIER_SIMPLE  ase_lda_copysimple | ||||||
| #define ASE_LDA_COPIER_INLINE  ase_lda_copyinline | #define ASE_LDA_COPIER_INLINE  ase_lda_copyinline | ||||||
|  |  | ||||||
| #define ASE_LDA_INVALID ((ase_size_t)-1) | #define ASE_LDA_INVALID ((ase_size_t)-1) | ||||||
| @ -240,6 +241,20 @@ ase_lda_t* ase_lda_setcapa ( | |||||||
| 	ase_size_t capa | 	ase_size_t capa | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  | ase_size_t ase_lda_search ( | ||||||
|  | 	ase_lda_t* lda, | ||||||
|  | 	ase_size_t pos, | ||||||
|  | 	const void* dptr, | ||||||
|  | 	ase_size_t dlen | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | ase_size_t ase_lda_rsearch ( | ||||||
|  | 	ase_lda_t* lda, | ||||||
|  | 	ase_size_t pos, | ||||||
|  | 	const void* dptr, | ||||||
|  | 	ase_size_t dlen | ||||||
|  | ); | ||||||
|  |  | ||||||
| ase_size_t ase_lda_insert ( | ase_size_t ase_lda_insert ( | ||||||
| 	ase_lda_t* lda, | 	ase_lda_t* lda, | ||||||
| 	ase_size_t index,  | 	ase_size_t index,  | ||||||
| @ -283,11 +298,16 @@ ase_size_t ase_lda_rrfindx ( | |||||||
|  |  | ||||||
| void ase_lda_clear (ase_lda_t* lda); | void ase_lda_clear (ase_lda_t* lda); | ||||||
|  |  | ||||||
|  | void* ase_lda_copysimple ( | ||||||
|  | 	ase_lda_t* lda   /* a linear dynamic array */, | ||||||
|  | 	void*      data  /* the pointer to data */, | ||||||
|  | 	ase_size_t len   /* the length of data */ | ||||||
|  | ); | ||||||
|  |  | ||||||
| void* ase_lda_copyinline ( | void* ase_lda_copyinline ( | ||||||
| 	ase_lda_t* lda   /* a linear dynamic array */, | 	ase_lda_t* lda   /* a linear dynamic array */, | ||||||
| 	void*      data  /* pointer to data to copy */ , | 	void*      data  /* the pointer to data */, | ||||||
| 	ase_size_t len   /* length of data in bytes */ | 	ase_size_t len   /* the length of data */ | ||||||
| ); | ); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: map.h 398 2008-09-29 10:01:15Z baconevi $ |  * $Id: map.h 408 2008-10-07 11:30:16Z baconevi $ | ||||||
|  * |  * | ||||||
|  * {License} |  * {License} | ||||||
|  */ |  */ | ||||||
| @ -183,8 +183,7 @@ struct ase_map_t | |||||||
| }; | }; | ||||||
| /******/ | /******/ | ||||||
|  |  | ||||||
|  | #define ASE_MAP_COPIER_SIMPLE ase_map_copysimple | ||||||
|  |  | ||||||
| #define ASE_MAP_COPIER_INLINE ase_map_copyinline | #define ASE_MAP_COPIER_INLINE ase_map_copyinline | ||||||
|  |  | ||||||
| /****d* ase.cmn.map/ASE_MAP_SIZE | /****d* ase.cmn.map/ASE_MAP_SIZE | ||||||
| @ -547,7 +546,17 @@ ase_map_pair_t* ase_map_getnextpair ( | |||||||
| 	ase_size_t* buckno | 	ase_size_t* buckno | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void* ase_map_copyinline (ase_map_t* map, void* dptr, ase_size_t dlen); | void* ase_map_copysimple ( | ||||||
|  | 	ase_map_t* map   /* a linear dynamic array */, | ||||||
|  | 	void*      data  /* the pointer to data */, | ||||||
|  | 	ase_size_t len   /* the length of data */ | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | void* ase_map_copyinline ( | ||||||
|  | 	ase_map_t* map   /* a linear dynamic array */, | ||||||
|  | 	void*      data  /* the pointer to data */, | ||||||
|  | 	ase_size_t len   /* the length of data */ | ||||||
|  | ); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|  | |||||||
| @ -162,6 +162,7 @@ struct ase_sll_node_t | |||||||
| }; | }; | ||||||
| /******/ | /******/ | ||||||
|  |  | ||||||
|  | #define ASE_SLL_COPIER_SIMPLE ase_sll_copysimple | ||||||
| #define ASE_SLL_COPIER_INLINE ase_sll_copyinline | #define ASE_SLL_COPIER_INLINE ase_sll_copyinline | ||||||
|  |  | ||||||
| #define ASE_SLL_MMGR(sll)   ((sll)->mmgr) | #define ASE_SLL_MMGR(sll)   ((sll)->mmgr) | ||||||
| @ -573,14 +574,24 @@ void ase_sll_walk ( | |||||||
| ); | ); | ||||||
| /******/ | /******/ | ||||||
|  |  | ||||||
|  | /*  | ||||||
|  |  * Causes a singly linked list to remember the pointer and the length. | ||||||
|  |  * Use ASE_SLL_COPIER_SIMPLE instead. | ||||||
|  |  */ | ||||||
|  | void* ase_sll_copysimple ( | ||||||
|  | 	ase_sll_t* sll   /* a singly linked list */, | ||||||
|  | 	void*      data  /* the pointer to data */, | ||||||
|  | 	ase_size_t len   /* the length of data */ | ||||||
|  | ); | ||||||
|  |  | ||||||
| /*  | /*  | ||||||
|  * Causes a singly linked list to copy in data to a node. |  * Causes a singly linked list to copy in data to a node. | ||||||
|  * Use ASE_SLL_COPIER_INLINE instead. |  * Use ASE_SLL_COPIER_INLINE instead. | ||||||
|  */ |  */ | ||||||
| void* ase_sll_copyinline ( | void* ase_sll_copyinline ( | ||||||
| 	ase_sll_t* sll   /* a singly linked list */, | 	ase_sll_t* sll   /* a singly linked list */, | ||||||
| 	void*      data  /* pointer to data to copy */ ,  | 	void*      data  /* the pointer to data */,  | ||||||
| 	ase_size_t len   /* length of data in bytes */ | 	ase_size_t len   /* the length of data */ | ||||||
| ); | ); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
|  | |||||||
| @ -7,16 +7,76 @@ | |||||||
| #include <ase/cmn/lda.h> | #include <ase/cmn/lda.h> | ||||||
| #include "mem.h" | #include "mem.h" | ||||||
|  |  | ||||||
| #define DPTR(cell) ASE_LDA_DPTR(cell) |  | ||||||
| #define DLEN(cell) ASE_LDA_DLEN(cell) |  | ||||||
| #define TOB(lda,len) ((len)*(lda)->scale) |  | ||||||
| #define INVALID ASE_LDA_INVALID |  | ||||||
|  |  | ||||||
| #define cell_t ase_lda_cell_t |  | ||||||
| #define lda_t    ase_lda_t | #define lda_t    ase_lda_t | ||||||
|  | #define cell_t   ase_lda_cell_t | ||||||
|  | #define copier_t ase_lda_copier_t | ||||||
|  | #define freeer_t ase_lda_freeer_t | ||||||
|  | #define comper_t ase_lda_comper_t | ||||||
|  | #define walker_t ase_lda_walker_t | ||||||
| #define size_t   ase_size_t | #define size_t   ase_size_t | ||||||
| #define mmgr_t   ase_mmgr_t | #define mmgr_t   ase_mmgr_t | ||||||
|  |  | ||||||
|  | #define TOB(lda,len) ((len)*(lda)->scale) | ||||||
|  | #define DPTR(cell)   ASE_LDA_DPTR(cell) | ||||||
|  | #define DLEN(cell)   ASE_LDA_DLEN(cell) | ||||||
|  | #define INVALID      ASE_LDA_INVALID | ||||||
|  |  | ||||||
|  | static int comp_data (lda_t* lda,  | ||||||
|  | 	const void* dptr1, size_t dlen1,  | ||||||
|  | 	const void* dptr2, size_t dlen2) | ||||||
|  | { | ||||||
|  | 	/* | ||||||
|  | 	if (dlen1 == dlen2) return ASE_MEMCMP (dptr1, dptr2, TOB(lda,dlen1)); | ||||||
|  | 	return 1; | ||||||
|  | 	*/ | ||||||
|  |  | ||||||
|  | 	size_t min = (dlen1 < dlen2)? dlen1: dlen2; | ||||||
|  | 	int n = ASE_MEMCMP (dptr1, dptr2, TOB(lda,min)); | ||||||
|  | 	if (n == 0 && dlen1 != dlen2)  | ||||||
|  | 	{ | ||||||
|  | 		n = (dlen1 > dlen2)? 1: -1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static cell_t* alloc_cell (lda_t* lda, void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	cell_t* n; | ||||||
|  |  | ||||||
|  | 	if (lda->copier == ASE_NULL || | ||||||
|  | 	    lda->copier == ASE_LDA_COPIER_SIMPLE) | ||||||
|  | 	{ | ||||||
|  | 		n = ASE_MMGR_ALLOC (lda->mmgr, ASE_SIZEOF(cell_t)); | ||||||
|  | 		if (n == ASE_NULL) return ASE_NULL; | ||||||
|  | 		DPTR(n) = dptr; | ||||||
|  | 	} | ||||||
|  | 	else if (lda->copier == ASE_LDA_COPIER_INLINE) | ||||||
|  | 	{ | ||||||
|  | 		n = ASE_MMGR_ALLOC (lda->mmgr,  | ||||||
|  | 			ASE_SIZEOF(cell_t) + TOB(lda,dlen)); | ||||||
|  | 		if (n == ASE_NULL) return ASE_NULL; | ||||||
|  |  | ||||||
|  | 		ASE_MEMCPY (n + 1, dptr, TOB(lda,dlen)); | ||||||
|  | 		DPTR(n) = n + 1; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		n = ASE_MMGR_ALLOC (lda->mmgr, ASE_SIZEOF(cell_t)); | ||||||
|  | 		if (n == ASE_NULL) return ASE_NULL; | ||||||
|  | 		DPTR(n) = lda->copier (lda, dptr, dlen); | ||||||
|  | 		if (DPTR(n) == ASE_NULL)  | ||||||
|  | 		{ | ||||||
|  | 			ASE_MMGR_FREE (lda->mmgr, n); | ||||||
|  | 			return ASE_NULL; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	DLEN(n) = dlen;  | ||||||
|  |  | ||||||
|  | 	return n; | ||||||
|  | } | ||||||
|  |  | ||||||
| lda_t* ase_lda_open (mmgr_t* mmgr, size_t ext, size_t capa) | lda_t* ase_lda_open (mmgr_t* mmgr, size_t ext, size_t capa) | ||||||
| { | { | ||||||
| 	lda_t* lda; | 	lda_t* lda; | ||||||
| @ -52,6 +112,8 @@ lda_t* ase_lda_init (lda_t* lda, mmgr_t* mmgr, size_t capa) | |||||||
| 	lda->capa = 0; | 	lda->capa = 0; | ||||||
| 	lda->cell = ASE_NULL; | 	lda->cell = ASE_NULL; | ||||||
|  |  | ||||||
|  | 	lda->comper = comp_data; | ||||||
|  |  | ||||||
| 	if (ase_lda_setcapa (lda, capa) == ASE_NULL) return ASE_NULL; | 	if (ase_lda_setcapa (lda, capa) == ASE_NULL) return ASE_NULL; | ||||||
| 	return lda; | 	return lda; | ||||||
| } | } | ||||||
| @ -83,6 +145,55 @@ void ase_lda_setmmgr (lda_t* lda, mmgr_t* mmgr) | |||||||
| 	lda->mmgr = mmgr; | 	lda->mmgr = mmgr; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int ase_lda_getscale (lda_t* lda) | ||||||
|  | { | ||||||
|  | 	return lda->scale; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void ase_lda_setscale (lda_t* lda, int scale) | ||||||
|  | { | ||||||
|  | 	ASE_ASSERTX (scale > 0 && scale <= ASE_TYPE_MAX(ase_byte_t),  | ||||||
|  | 		"The scale should be larger than 0 and less than or equal to the maximum value that the ase_byte_t type can hold"); | ||||||
|  |  | ||||||
|  | 	if (scale <= 0) scale = 1; | ||||||
|  | 	if (scale > ASE_TYPE_MAX(ase_byte_t)) scale = ASE_TYPE_MAX(ase_byte_t); | ||||||
|  |  | ||||||
|  | 	lda->scale = scale; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | copier_t ase_lda_getcopier (lda_t* lda) | ||||||
|  | { | ||||||
|  | 	return lda->copier; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void ase_lda_setcopier (lda_t* lda, copier_t copier) | ||||||
|  | { | ||||||
|  | 	lda->copier = copier; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | freeer_t ase_lda_getfreeer (lda_t* lda) | ||||||
|  | { | ||||||
|  | 	return lda->freeer; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void ase_lda_setfreeer (lda_t* lda, freeer_t freeer) | ||||||
|  | { | ||||||
|  | 	lda->freeer = freeer; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | comper_t ase_lda_getcomper (lda_t* lda) | ||||||
|  | { | ||||||
|  | 	return lda->comper; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void ase_lda_setcomper (lda_t* lda, comper_t comper) | ||||||
|  | { | ||||||
|  | 	if (comper == ASE_NULL) comper = comp_data; | ||||||
|  | 	lda->comper = comper; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| size_t ase_lda_getsize (lda_t* lda) | size_t ase_lda_getsize (lda_t* lda) | ||||||
| { | { | ||||||
| 	return lda->size; | 	return lda->size; | ||||||
| @ -142,43 +253,53 @@ lda_t* ase_lda_setcapa (lda_t* lda, size_t capa) | |||||||
| 	return lda; | 	return lda; | ||||||
| } | } | ||||||
|  |  | ||||||
| static cell_t* alloc_cell (lda_t* lda, void* dptr, size_t dlen) | size_t ase_lda_search (lda_t* lda, size_t pos, const void* dptr, size_t dlen) | ||||||
| { | { | ||||||
| 	cell_t* n; | 	size_t i; | ||||||
|  |  | ||||||
| 	if (lda->copier == ASE_NULL) | 	for (i = pos; i < lda->size; i++)  | ||||||
| 	{ | 	{ | ||||||
| 		n = ASE_MMGR_ALLOC (lda->mmgr, ASE_SIZEOF(cell_t)); | 		if (lda->comper(lda,  | ||||||
| 		if (n == ASE_NULL) return ASE_NULL; | 			DPTR(lda->cell[i]), DLEN(lda->cell[i]), | ||||||
| 		DPTR(n) = dptr; | 			dptr, dlen) == 0) return i; | ||||||
| 	} |  | ||||||
| 	else if (lda->copier == ASE_LDA_COPIER_INLINE) |  | ||||||
| 	{ |  | ||||||
| 		n = ASE_MMGR_ALLOC (lda->mmgr,  |  | ||||||
| 			ASE_SIZEOF(cell_t) + TOB(lda,dlen)); |  | ||||||
| 		if (n == ASE_NULL) return ASE_NULL; |  | ||||||
|  |  | ||||||
| 		ASE_MEMCPY (n + 1, dptr, TOB(lda,dlen)); |  | ||||||
| 		DPTR(n) = n + 1; |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		n = ASE_MMGR_ALLOC (lda->mmgr, ASE_SIZEOF(cell_t)); |  | ||||||
| 		if (n == ASE_NULL) return ASE_NULL; |  | ||||||
| 		DPTR(n) = lda->copier (lda, dptr, dlen); |  | ||||||
| 		if (DPTR(n) == ASE_NULL)  |  | ||||||
| 		{ |  | ||||||
| 			ASE_MMGR_FREE (lda->mmgr, n); |  | ||||||
| 			return ASE_NULL; |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	DLEN(n) = dlen;  | 	return INVALID; | ||||||
|  |  | ||||||
| 	return n; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| size_t ase_lda_insert (lda_t* lda, size_t index, void* dptr, size_t dlen) | size_t ase_lda_rsearch (lda_t* lda, size_t pos, const void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	size_t i; | ||||||
|  |  | ||||||
|  | 	if (pos >= lda->size) return INVALID; | ||||||
|  |  | ||||||
|  | 	for (i = pos + 1; i-- > 0; )  | ||||||
|  | 	{ | ||||||
|  | 		if (lda->comper(lda,  | ||||||
|  | 			DPTR(lda->cell[i]), DLEN(lda->cell[i]), | ||||||
|  | 			dptr, dlen) == 0) return i; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return INVALID; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | size_t ase_lda_rrsearch (lda_t* lda, size_t pos, const void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	size_t i; | ||||||
|  |  | ||||||
|  | 	if (pos >= lda->size) return INVALID; | ||||||
|  |  | ||||||
|  | 	for (i = lda->size - pos; i-- > 0; )  | ||||||
|  | 	{ | ||||||
|  | 		if (lda->comper(lda,  | ||||||
|  | 			DPTR(lda->cell[i]), DLEN(lda->cell[i]), | ||||||
|  | 			dptr, dlen) == 0) return i; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return INVALID; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | size_t ase_lda_insert (lda_t* lda, size_t pos, void* dptr, size_t dlen) | ||||||
| { | { | ||||||
| 	size_t i; | 	size_t i; | ||||||
| 	cell_t* cell; | 	cell_t* cell; | ||||||
| @ -186,14 +307,14 @@ size_t ase_lda_insert (lda_t* lda, size_t index, void* dptr, size_t dlen) | |||||||
| 	cell = alloc_cell (lda, dptr, dlen); | 	cell = alloc_cell (lda, dptr, dlen); | ||||||
| 	if (cell == ASE_NULL) return INVALID; | 	if (cell == ASE_NULL) return INVALID; | ||||||
|  |  | ||||||
| 	if (index >= lda->capa)  | 	if (pos >= lda->capa)  | ||||||
| 	{ | 	{ | ||||||
| 		size_t capa; | 		size_t capa; | ||||||
|  |  | ||||||
| 		if (lda->capa <= 0) capa = (index + 1); | 		if (lda->capa <= 0) capa = (pos + 1); | ||||||
| 		else  | 		else  | ||||||
| 		{ | 		{ | ||||||
| 			do { capa = lda->capa * 2; } while (index >= capa); | 			do { capa = lda->capa * 2; } while (pos >= capa); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (ase_lda_setcapa(lda,capa) == ASE_NULL)  | 		if (ase_lda_setcapa(lda,capa) == ASE_NULL)  | ||||||
| @ -204,14 +325,14 @@ size_t ase_lda_insert (lda_t* lda, size_t index, void* dptr, size_t dlen) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for (i = lda->size; i > index; i--)  | 	for (i = lda->size; i > pos; i--)  | ||||||
| 		lda->cell[i] = lda->cell[i-1]; | 		lda->cell[i] = lda->cell[i-1]; | ||||||
| 	lda->cell[index] = cell; | 	lda->cell[pos] = cell; | ||||||
|  |  | ||||||
| 	if (index > lda->size) lda->size = index + 1; | 	if (pos > lda->size) lda->size = pos + 1; | ||||||
| 	else lda->size++; | 	else lda->size++; | ||||||
|  |  | ||||||
| 	return index; | 	return pos; | ||||||
| } | } | ||||||
|  |  | ||||||
| size_t ase_lda_delete (lda_t* lda, size_t index, size_t count) | size_t ase_lda_delete (lda_t* lda, size_t index, size_t count) | ||||||
| @ -283,9 +404,7 @@ size_t ase_lda_adduniq ( | |||||||
| } | } | ||||||
|  |  | ||||||
| #if 0 | #if 0 | ||||||
| size_t ase_lda_find ( | size_t ase_lda_find (lda_t* lda, size_t index, const ase_char_t* str, size_t len) | ||||||
| 	lda_t* lda, size_t index,  |  | ||||||
| 	const ase_char_t* str, size_t len) |  | ||||||
| { | { | ||||||
| 	size_t i; | 	size_t i; | ||||||
|  |  | ||||||
| @ -299,9 +418,7 @@ size_t ase_lda_find ( | |||||||
| 	return INVALID; | 	return INVALID; | ||||||
| } | } | ||||||
|  |  | ||||||
| size_t ase_lda_rfind ( | size_t ase_lda_rfind (lda_t* lda, size_t index, const ase_char_t* str, size_t len) | ||||||
| 	lda_t* lda, size_t index,  |  | ||||||
| 	const ase_char_t* str, size_t len) |  | ||||||
| { | { | ||||||
| 	size_t i; | 	size_t i; | ||||||
|  |  | ||||||
| @ -317,9 +434,7 @@ size_t ase_lda_rfind ( | |||||||
| 	return INVALID; | 	return INVALID; | ||||||
| } | } | ||||||
|  |  | ||||||
| size_t ase_lda_rrfind ( | size_t ase_lda_rrfind (lda_t* lda, size_t index, const ase_char_t* str, size_t len) | ||||||
| 	lda_t* lda, size_t index, |  | ||||||
| 	const ase_char_t* str, size_t len) |  | ||||||
| { | { | ||||||
| 	size_t i; | 	size_t i; | ||||||
|  |  | ||||||
| @ -402,6 +517,12 @@ size_t ase_lda_rrfindx ( | |||||||
| 	return INVALID; | 	return INVALID; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | void* ase_lda_copysimple (lda_t* lda, void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	return dptr; | ||||||
|  | } | ||||||
|  |  | ||||||
| void* ase_lda_copyinline (lda_t* lda, void* dptr, size_t dlen) | void* ase_lda_copyinline (lda_t* lda, void* dptr, size_t dlen) | ||||||
| { | { | ||||||
| @ -409,4 +530,3 @@ void* ase_lda_copyinline (lda_t* lda, void* dptr, size_t dlen) | |||||||
| 	return ASE_NULL; | 	return ASE_NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: map.c 404 2008-09-30 11:14:20Z baconevi $ |  * $Id: map.c 408 2008-10-07 11:30:16Z baconevi $ | ||||||
|  * |  * | ||||||
|  * {License} |  * {License} | ||||||
|  */ |  */ | ||||||
| @ -75,7 +75,8 @@ static pair_t* alloc_pair (map_t* map, | |||||||
| 	NEXT(n) = ASE_NULL; | 	NEXT(n) = ASE_NULL; | ||||||
|  |  | ||||||
| 	KLEN(n) = klen; | 	KLEN(n) = klen; | ||||||
| 	if (kcop == ASE_NULL) | 	if (kcop == ASE_NULL || | ||||||
|  | 	    kcop == ASE_MAP_COPIER_SIMPLE) | ||||||
| 	{ | 	{ | ||||||
| 		KPTR(n) = kptr; | 		KPTR(n) = kptr; | ||||||
| 	} | 	} | ||||||
| @ -95,7 +96,8 @@ static pair_t* alloc_pair (map_t* map, | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	VLEN(n) = vlen; | 	VLEN(n) = vlen; | ||||||
| 	if (vcop == ASE_NULL)  | 	if (vcop == ASE_NULL || | ||||||
|  | 	    vcop == ASE_MAP_COPIER_SIMPLE) | ||||||
| 	{ | 	{ | ||||||
| 		VPTR(n) = vptr; | 		VPTR(n) = vptr; | ||||||
| 	} | 	} | ||||||
| @ -150,7 +152,8 @@ static pair_t* change_pair_val ( | |||||||
| 		size_t ovlen = VLEN(pair); | 		size_t ovlen = VLEN(pair); | ||||||
|  |  | ||||||
| 		/* place the new value according to the copier */ | 		/* place the new value according to the copier */ | ||||||
| 		if (vcop == ASE_NULL) | 		if (vcop == ASE_NULL || | ||||||
|  | 		    vcop == ASE_MAP_COPIER_SIMPLE) | ||||||
| 		{ | 		{ | ||||||
| 			VPTR(pair) = vptr; | 			VPTR(pair) = vptr; | ||||||
| 			VLEN(pair) = vlen; | 			VLEN(pair) = vlen; | ||||||
| @ -289,16 +292,6 @@ void ase_map_setmmgr (map_t* map, mmgr_t* mmgr) | |||||||
| 	map->mmgr = mmgr; | 	map->mmgr = mmgr; | ||||||
| } | } | ||||||
|  |  | ||||||
| size_t ase_map_getsize (map_t* map) |  | ||||||
| { |  | ||||||
| 	return map->size; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| size_t ase_map_getcapa (map_t* map) |  | ||||||
| { |  | ||||||
| 	return map->capa; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int ase_map_getscale (map_t* map, ase_map_id_t id) | int ase_map_getscale (map_t* map, ase_map_id_t id) | ||||||
| { | { | ||||||
| 	ASE_ASSERTX (id == ASE_MAP_KEY || id == ASE_MAP_VAL, | 	ASE_ASSERTX (id == ASE_MAP_KEY || id == ASE_MAP_VAL, | ||||||
| @ -390,6 +383,16 @@ void ase_map_setsizer (map_t* map, sizer_t sizer) | |||||||
| 	map->sizer = sizer; | 	map->sizer = sizer; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | size_t ase_map_getsize (map_t* map) | ||||||
|  | { | ||||||
|  | 	return map->size; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | size_t ase_map_getcapa (map_t* map) | ||||||
|  | { | ||||||
|  | 	return map->capa; | ||||||
|  | } | ||||||
|  |  | ||||||
| pair_t* ase_map_search (map_t* map, const void* kptr, size_t klen) | pair_t* ase_map_search (map_t* map, const void* kptr, size_t klen) | ||||||
| { | { | ||||||
| 	pair_t* pair; | 	pair_t* pair; | ||||||
| @ -411,7 +414,6 @@ pair_t* ase_map_search (map_t* map, const void* kptr, size_t klen) | |||||||
| 	return ASE_NULL; | 	return ASE_NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int ase_map_put ( | int ase_map_put ( | ||||||
| 	map_t* map, void* kptr, size_t klen,  | 	map_t* map, void* kptr, size_t klen,  | ||||||
| 	void* vptr, size_t vlen, pair_t** px) | 	void* vptr, size_t vlen, pair_t** px) | ||||||
| @ -729,6 +731,11 @@ static int reorganize (map_t* map) | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void* ase_map_copysimple (map_t* map, void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	return dptr; | ||||||
|  | } | ||||||
|  |  | ||||||
| void* ase_map_copyinline (map_t* map, void* dptr, size_t dlen) | void* ase_map_copyinline (map_t* map, void* dptr, size_t dlen) | ||||||
| { | { | ||||||
|         /* this is a dummy copier */ |         /* this is a dummy copier */ | ||||||
|  | |||||||
| @ -24,6 +24,7 @@ | |||||||
|  |  | ||||||
| #define TOB(sll,len) ((len)*(sll)->scale) | #define TOB(sll,len) ((len)*(sll)->scale) | ||||||
|  |  | ||||||
|  | #define SIZEOF(x) ASE_SIZEOF(x) | ||||||
| #define size_t    ase_size_t | #define size_t    ase_size_t | ||||||
| #define mmgr_t    ase_mmgr_t | #define mmgr_t    ase_mmgr_t | ||||||
|  |  | ||||||
| @ -36,6 +37,44 @@ static int comp_data (sll_t* sll, | |||||||
| 	return 1; | 	return 1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static node_t* alloc_node (sll_t* sll, void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	node_t* n; | ||||||
|  |  | ||||||
|  | 	if (sll->copier == ASE_NULL ||  | ||||||
|  | 	    sll->copier == ASE_SLL_COPIER_SIMPLE) | ||||||
|  | 	{ | ||||||
|  | 		n = ASE_MMGR_ALLOC (sll->mmgr, SIZEOF(node_t)); | ||||||
|  | 		if (n == ASE_NULL) return ASE_NULL; | ||||||
|  | 		DPTR(n) = dptr; | ||||||
|  | 	} | ||||||
|  | 	else if (sll->copier == ASE_SLL_COPIER_INLINE) | ||||||
|  | 	{ | ||||||
|  | 		n = ASE_MMGR_ALLOC (sll->mmgr,  | ||||||
|  | 			SIZEOF(node_t) + TOB(sll,dlen)); | ||||||
|  | 		if (n == ASE_NULL) return ASE_NULL; | ||||||
|  |  | ||||||
|  | 		ASE_MEMCPY (n + 1, dptr, TOB(sll,dlen)); | ||||||
|  | 		DPTR(n) = n + 1; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		n = ASE_MMGR_ALLOC (sll->mmgr, SIZEOF(node_t)); | ||||||
|  | 		if (n == ASE_NULL) return ASE_NULL; | ||||||
|  | 		DPTR(n) = sll->copier (sll, dptr, dlen); | ||||||
|  | 		if (DPTR(n) == ASE_NULL)  | ||||||
|  | 		{ | ||||||
|  | 			ASE_MMGR_FREE (sll->mmgr, n); | ||||||
|  | 			return ASE_NULL; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	DLEN(n) = dlen;  | ||||||
|  | 	NEXT(n) = ASE_NULL;	 | ||||||
|  |  | ||||||
|  | 	return n; | ||||||
|  | } | ||||||
|  |  | ||||||
| sll_t* ase_sll_open (mmgr_t* mmgr, size_t ext) | sll_t* ase_sll_open (mmgr_t* mmgr, size_t ext) | ||||||
| { | { | ||||||
| 	sll_t* sll; | 	sll_t* sll; | ||||||
| @ -50,7 +89,7 @@ sll_t* ase_sll_open (mmgr_t* mmgr, size_t ext) | |||||||
| 		if (mmgr == ASE_NULL) return ASE_NULL; | 		if (mmgr == ASE_NULL) return ASE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	sll = ASE_MMGR_ALLOC (mmgr, ASE_SIZEOF(sll_t) + ext); | 	sll = ASE_MMGR_ALLOC (mmgr, SIZEOF(sll_t) + ext); | ||||||
| 	if (sll == ASE_NULL) return ASE_NULL; | 	if (sll == ASE_NULL) return ASE_NULL; | ||||||
|  |  | ||||||
| 	return ase_sll_init (sll, mmgr); | 	return ase_sll_init (sll, mmgr); | ||||||
| @ -65,7 +104,7 @@ void ase_sll_close (sll_t* sll) | |||||||
| sll_t* ase_sll_init (sll_t* sll, mmgr_t* mmgr) | sll_t* ase_sll_init (sll_t* sll, mmgr_t* mmgr) | ||||||
| { | { | ||||||
| 	/* do not zero out the extension */ | 	/* do not zero out the extension */ | ||||||
| 	ASE_MEMSET (sll, 0, ASE_SIZEOF(*sll)); | 	ASE_MEMSET (sll, 0, SIZEOF(*sll)); | ||||||
|  |  | ||||||
| 	sll->mmgr = mmgr; | 	sll->mmgr = mmgr; | ||||||
| 	sll->size = 0; | 	sll->size = 0; | ||||||
| @ -95,21 +134,6 @@ void ase_sll_setmmgr (sll_t* sll, mmgr_t* mmgr) | |||||||
| 	sll->mmgr = mmgr; | 	sll->mmgr = mmgr; | ||||||
| } | } | ||||||
|  |  | ||||||
| size_t ase_sll_getsize (sll_t* sll) |  | ||||||
| { |  | ||||||
| 	return SIZE(sll); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| node_t* ase_sll_gethead (sll_t* sll) |  | ||||||
| { |  | ||||||
| 	return HEAD(sll); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| node_t* ase_sll_gettail (sll_t* sll) |  | ||||||
| { |  | ||||||
| 	return TAIL(sll); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int ase_sll_getscale (sll_t* sll) | int ase_sll_getscale (sll_t* sll) | ||||||
| { | { | ||||||
| 	return sll->scale; | 	return sll->scale; | ||||||
| @ -157,41 +181,19 @@ void ase_sll_setcomper (sll_t* sll, comper_t comper) | |||||||
| 	sll->comper = comper; | 	sll->comper = comper; | ||||||
| } | } | ||||||
|  |  | ||||||
| static node_t* alloc_node (sll_t* sll, void* dptr, size_t dlen) | size_t ase_sll_getsize (sll_t* sll) | ||||||
| { | { | ||||||
| 	node_t* n; | 	return SIZE(sll); | ||||||
|  |  | ||||||
| 	if (sll->copier == ASE_NULL) |  | ||||||
| 	{ |  | ||||||
| 		n = ASE_MMGR_ALLOC (sll->mmgr, ASE_SIZEOF(node_t)); |  | ||||||
| 		if (n == ASE_NULL) return ASE_NULL; |  | ||||||
| 		DPTR(n) = dptr; |  | ||||||
| 	} |  | ||||||
| 	else if (sll->copier == ASE_SLL_COPIER_INLINE) |  | ||||||
| 	{ |  | ||||||
| 		n = ASE_MMGR_ALLOC (sll->mmgr,  |  | ||||||
| 			ASE_SIZEOF(node_t) + TOB(sll,dlen)); |  | ||||||
| 		if (n == ASE_NULL) return ASE_NULL; |  | ||||||
|  |  | ||||||
| 		ASE_MEMCPY (n + 1, dptr, TOB(sll,dlen)); |  | ||||||
| 		DPTR(n) = n + 1; |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		n = ASE_MMGR_ALLOC (sll->mmgr, ASE_SIZEOF(node_t)); |  | ||||||
| 		if (n == ASE_NULL) return ASE_NULL; |  | ||||||
| 		DPTR(n) = sll->copier (sll, dptr, dlen); |  | ||||||
| 		if (DPTR(n) == ASE_NULL)  |  | ||||||
| 		{ |  | ||||||
| 			ASE_MMGR_FREE (sll->mmgr, n); |  | ||||||
| 			return ASE_NULL; |  | ||||||
| 		} |  | ||||||
| } | } | ||||||
|  |  | ||||||
| 	DLEN(n) = dlen;  | node_t* ase_sll_gethead (sll_t* sll) | ||||||
| 	NEXT(n) = ASE_NULL;	 | { | ||||||
|  | 	return HEAD(sll); | ||||||
|  | } | ||||||
|  |  | ||||||
| 	return n; | node_t* ase_sll_gettail (sll_t* sll) | ||||||
|  | { | ||||||
|  | 	return TAIL(sll); | ||||||
| } | } | ||||||
|  |  | ||||||
| node_t* ase_sll_search (sll_t* sll, node_t* pos, const void* dptr, size_t dlen) | node_t* ase_sll_search (sll_t* sll, node_t* pos, const void* dptr, size_t dlen) | ||||||
| @ -320,6 +322,11 @@ void ase_sll_walk (sll_t* sll, walker_t walker, void* arg) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void* ase_sll_copysimple (sll_t* sll, void* dptr, size_t dlen) | ||||||
|  | { | ||||||
|  | 	return dptr; | ||||||
|  | } | ||||||
|  |  | ||||||
| void* ase_sll_copyinline (sll_t* sll, void* dptr, size_t dlen) | void* ase_sll_copyinline (sll_t* sll, void* dptr, size_t dlen) | ||||||
| { | { | ||||||
| 	/* this is a dummy copier */ | 	/* this is a dummy copier */ | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user