vte r2202 - in trunk: . src



Author: cpwilson
Date: Wed Nov 26 19:36:46 2008
New Revision: 2202
URL: http://svn.gnome.org/viewvc/vte?rev=2202&view=rev

Log:
2008-11-26  Chris Wilson  <chris chris-wilson co uk>

	* src/Makefile.am:
	* src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
	* src/vteseq-n.c (vteseq_n_lookup):
	* src/vteseq.c (_vte_sequence_get_handler):
	Manually modify (and record those modifications in the Makefile)
	the autogenerated gperf source code so that we return the sequence
	handler directly from the lookup function, or NULL on failure.
	So is this pain worth it?



Modified:
   trunk/ChangeLog
   trunk/src/Makefile.am
   trunk/src/vteseq-2.c
   trunk/src/vteseq-n.c
   trunk/src/vteseq.c

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Wed Nov 26 19:36:46 2008
@@ -32,6 +32,10 @@
 	unitable.KSX1001
 
 # gperf - files need to be modified afterwards
+# In particular:
+# 1. The lookup needs to return the VteTerminalSequenceHandler, or NULL.
+# 2. The functions need to be declared static.
+# 3. For vtese-2, the strlen is known so remove the redudant parameter.
 gperf: vteseq-2.gperf vteseq-n.gperf
 	gperf vteseq-2.gperf -m 100 > vteseq-2.c
 	gperf vteseq-n.gperf -m 100 > vteseq-n.c

Modified: trunk/src/vteseq-2.c
==============================================================================
--- trunk/src/vteseq-2.c	(original)
+++ trunk/src/vteseq-2.c	Wed Nov 26 19:36:46 2008
@@ -45,7 +45,7 @@
 #endif
 #endif
 static unsigned int
-vteseq_2_hash (register const char *str, register unsigned int len)
+vteseq_2_hash (register const char *str)
 {
   static const unsigned short asso_values[] =
     {
@@ -77,7 +77,7 @@
       361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
       361, 361, 361, 361, 361, 361, 361, 361, 361, 361
     };
-  return len + asso_values[(unsigned char)str[1]+6] + asso_values[(unsigned char)str[0]+14];
+  return 2 + asso_values[(unsigned char)str[1]+6] + asso_values[(unsigned char)str[0]+14];
 }
 
 #ifdef __GNUC__
@@ -86,14 +86,12 @@
 __attribute__ ((__gnu_inline__))
 #endif
 #endif
-const struct vteseq_2_struct *
-vteseq_2_lookup (register const char *str, register unsigned int len)
+static VteTerminalSequenceHandler
+vteseq_2_lookup (register const char *str)
 {
   enum
     {
       TOTAL_KEYWORDS = 221,
-      MIN_WORD_LENGTH = 2,
-      MAX_WORD_LENGTH = 2,
       MIN_HASH_VALUE = 2,
       MAX_HASH_VALUE = 360
     };
@@ -544,9 +542,8 @@
       {"LE", vte_sequence_handler_LE}
     };
 
-  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
     {
-      register int key = vteseq_2_hash (str, len);
+      register int key = vteseq_2_hash (str);
 
       if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
         {
@@ -1250,8 +1247,8 @@
           {
             register const char *s = resword->seq;
 
-            if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
-              return resword;
+            if (str[0] == s[0] && str[1] == s[1] && s[2] == '\0')
+              return resword->handler;
           }
         }
     }

Modified: trunk/src/vteseq-n.c
==============================================================================
--- trunk/src/vteseq-n.c	(original)
+++ trunk/src/vteseq-n.c	Wed Nov 26 19:36:46 2008
@@ -212,7 +212,7 @@
 __attribute__ ((__gnu_inline__))
 #endif
 #endif
-const struct vteseq_n_struct *
+static VteTerminalSequenceHandler
 vteseq_n_lookup (register const char *str, register unsigned int len)
 {
   enum
@@ -812,7 +812,7 @@
             register const char *s = resword->seq + vteseq_n_pool;
 
             if (*str == *s && !memcmp (str + 1, s + 1, len - 1))
-              return resword;
+              return resword->handler;
           }
         }
     }

Modified: trunk/src/vteseq.c
==============================================================================
--- trunk/src/vteseq.c	(original)
+++ trunk/src/vteseq.c	Wed Nov 26 19:36:46 2008
@@ -4000,28 +4000,17 @@
 	return FALSE;
 }
 
-
-
-
 /* LOOKUP */
 
-static const struct vteseq_2_struct *
-vteseq_2_lookup (register const char *str, register unsigned int len);
-
 #include"vteseq-2.c"
-
-static const struct vteseq_n_struct *
-vteseq_n_lookup (register const char *str, register unsigned int len);
-
 #include"vteseq-n.c"
 
-
 VteTerminalSequenceHandler
 _vte_sequence_get_handler (const char *code)
 {
 	/* all codes at least two characters... */
 	if (code[2] == '\0')
-		return (vteseq_2_lookup ((const char *)code, 2))->handler;
+		return vteseq_2_lookup ((const char *)code);
 	else
-		return (vteseq_n_lookup ((const char *)code, strlen (code)))->handler;
+		return vteseq_n_lookup ((const char *)code, strlen (code));
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]