Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
qunique.h68 linesDownload Raw Back to lib
1/*-------------------------------------------------------------------------2 *3 * qunique.h4 *		inline array unique functions5 * Portions Copyright (c) 2019-2023, PostgreSQL Global Development Group6 *7 * IDENTIFICATION8 *		src/include/lib/qunique.h9 *-------------------------------------------------------------------------10 */11 12#ifndef QUNIQUE_H13#define QUNIQUE_H14 15/*16 * Remove duplicates from a pre-sorted array, according to a user-supplied17 * comparator.  Usually the array should have been sorted with qsort() using18 * the same arguments.  Return the new size.19 */20static inline size_t21qunique(void *array, size_t elements, size_t width,22		int (*compare) (const void *, const void *))23{24	char	   *bytes = (char *) array;25	size_t		i,26				j;27 28	if (elements <= 1)29		return elements;30 31	for (i = 1, j = 0; i < elements; ++i)32	{33		if (compare(bytes + i * width, bytes + j * width) != 0 &&34			++j != i)35			memcpy(bytes + j * width, bytes + i * width, width);36	}37 38	return j + 1;39}40 41/*42 * Like qunique(), but takes a comparator with an extra user data argument43 * which is passed through, for compatibility with qsort_arg().44 */45static inline size_t46qunique_arg(void *array, size_t elements, size_t width,47			int (*compare) (const void *, const void *, void *),48			void *arg)49{50	char	   *bytes = (char *) array;51	size_t		i,52				j;53 54	if (elements <= 1)55		return elements;56 57	for (i = 1, j = 0; i < elements; ++i)58	{59		if (compare(bytes + i * width, bytes + j * width, arg) != 0 &&60			++j != i)61			memcpy(bytes + j * width, bytes + i * width, width);62	}63 64	return j + 1;65}66 67#endif							/* QUNIQUE_H */68 
codekingpro/portable-devtools · Team Ai