Mercurial > hg > octave-kai > gnulib-hg
changeset 13524:7917fe0d070b
unistr/u8-strstr, unistr/u16-strstr: Optimize the one-character case.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 31 Jul 2010 22:10:38 +0200 |
parents | 76cf9cc5639c |
children | ac49cf58cb8b |
files | ChangeLog lib/unistr/u-strstr.h lib/unistr/u16-strstr.c lib/unistr/u8-strstr.c modules/unistr/u16-strstr modules/unistr/u8-strstr |
diffstat | 6 files changed, 29 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2010-07-31 Bruno Haible <bruno@clisp.org> + + unistr/u8-strstr, unistr/u16-strstr: Optimize the one-character case. + * lib/unistr/u-strstr.h (FUNC): When the needle contains only one + character, perform the search using U_STRCHR. + * lib/unistr/u8-strstr.c (U_STRMBTOUC): New macro. + * lib/unistr/u16-strstr.c (U_STRMBTOUC): Likewise. + * modules/unistr/u8-strstr (Depends-on): Add unistr/u8-strmbtouc. + * modules/unistr/u16-strstr (Depends-on): Add unistr/u16-strmbtouc. + Suggested by Paolo Bonzini. + 2010-07-31 Bruno Haible <bruno@clisp.org> unistr/u*-strstr: Fix dependencies.
--- a/lib/unistr/u-strstr.h +++ b/lib/unistr/u-strstr.h @@ -1,5 +1,5 @@ /* Substring test for UTF-8/UTF-16/UTF-32 strings. - Copyright (C) 1999, 2002, 2006, 2009-2010 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2006, 2010 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This program is free software: you can redistribute it and/or modify it @@ -24,10 +24,20 @@ if (first == 0) return (UNIT *) haystack; - /* Is needle nearly empty? */ + /* Is needle nearly empty (only one unit)? */ if (needle[1] == 0) return U_STRCHR (haystack, first); +#ifdef U_STRMBTOUC + /* Is needle nearly empty (only one character)? */ + { + ucs4_t first_uc; + int count = U_STRMBTOUC (&first_uc, needle); + if (count > 0 && needle[count] == 0) + return U_STRCHR (haystack, first_uc); + } +#endif + /* Search for needle's first unit. */ for (; *haystack != 0; haystack++) if (*haystack == first)
--- a/lib/unistr/u16-strstr.c +++ b/lib/unistr/u16-strstr.c @@ -1,5 +1,5 @@ /* Substring test for UTF-16 strings. - Copyright (C) 1999, 2002, 2006, 2009-2010 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2006, 2010 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This program is free software: you can redistribute it and/or modify it @@ -25,4 +25,5 @@ #define FUNC u16_strstr #define UNIT uint16_t #define U_STRCHR u16_strchr +#define U_STRMBTOUC u16_strmbtouc #include "u-strstr.h"
--- a/lib/unistr/u8-strstr.c +++ b/lib/unistr/u8-strstr.c @@ -1,5 +1,5 @@ /* Substring test for UTF-8 strings. - Copyright (C) 1999, 2002, 2006, 2009-2010 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2006, 2010 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This program is free software: you can redistribute it and/or modify it @@ -25,4 +25,5 @@ #define FUNC u8_strstr #define UNIT uint8_t #define U_STRCHR u8_strchr +#define U_STRMBTOUC u8_strmbtouc #include "u-strstr.h"