Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Aug 2015 21:53:03 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r286481 - projects/collation/usr.bin/localedef
Message-ID:  <201508082153.t78Lr3ev073670@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Sat Aug  8 21:53:02 2015
New Revision: 286481
URL: https://svnweb.freebsd.org/changeset/base/286481

Log:
  Convert ctype generation to Red Black tree

Modified:
  projects/collation/usr.bin/localedef/ctype.c

Modified: projects/collation/usr.bin/localedef/ctype.c
==============================================================================
--- projects/collation/usr.bin/localedef/ctype.c	Sat Aug  8 21:46:38 2015	(r286480)
+++ projects/collation/usr.bin/localedef/ctype.c	Sat Aug  8 21:53:02 2015	(r286481)
@@ -35,7 +35,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include <sys/avl.h>
+#include <sys/tree.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -68,24 +68,20 @@ __FBSDID("$FreeBSD$");
 #define	_E4		0
 #define	_E5		_CTYPE_T
 
-static avl_tree_t	ctypes;
-
 static wchar_t		last_ctype;
+static int ctype_compare(const void *n1, const void *n2);
 
 typedef struct ctype_node {
 	wchar_t wc;
 	int32_t	ctype;
 	int32_t	toupper;
 	int32_t	tolower;
-	avl_node_t avl;
+	RB_ENTRY(ctype_node) entry;
 } ctype_node_t;
 
-typedef struct width_node {
-	wchar_t start;
-	wchar_t end;
-	int8_t width;
-	avl_node_t avl;
-} width_node_t;
+RB_HEAD(ctypes, ctype_node) ctypes;
+RB_PROTOTYPE(ctypes, ctype_node, entry, ctype_compare);
+RB_GENERATE(ctypes, ctype_node, entry, ctype_compare);
 
 static int
 ctype_compare(const void *n1, const void *n2)
@@ -99,8 +95,7 @@ ctype_compare(const void *n1, const void
 void
 init_ctype(void)
 {
-	avl_create(&ctypes, ctype_compare, sizeof (ctype_node_t),
-	    offsetof(ctype_node_t, avl));
+	RB_INIT(&ctypes);
 }
 
 
@@ -172,17 +167,16 @@ get_ctype(wchar_t wc)
 {
 	ctype_node_t	srch;
 	ctype_node_t	*ctn;
-	avl_index_t	where;
 
 	srch.wc = wc;
-	if ((ctn = avl_find(&ctypes, &srch, &where)) == NULL) {
+	if ((ctn = RB_FIND(ctypes, &ctypes, &srch)) == NULL) {
 		if ((ctn = calloc(1, sizeof (*ctn))) == NULL) {
 			errf("out of memory");
 			return (NULL);
 		}
 		ctn->wc = wc;
 
-		avl_insert(&ctypes, ctn, where);
+		RB_INSERT(ctypes, &ctypes, ctn);
 	}
 	return (ctn);
 }
@@ -318,10 +312,9 @@ dump_ctype(void)
 		rl.mapupper[wc] = wc;
 	}
 
-	for (ctn = avl_first(&ctypes); ctn; ctn = AVL_NEXT(&ctypes, ctn)) {
+	RB_FOREACH(ctn, ctypes, &ctypes) {
 		int conflict = 0;
 
-
 		wc = ctn->wc;
 
 		/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201508082153.t78Lr3ev073670>