summaryrefslogtreecommitdiff
path: root/src/character.h
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2014-07-08 11:17:04 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2014-07-08 11:17:04 +0400
commitf298de5264c86bbb76ccec727779dabe16e6b9c3 (patch)
tree05c709251b6982c042f04498510111e0fa03b82e /src/character.h
parent12dc5429352223f7ba8314d2e16177036a762733 (diff)
downloademacs-f298de5264c86bbb76ccec727779dabe16e6b9c3.tar.gz
* chartab.c (char_table_translate): Move to...
* character.h (char_table_translate): ... inline function here. Avoid Faref and assume that args are always valid. This helps to speedup search, which is especially important for a huge buffers. * lisp.h (char_table_translate): Remove prototype.
Diffstat (limited to 'src/character.h')
-rw-r--r--src/character.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/character.h b/src/character.h
index 18aad5b8f41..66cd4e47ef8 100644
--- a/src/character.h
+++ b/src/character.h
@@ -667,6 +667,20 @@ extern Lisp_Object string_escape_byte8 (Lisp_Object);
#define GET_TRANSLATION_TABLE(id) \
(XCDR (XVECTOR (Vtranslation_table_vector)->contents[(id)]))
+/* Look up the element in char table OBJ at index CH, and return it as
+ an integer. If the element is not a character, return CH itself. */
+
+INLINE int
+char_table_translate (Lisp_Object obj, int ch)
+{
+ /* This internal function is expected to be called with valid arguments,
+ so there is a eassert instead of CHECK_xxx for the sake of speed. */
+ eassert (CHAR_VALID_P (ch));
+ eassert (CHAR_TABLE_P (obj));
+ obj = CHAR_TABLE_REF (obj, ch);
+ return CHARACTERP (obj) ? XINT (obj) : ch;
+}
+
INLINE_HEADER_END
#endif /* EMACS_CHARACTER_H */