Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com> --- Makefile | 1 + include/lib/array.h | 4 +++ lib/array.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ test/arch-x86/Makefile | 1 + 4 files changed, 56 insertions(+), 0 deletions(-) create mode 100644 lib/array.c
diff --git a/Makefile b/Makefile index 68a89e9..55ef9ba 100644 --- a/Makefile +++ b/Makefile @@ -129,6 +129,7 @@ VM_OBJS = \ vm/zalloc.o LIB_OBJS = \ + lib/array.o \ lib/bitset.o \ lib/buffer.o \ lib/guard-page.o \ diff --git a/include/lib/array.h b/include/lib/array.h index cff85c1..12b6968 100644 --- a/include/lib/array.h +++ b/include/lib/array.h @@ -87,4 +87,8 @@ static inline void array_qsort(struct array *a, qsort(a->ptr, a->size, sizeof(void *), cmp); } +/* Remove duplicate elements from the array. NOTE: The array must already + * be sorted! */ +void array_unique(struct array *a, int (*cmp)(const void *, const void *)); + #endif diff --git a/lib/array.c b/lib/array.c new file mode 100644 index 0000000..256257f --- /dev/null +++ b/lib/array.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2009 Vegard Nossum + * + * This file is released under the GPL version 2 with the following + * clarification and special exception: + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under terms + * of your choice, provided that you also meet, for each linked independent + * module, the terms and conditions of the license of that module. An + * independent module is a module which is not derived from or based on + * this library. If you modify this library, you may extend this exception + * to your version of the library, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + * + * Please refer to the file LICENSE for details. + */ + +#include "lib/array.h" + +void array_unique(struct array *a, int (*cmp)(const void *, const void *)) +{ + unsigned int n = a->size; + if (!n) + return; + + void **ptr = a->ptr; + unsigned int target = 0; + + for (unsigned int i = target + 1; i < n; ++i) { + assert(i > target); + + /* If they're equal, we skip it. */ + if (!cmp(&ptr[target], &ptr[i])) + continue; + + ptr[++target] = ptr[i]; + } + + /* Update the size */ + a->size = target + 1; +} diff --git a/test/arch-x86/Makefile b/test/arch-x86/Makefile index 5ea3cb2..83a2988 100644 --- a/test/arch-x86/Makefile +++ b/test/arch-x86/Makefile @@ -52,6 +52,7 @@ TOPLEVEL_OBJS := \ jit/tree-node.o \ jit/tree-printer.o \ jit/vtable.o \ + lib/array.o \ lib/buffer.o \ lib/guard-page.o \ lib/hash-map.o \ -- 1.6.0.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel