From owner-svn-src-projects@freebsd.org Sat Aug 8 21:53:03 2015 Return-Path: <owner-svn-src-projects@freebsd.org> Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D70BB9B6350 for <svn-src-projects@mailman.ysv.freebsd.org>; Sat, 8 Aug 2015 21:53:03 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AEE76373; Sat, 8 Aug 2015 21:53:03 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t78Lr3h4073671; Sat, 8 Aug 2015 21:53:03 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t78Lr3ev073670; Sat, 8 Aug 2015 21:53:03 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508082153.t78Lr3ev073670@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin <bapt@FreeBSD.org> Date: Sat, 8 Aug 2015 21:53:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r286481 - projects/collation/usr.bin/localedef X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" <svn-src-projects.freebsd.org> List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe> List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/> List-Post: <mailto:svn-src-projects@freebsd.org> List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help> List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=subscribe> X-List-Received-Date: Sat, 08 Aug 2015 21:53:03 -0000 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; /*