# HG changeset patch # User Dave Love # Date 954590637 0 # Node ID e47fb07b39d4936b05fac002554c948088ca70a5 # Parent bbe7b99b5b284b050d56678adb56cd04687157bb Provide mule-utils. (string-to-sequence): Simplify and speed up. diff -r bbe7b99b5b28 -r e47fb07b39d4 lisp/international/mule-util.el --- a/lisp/international/mule-util.el Sat Apr 01 11:58:23 2000 +0000 +++ b/lisp/international/mule-util.el Sat Apr 01 12:03:57 2000 +0000 @@ -31,23 +31,29 @@ (defun string-to-sequence (string type) "Convert STRING to a sequence of TYPE which contains characters in STRING. TYPE should be `list' or `vector'." - (let ((len (length string)) - (i 0) - val) +;;; (let ((len (length string)) +;;; (i 0) +;;; val) (cond ((eq type 'list) - (setq val (make-list len 0)) - (let ((l val)) - (while (< i len) - (setcar l (aref string i)) - (setq l (cdr l) i (1+ i))))) + ;; Applicable post-Emacs 20.2 and asymptotically ~10 times + ;; faster than the code below: + (append string nil)) +;;; (setq val (make-list len 0)) +;;; (let ((l val)) +;;; (while (< i len) +;;; (setcar l (aref string i)) +;;; (setq l (cdr l) i (1+ i)))))) ((eq type 'vector) - (setq val (make-vector len 0)) - (while (< i len) - (aset val i (aref string i)) - (setq i (1+ i)))) + ;; As above. + (vconcat string)) +;;; (setq val (make-vector len 0)) +;;; (while (< i len) +;;; (aset val i (aref string i)) +;;; (setq i (1+ i)))) (t (error "Invalid type: %s" type))) - val)) +;;; val) +) ;;;###autoload (defsubst string-to-list (string) @@ -187,7 +193,7 @@ Optional 3rd argument NIL-FOR-TOO-LONG non-nil means return nil even if ALIST is not deep enough." (or (nested-alist-p alist) - (error "invalid argument %s" alist)) + (error "Invalid argument %s" alist)) (or len (setq len (length keyseq))) (let ((i (or start 0))) @@ -288,5 +294,6 @@ (detect-coding-region from to)))) +(provide 'mule-util) + ;;; mule-util.el ends here -