r4881: *** empty log message ***
[kmrcl.git] / strings.lisp
index e12d9d9aeee29c2db549e0bad4410ae9ac67ff44..8af34976b6bd83e10863a8bf0a7eddfbce7540ec 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: strings.lisp,v 1.23 2003/05/08 19:19:08 kevin Exp $
+;;;; $Id: strings.lisp,v 1.24 2003/05/08 23:35:18 kevin Exp $
 ;;;;
 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
@@ -55,6 +55,15 @@ my algorithm. Does allegro use assembly?"
        (setq string (subseq string 0 (1- len))))))
   (excl:delimited-string-to-list string separator))
 
+;; From Larry Hunter with modifications
+(defun position-char (char string start max)
+  (declare (optimize (speed 3) (safety 0))
+          (fixnum start max) (simple-string string))
+  (do* ((i start (1+ i)))
+       ((= i max) nil)
+    (declare (fixnum i))
+    (when (char= char (schar string i)) (return i))))
+
 (defun #-allegro  delimited-string-to-list
        #+allegro my-delimited-string-to-list
        (string &optional (separator #\space) skip-terminal)
@@ -65,8 +74,8 @@ my algorithm. Does allegro use assembly?"
   (do* ((len (length string))
        (output '())
        (pos 0)
-       (end (position separator string :start pos :end len)
-            (position separator string :start pos :end len)))
+       (end (position-char separator string pos len)
+            (position-char separator string pos len)))
        ((null end)
        (if (< pos len)
            (push (subseq string pos) output)