Author: ehuelsmann Date: Wed May 3 17:12:42 2006 New Revision: 148
Modified: trunk/parse-message.lisp trunk/utility.lisp Log: Make message parsing more memory efficient by using displaced arrays.
Partially resolve issue #7.
Modified: trunk/parse-message.lisp ============================================================================== --- trunk/parse-message.lisp (original) +++ trunk/parse-message.lisp Wed May 3 17:12:42 2006 @@ -112,8 +112,8 @@
(defun ctcp-type-p (string type) "Is the `string' actually a representation of the CTCP `type'?" - (if (string-equal (subseq string 1 (min (length string) - (1+ (length (symbol-name type))))) + (if (string-equal (substring string 1 (min (length string) + (1+ (length (symbol-name type))))) type) type nil))
Modified: trunk/utility.lisp ============================================================================== --- trunk/utility.lisp (original) +++ trunk/utility.lisp Wed May 3 17:12:42 2006 @@ -106,6 +106,14 @@ "Create a socket connected to `server':`port' and return stream for it." (trivial-sockets:open-stream server port))
+(defun substring (string start &optional end) + (let* ((end-index (if end end (length string))) + (seq-len (- end-index start))) + (make-array seq-len + :element-type (array-element-type string) + :displaced-to string + :displaced-index-offset start))) +
(defun cut-between (string start-char end-chars &key (start 0) (cut-extra t)) "If `start-char' is not nil, cut string between `start-char' and any @@ -127,11 +135,11 @@ (if (and end-position start-char) (if (eql (char string start) start-char) (values end-position - (subseq string cut-from end-position)) + (substring string cut-from end-position)) (values start nil)) (if end-position (values end-position - (subseq string cut-from end-position)) + (substring string cut-from end-position)) (values start nil)))))
(defun cut-before (string substring end-chars &key (start 0) (cut-extra t)) @@ -146,7 +154,7 @@ (let ((end-position (search substring string :start2 start))) (if end-position (values (+ end-position (1- (length substring))) - (subseq string (if (and cut-extra + (substring string (if (and cut-extra (< start end-position)) (1+ start) start) end-position)) (let ((end-position (position-if #'(lambda (x) @@ -155,7 +163,7 @@ (cut-from (if cut-extra (1+ start) start))) (if end-position (values end-position - (subseq string cut-from end-position)) + (substring string cut-from end-position)) (values start nil))))))