/* Header file: Caching facts about regions of the buffer, for optimization.
-Copyright (C) 1985-1986, 1993, 1995, 2001-2011
- Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993, 1995, 2001-2016 Free Software Foundation,
+Inc.
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
+#ifndef EMACS_REGION_CACHE_H
+#define EMACS_REGION_CACHE_H
/* This code was written by Jim Blandy <jimb@cs.oberlin.edu> to help
GNU Emacs better support the gene editor written for the University
existing data structure, and disturb as little of the existing code
as possible.
- So here's the tack. We add some caching to the scan_buffer
+ So here's the tack. We add some caching to the find_newline
function, so that when it searches for a newline, it notes that the
region between the start and end of the search contained no
newlines; then, the next time around, it consults this cache to see
this region has property P" vs. "I don't know if this region has
property P or not." */
+struct buffer;
/* Allocate, initialize and return a new, empty region cache. */
struct region_cache *new_region_cache (void);
no newlines", in the case of the line cache). */
extern void know_region_cache (struct buffer *BUF,
struct region_cache *CACHE,
- EMACS_INT START, EMACS_INT END);
+ ptrdiff_t START, ptrdiff_t END);
/* Indicate that a section of BUF has changed, to invalidate CACHE.
HEAD is the number of chars unchanged at the beginning of the buffer.
args to pass are the same before and after such an operation.) */
extern void invalidate_region_cache (struct buffer *BUF,
struct region_cache *CACHE,
- EMACS_INT HEAD, EMACS_INT TAIL);
+ ptrdiff_t HEAD, ptrdiff_t TAIL);
/* The scanning functions.
Basically, if you're scanning forward/backward from position POS,
- and region_cache_forward/backward returns true, you can skip all
- the text between POS and *NEXT. And if the function returns false,
+ and region_cache_forward/backward returns nonzero, you can skip all
+ the text between POS and *NEXT. And if the function returns zero,
you should examine all the text from POS to *NEXT, and call
know_region_cache depending on what you find there; this way, you
might be able to avoid scanning it again. */
-/* Return true if the text immediately after POS in BUF is known, for
- the purposes of CACHE. If NEXT is non-zero, set *NEXT to the nearest
- position after POS where the knownness changes. */
-extern int region_cache_forward (struct buffer *BUF,
- struct region_cache *CACHE,
- EMACS_INT POS,
- EMACS_INT *NEXT);
-
-/* Return true if the text immediately before POS in BUF is known, for
- the purposes of CACHE. If NEXT is non-zero, set *NEXT to the nearest
- position before POS where the knownness changes. */
-extern int region_cache_backward (struct buffer *BUF,
- struct region_cache *CACHE,
- EMACS_INT POS,
- EMACS_INT *NEXT);
+/* Return the value for the text immediately after POS in BUF if the value
+ is known, for the purposes of CACHE, and return zero otherwise.
+ If NEXT is non-zero, set *NEXT to the nearest
+ position after POS where the knowledge changes. */
+extern int region_cache_forward (struct buffer *buf, struct region_cache *c,
+ ptrdiff_t pos, ptrdiff_t *next);
+
+/* Likewise, except before POS rather than after POS. */
+extern int region_cache_backward (struct buffer *buf, struct region_cache *c,
+ ptrdiff_t pos, ptrdiff_t *next);
+
+#endif /* EMACS_REGION_CACHE_H */