Revision: 7269
Author: deton.kih
Date: Thu Aug 18 04:16:49 2011
Log: * Replace large alist to hash-table for performance.
* scm/tutcode.scm
- (tutcode-reverse-rule-hash-table):
Rename from tutcode-reverse-rule-alist.
- (tutcode-reverse-kigou-rule-hash-table):
Rename from tutcode-reverse-kigou-rule-alist.
- (tutcode-reverse-bushudic-hash-table):
Rename from tutcode-reverse-bushudic-alist.
- (tutcode-bushu-decompose):
Change to use hash-table instead of alist.
- (tutcode-rule->reverse-hash-table): New.
Extracted from tutcode-bushu-decompose and tutcode-reverse-find-seq.
- (tutcode-reverse-find-seq):
Change to use hash-table instead of alist.
http://code.google.com/p/uim/source/detail?r=7269
Modified:
/trunk/scm/tutcode.scm
=======================================
--- /trunk/scm/tutcode.scm Fri Aug 12 01:52:05 2011
+++ /trunk/scm/tutcode.scm Thu Aug 18 04:16:49 2011
@@ -272,7 +272,7 @@
;;; * ¼«Æ°¥Ø¥ë¥×ɽ¼¨µ¡Ç½¤òÄɲá£
;;; * Êä´°/ͽ¬ÆþÎÏ¡¦½Ï¸ì¥¬¥¤¥Éµ¡Ç½¤òÄɲá£
-(require-extension (srfi 1 2 8))
+(require-extension (srfi 1 2 8 69))
(require "generic.scm")
(require "generic-predict.scm")
(require-custom "tutcode-custom.scm")
@@ -314,15 +314,15 @@
(define tutcode-rule ())
;;; 2¥¹¥È¥í¡¼¥¯µ¹æÆþÎϥ⡼¥ÉÍÑ¥³¡¼¥Éɽ
(define tutcode-kigou-rule ())
-;;; tutcode-rule¤«¤éºîÀ®¤¹¤ë¡¢µÕ°ú¤¸¡º÷(´Á»ú¤«¤éÂǸ°¥ê¥¹¥È¤ò¼èÆÀ)ÍÑalist¡£
+;;;
tutcode-rule¤«¤éºîÀ®¤¹¤ë¡¢µÕ°ú¤¸¡º÷(´Á»ú¤«¤éÂǸ°¥ê¥¹¥È¤ò¼èÆÀ)ÍÑhash-table
;;; (¼«Æ°¥Ø¥ë¥×ÍѤÎÉô¼ó¹çÀ®ÊÑ´¹¸õÊ両º÷»þ¤Î¹â®²½¤Î¤¿¤á)
-(define tutcode-reverse-rule-alist ())
-;;; tutcode-kigou-rule¤«¤éºîÀ®¤¹¤ë¡¢µÕ°ú¤¸¡º÷ÍÑalist¡£
-(define tutcode-reverse-kigou-rule-alist ())
+(define tutcode-reverse-rule-hash-table ())
+;;; tutcode-kigou-rule¤«¤éºîÀ®¤¹¤ë¡¢µÕ°ú¤¸¡º÷ÍÑhash-table¡£
+(define tutcode-reverse-kigou-rule-hash-table ())
;;; tutcode-bushudic¤«¤éºîÀ®¤¹¤ë¡¢
-;;; µÕ°ú¤¸¡º÷(¹çÀ®¸å¤Îʸ»ú¤«¤é¹çÀ®ÍѤÎ2ʸ»ú¤ò¼èÆÀ)ÍÑalist¡£
-;;; (¼«Æ°¥Ø¥ë¥×ÍѤÎÉô¼ó¹çÀ®ÊÑ´¹¸õÊ両º÷»þ¤Î¹â®²½¤Î¤¿¤á)
-(define tutcode-reverse-bushudic-alist ())
+;;; µÕ°ú¤¸¡º÷(¹çÀ®¸å¤Îʸ»ú¤«¤é¹çÀ®ÍѤÎ2ʸ»ú¤ò¼èÆÀ)ÍÑhash-table¡£
+;;;
(¼«Æ°¥Ø¥ë¥×ÍѤÎÉô¼ó¹çÀ®ÊÑ´¹¸õÊ両º÷»þ¤Î¹â®²½ÍÑ¡£¤¿¤À¤·½é²óºîÀ®»þ¤¬ÃÙ¤¤)
+(define tutcode-reverse-bushudic-hash-table ())
;;; stroke-help¤Ç¡¢²¿¤â¥¡¼ÆþÎϤ¬Ìµ¤¤¾ì¹ç¤Ëɽ¼¨¤¹¤ëÆâÍÆ¤Îalist¡£
;;; (Ëè²ótutcode-rule¤òÁ´¤Æ¤Ê¤á¤ÆºîÀ®¤¹¤ë¤ÈÃÙ¤¤¤·¡¢
;;; ºÇ½é¤Î¥Ú¡¼¥¸¤Ï¸ÇÄêÆâÍÆ¤Ê¤Î¤Ç¡¢°ìÅÙºîÀ®¤·¤¿¤â¤Î¤ò»È¤¤²ó¤¹)
@@ -4014,15 +4014,23 @@
;;; @param c ʬ²òÂоݤÎʸ»ú
;;; @return ʬ²ò¤·¤Æ¤Ç¤¤¿2¤Ä¤ÎÉô¼ó¤Î¥ê¥¹¥È¡£Ê¬²ò¤Ç¤¤Ê¤«¤Ã¤¿¤È¤¤Ï#f
(define (tutcode-bushu-decompose c)
- (if (null? tutcode-reverse-bushudic-alist)
- (set! tutcode-reverse-bushudic-alist
- (map
- (lambda (elem)
- (cons (caadr elem) (caar elem)))
- tutcode-bushudic)))
- (let ((res (assoc c tutcode-reverse-bushudic-alist)))
- (and res
- (cdr res))))
+ (if (null? tutcode-reverse-bushudic-hash-table)
+ (set! tutcode-reverse-bushudic-hash-table
+ (tutcode-rule->reverse-hash-table tutcode-bushudic)))
+ (hash-table-ref/default tutcode-reverse-bushudic-hash-table c #f))
+
+;;; tutcode-rule·Á¼°¤Î¥ê¥¹¥È¤«¤é¡¢µÕ°ú¤¸¡º÷(´Á»ú¤«¤éÂǸ°¥ê¥¹¥È¤ò¼èÆÀ)ÍѤÎ
+;;; hash-table¤òºî¤ë
+;;; @param rule tutcode-rule·Á¼°¤Î¥ê¥¹¥È
+;;; @return hash-table
+(define (tutcode-rule->reverse-hash-table rule)
+ (alist->hash-table
+ (filter-map
+ (lambda (elem)
+ (and (string? (caadr elem)) ; 'tutcode-mazegaki-startÅù¤Ï½ü¤¯
+ (cons (caadr elem) (caar elem))))
+ rule)
+ string=?))
;;;
¼«Æ°¥Ø¥ë¥×:bushu.help¥Õ¥¡¥¤¥ë¤ò¸¡º÷¤·¤ÆÂоÝʸ»ú¤Î¥Ø¥ë¥×(2¤Ä¤ÎÉô¼ó)¤ò¼èÆÀ¤¹¤ë
;;; @param c ÂоÝʸ»ú
@@ -4315,28 +4323,21 @@
;;; @param rule tutcode-rule
;;; @return ÆþÎÏ¥¡¼¤Î¥ê¥¹¥È¡£tutcode-ruleÃæ¤Ëc¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
(define (tutcode-reverse-find-seq c rule)
- (let*
- ((make-reverse-rule-alist
- (lambda (r)
- (map
- (lambda (elem)
- (cons (caadr elem) (caar elem)))
- r)))
- (alist
- (if (eq? rule tutcode-kigou-rule)
- (begin
- (if (null? tutcode-reverse-kigou-rule-alist)
- (set! tutcode-reverse-kigou-rule-alist
- (make-reverse-rule-alist rule)))
- tutcode-reverse-kigou-rule-alist)
- (begin
- (if (null? tutcode-reverse-rule-alist)
- (set! tutcode-reverse-rule-alist
- (make-reverse-rule-alist rule)))
- tutcode-reverse-rule-alist)))
- (res (assoc c alist)))
- (and res
- (cdr res))))
+ (and (string? c)
+ (let*
+ ((hash-table
+ (if (eq? rule tutcode-kigou-rule)
+ (begin
+ (if (null? tutcode-reverse-kigou-rule-hash-table)
+ (set! tutcode-reverse-kigou-rule-hash-table
+ (tutcode-rule->reverse-hash-table rule)))
+ tutcode-reverse-kigou-rule-hash-table)
+ (begin
+ (if (null? tutcode-reverse-rule-hash-table)
+ (set! tutcode-reverse-rule-hash-table
+ (tutcode-rule->reverse-hash-table rule)))
+ tutcode-reverse-rule-hash-table))))
+ (hash-table-ref/default hash-table c #f))))
;;; ¸½ºß¤Îstate¤¬preedit¤ò»ý¤Ä¤«¤É¤¦¤«¤òÊÖ¤¹¡£
;;; @param pc ¥³¥ó¥Æ¥¥¹¥È¥ê¥¹¥È