;;;; 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
;;;;
(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)))