From 57d7fbf1cb64ed175ce62552c70317e98a87db33 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 23 Mar 2006 13:16:53 +0000 Subject: Complete the other 2 arms of the cache update code. p4raw-id: //depot/perl@27583 --- sv.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/sv.c b/sv.c index bc0cde887c..5360a3002c 100644 --- a/sv.c +++ b/sv.c @@ -5623,6 +5623,48 @@ S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8, } } } + else if (byte > cache[3]) { + /* New position is between the existing pair of pairs. */ + const float keep_earlier + = THREEWAY_SQUARE(0, cache[3], byte, blen); + const float keep_later + = THREEWAY_SQUARE(0, byte, cache[1], blen); + + if (keep_later < keep_earlier) { + if (keep_later < existing) { + cache[2] = utf8; + cache[3] = byte; + } + } + else { + if (keep_earlier < existing) { + cache[0] = utf8; + cache[1] = byte; + } + } + } + else { + /* New position is before the existing pair of pairs. */ + const float keep_earlier + = THREEWAY_SQUARE(0, byte, cache[3], blen); + const float keep_later + = THREEWAY_SQUARE(0, byte, cache[1], blen); + + if (keep_later < keep_earlier) { + if (keep_later < existing) { + cache[2] = utf8; + cache[3] = byte; + } + } + else { + if (keep_earlier < existing) { + cache[0] = cache[2]; + cache[1] = cache[3]; + cache[2] = utf8; + cache[3] = byte; + } + } + } } ASSERT_UTF8_CACHE(cache); } -- cgit v1.2.1