X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=xml-utils.lisp;h=4dc37fc53140f68c91f1b0a2925628f362e8398d;hb=8bae678dafa346432c868f240dd172f347519305;hp=acbf5b3d6e5e66bc5941776881527813ea01b40b;hpb=4a5b626f01db51b02f969adb33ddad6aa9ee303a;p=kmrcl.git diff --git a/xml-utils.lisp b/xml-utils.lisp index acbf5b3..4dc37fc 100644 --- a/xml-utils.lisp +++ b/xml-utils.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: xml-utils.lisp,v 1.8 2003/06/06 21:59:30 kevin Exp $ +;;;; $Id: xml-utils.lisp,v 1.9 2003/06/07 03:51:42 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -76,8 +76,23 @@ (setq done t)))) (values startpos endpos nextpos))) +(defun fast-string-search (substr str substr-length startpos endpos) + (declare (simple-string substr str) + (fixnum substr-length startpos endpos) + (optimize (speed 3) (space 0) (safety 0))) + (do* ((pos startpos (1+ pos)) + (lastpos (- endpos substr-length))) + ((> pos lastpos) nil) + (declare (fixnum pos lastpos)) + (do ((i 0 (1+ i))) + ((= i substr-length) + (return-from fast-string-search pos)) + (declare (fixnum i)) + (unless (char= (schar str (+ i pos)) (schar substr i)) + (return nil))))) + (defun find-start-tag (tag taglen xmlstr start-pos end-xmlstr) - (let ((bracketpos (position-char #\< xmlstr start-pos end-xmlstr))) + (let ((bracketpos (seaposition-char #\< xmlstr start-pos end-xmlstr))) (when bracketpos (let* ((starttag (1+ bracketpos)) (endtag (+ starttag taglen)))