r4881: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 8 May 2003 23:35:18 +0000 (23:35 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 8 May 2003 23:35:18 +0000 (23:35 +0000)
package.lisp
strings.lisp

index 4cba78b396287724a906d734cbe1f76e7808c136..a309d54d3393af4125566649fa87cf1f77559189 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: package.lisp,v 1.28 2003/05/07 21:05:44 kevin Exp $
+;;;; $Id: package.lisp,v 1.29 2003/05/08 23:35:18 kevin Exp $
 ;;;;
 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
    #:until
    #:while
    #:for
+
+   ;; strings.lisp
    #:mapappend
    #:mapcar-append-string
    #:mapcar2-append-string
+   #:position-char
    #:delimited-string-to-list
    #:list-to-delimited-string
    #:flatten
-   #:append-sublists
+   
    #:indent-spaces
    #:print-list
    #:print-rows
    #:file-subst
    #:stream-subst
+
+   ;; lists.lisp
    #:remove-tree-if
    #:find-tree
    #:with-each-file-line
    #:with-each-stream-line
    #:remove-keyword
    #:remove-keywords
-   #:nsubseq
+   #:append-sublists
 
+   #:nsubseq
    ;; math.lisp
    #:ensure-integer
    
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)