On Fri, 19 May 2006, Graham Fawcett wrote:
> While speaking of buffers, is there an efficient, low-level way to set
> a substring within an existing string? [...]
But you can also always resort to C:
(define (substring-set! buffer replace #!optional (start 0) (count
(string-length replace))
(if (or (< start 0)
(< count 0)
(> start (string-length buffer))
(> count (string-length replace))
(> count (- (string-length buffer) start)))
(error
'substring-set! "start and/or count parameters have bad values"
buffer replace start count))
((foreign-lambda* void ((scheme-pointer buffer) (scheme-pointer replace)
(integer start) (integer count))
"memmove(buffer + start, replace, count);")
buffer replace start count))
Beware that the above code is completely untested, I just hacked it
quickly into my mail client.