Subject: Re: Substring?
From: Erik Naggum <erik@naggum.net>
Date: Fri, 10 Aug 2001 18:18:04 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3206456282836739@naggum.net>

* theglauber@my-deja.com (glauber)
> I really hoped that there would be a function to copy an "array slice"
> that would map in a low level to a memcpy, but there doesn't seem to
> be anything in the arrays dictionary in the spec.

  You can do better than that.  An adjustable, displaced array may be your
  answer.  Suppose you have a string and need to compute a hash value of a
  substring and the hash function does not take :start and :end arguments.
  You could wrap the call to the hash function in something like this:

(defun funcall-with-substring (function string &key (start 0) end)
  (let ((substring (load-time-value (make-array 0 :element-type 'character :adjustable t))))
    (funcall function (adjust-array substring (- (or end (length string)) start)
				    :displaced-to string
				    :displaced-index-offset start))))

///