From 5f6d3d5fb66b640855664d23a519e21f25103c9f Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 17 Jul 2023 20:50:30 +0200 Subject: [PATCH] mbuiter: Optimize. * lib/mbuiter.h (struct mbuiter_multi): Add cur_max field. (mbui_init): Initialize it. (mbuiter_multi_next): Use it instead of MB_CUR_MAX. (mbuiter_multi_copy): Update. --- ChangeLog | 8 ++++++++ lib/mbuiter.h | 10 +++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1eea948669..88de38a2ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-07-17 Bruno Haible + + mbuiter: Optimize. + * lib/mbuiter.h (struct mbuiter_multi): Add cur_max field. + (mbui_init): Initialize it. + (mbuiter_multi_next): Use it instead of MB_CUR_MAX. + (mbuiter_multi_copy): Update. + 2023-07-17 Bruno Haible mbchar: Reduce size of 'struct mbchar'. diff --git a/lib/mbuiter.h b/lib/mbuiter.h index 6a06032941..9e2e90a235 100644 --- a/lib/mbuiter.h +++ b/lib/mbuiter.h @@ -121,6 +121,7 @@ struct mbuiter_multi before and after every mbuiter_multi_next invocation. */ bool next_done; /* true if mbui_avail has already filled the following */ + unsigned int cur_max; /* A cache of MB_CUR_MAX. */ struct mbchar cur; /* the current character: const char *cur.ptr pointer to current character The following are only valid after mbui_avail. @@ -160,7 +161,7 @@ mbuiter_multi_next (struct mbuiter_multi *iter) with_shift: #endif iter->cur.bytes = mbrtoc32 (&iter->cur.wc, iter->cur.ptr, - strnlen1 (iter->cur.ptr, MB_CUR_MAX), + strnlen1 (iter->cur.ptr, iter->cur_max), &iter->state); if (iter->cur.bytes == (size_t) -1) { @@ -225,6 +226,7 @@ mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi * #endif mbszero (&new_iter->state); new_iter->next_done = old_iter->next_done; + new_iter->cur_max = old_iter->cur_max; mb_copy (&new_iter->cur, &old_iter->cur); } @@ -234,13 +236,15 @@ typedef struct mbuiter_multi mbui_iterator_t; #define mbui_init(iter, startptr) \ ((iter).cur.ptr = (startptr), \ (iter).in_shift = false, mbszero (&(iter).state), \ - (iter).next_done = false) + (iter).next_done = false, \ + (iter).cur_max = MB_CUR_MAX) #else /* Optimized: no in_shift. */ #define mbui_init(iter, startptr) \ ((iter).cur.ptr = (startptr), \ mbszero (&(iter).state), \ - (iter).next_done = false) + (iter).next_done = false, \ + (iter).cur_max = MB_CUR_MAX) #endif #define mbui_avail(iter) \ (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur)) -- 2.39.5