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? [...]

Hello,

you can probably hack something together in pure CHICKEN Scheme using move-memory!, pointer-offset and direct access to the lolevel slots of strings.

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.

cu,
Thomas


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to