+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.
/* 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
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)
/* 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
#define FUNC u16_strstr
#define UNIT uint16_t
#define U_STRCHR u16_strchr
+#define U_STRMBTOUC u16_strmbtouc
#include "u-strstr.h"
/* 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
#define FUNC u8_strstr
#define UNIT uint8_t
#define U_STRCHR u8_strchr
+#define U_STRMBTOUC u8_strmbtouc
#include "u-strstr.h"
Depends-on:
unistr/base
unistr/u16-strchr
+unistr/u16-strmbtouc
configure.ac:
gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strstr])
Depends-on:
unistr/base
unistr/u8-strchr
+unistr/u8-strmbtouc
configure.ac:
gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strstr])