# HG changeset patch # User Jim Blandy # Date 781654365 0 # Node ID 698990d4feca3589df7c9147018b83b52799927f # Parent 9f797989b8170e61d61b35fea3809de93583fe6b * buffer.h (struct buffer): New members: newline_cache, width_run_cache, width_table, and cache_long_line_scans. diff -r 9f797989b817 -r 698990d4feca src/buffer.h --- a/src/buffer.h Sat Oct 08 22:12:12 1994 +0000 +++ b/src/buffer.h Sat Oct 08 22:12:45 1994 +0000 @@ -200,6 +200,24 @@ buffer */ Lisp_Object markers; + /* If the long line scan cache is enabled (i.e. the buffer-local + variable cache-long-line-scans is non-nil), newline_cache + points to the newline cache, and width_run_cache points to the + width run cache. + + The newline cache records which stretches of the buffer are + known *not* to contain newlines, so that they can be skipped + quickly when we search for newlines. + + The width run cache records which stretches of the buffer are + known to contain characters whose widths are all the same. If + the width run cache maps a character to a value > 0, that value is + the character's width; if it maps a character to zero, we don't + know what its width is. This allows compute_motion to process + such regions very quickly, using algebra instead of inspecting + each character. See also width_table, below. */ + struct region_cache *newline_cache; + struct region_cache *width_run_cache; /* Everything from here down must be a Lisp_Object */ @@ -304,6 +322,18 @@ /* Position where the overlay lists are centered. */ Lisp_Object overlay_center; + + /* True if the newline position cache and width run cache are + enabled. See search.c and indent.c. */ + Lisp_Object cache_long_line_scans; + + /* If the width run cache is enabled, this table contains the + character widths width_run_cache (see above) assumes. When we + do a thorough redisplay, we compare this against the buffer's + current display table to see whether the display table has + affected the widths of any characters. If it has, we + invalidate the width run cache, and re-initialize width_table. */ + Lisp_Object width_table; }; /* This points to the current buffer. */