Skip to content

Commit ce98015

Browse files
committed
LN_CORE: Improve list->utf8string (15% better than 8a65b9a)
1 parent 4dcf651 commit ce98015

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

modules/ln_core/utf8string.scm

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7676
(define (utf8string->list s) (map integer->utf8char (utf8string->unicode s)))
7777

7878
(define (list->utf8string lst)
79-
(define len 0)
80-
(for-each (lambda (l) (set! len (fx+ len (string-length l)))) lst)
81-
(let ((offset 0)
82-
(result (make-string len)))
83-
(for-each (lambda (s)
84-
(for-each (lambda (c) (string-set! result offset c) (set! offset (fx+ offset 1))) (string->list s))
85-
) lst)
86-
result
87-
))
79+
(let* ((len (do ((i 0 (fx+ i (string-length (car lst))))
80+
(lst lst (cdr lst)))
81+
((null? lst) i)))
82+
(result (make-string len)))
83+
(do ((lst lst (cdr lst))
84+
(offset 0 (fx+ offset (string-length (car lst)))))
85+
((null? lst) result)
86+
(do ((strlst (string->list (car lst)) (cdr strlst))
87+
(offset2 offset (fx+ offset2 1)))
88+
((null? strlst) offset2)
89+
(string-set! result offset2 (car strlst))))))
8890

8991
(define (utf8substring s ofs len)
9092
(list->utf8string (sublist (utf8string->list s) ofs len)))

0 commit comments

Comments
 (0)