Move reverse-string into ustring.
authorChris Hanson <org/chris-hanson/cph>
Wed, 22 Feb 2017 10:05:16 +0000 (02:05 -0800)
committerChris Hanson <org/chris-hanson/cph>
Wed, 22 Feb 2017 10:05:16 +0000 (02:05 -0800)
src/runtime/runtime.pkg
src/runtime/string.scm
src/runtime/ustring.scm

index 547d9dfd89fc48f2aa40272e31675a42870e00fb..934888dedd85657c79331229b7ea45937d774069 100644 (file)
@@ -1036,8 +1036,6 @@ USA.
          guarantee-substring
          guarantee-substring-end-index
          guarantee-substring-start-index
-         reverse-string
-         reverse-substring
          string-pad-left
          string-pad-right
          string-search-all
@@ -1092,6 +1090,7 @@ USA.
          (substring string-copy)
          list->string
          make-string
+         reverse-string
          string
          string*
          string->list
index b2a6bac1a8e0cdf33890e4e1b5682e1fea5115d2..cde00ab1bf5c6c651849e67771beee3d15306c4d 100644 (file)
@@ -55,7 +55,7 @@ USA.
   vector-8b-find-previous-char-ci
   (vector-8b-ref 2)
   (vector-8b-set! 3))
-\f
+
 ;;;; Basic Operations
 
 (define (make-legacy-string k #!optional char)
@@ -71,23 +71,6 @@ USA.
                      (if (default-object? ascii)
                          ascii
                          (integer->char ascii))))
-
-(define (reverse-string string)
-  (guarantee-string string 'REVERSE-STRING)
-  (%reverse-substring string 0 (string-length string)))
-
-(define (reverse-substring string start end)
-  (guarantee-substring string start end 'REVERSE-SUBSTRING)
-  (%reverse-substring string start end))
-
-(define (%reverse-substring string start end)
-  (let ((n (fix:- end start)))
-    (let ((result (make-legacy-string n)))
-      (do ((i start (fix:+ i 1))
-          (j (fix:- n 1) (fix:- j 1)))
-         ((fix:= i end))
-       (string-set! result j (string-ref string i)))
-      result)))
 \f
 ;;;; Trim
 
@@ -313,7 +296,7 @@ USA.
 (define (%bm-substring-search-backward text tstart tend pattern pstart pend)
   (let ((m (fix:- pend pstart))
        (pend-1 (fix:- pend 1))
-       (rpattern (reverse-substring pattern pstart pend)))
+       (rpattern (reverse-string (string-slice pattern pstart pend))))
     (let ((tstart+m (fix:+ tstart m))
          (lambda* (compute-last-occurrence-function rpattern 0 m))
          (gamma
@@ -369,8 +352,9 @@ USA.
 (define (compute-good-suffix-function pattern pstart pend gamma0)
   (let ((m (fix:- pend pstart)))
     (let ((pi
-          (compute-prefix-function (reverse-substring pattern pstart pend)
-                                   0 m))
+          (compute-prefix-function
+           (reverse-string (string-slice pattern pstart pend))
+           0 m))
          (gamma (make-vector m gamma0))
          (m-1 (fix:- m 1)))
       (do ((l 0 (fix:+ l 1)))
index 1f34cc2665333e66faf25e9400f81301173a9643..b8c2590e3721daedda57b8615971a091d1fbac91 100644 (file)
@@ -830,13 +830,21 @@ USA.
 
 (define (burst-string string delimiter allow-runs?)
   ((string-splitter delimiter allow-runs?) string))
-
+\f
 (define (string-replace string char1 char2)
   (guarantee bitless-char? char1 'string-replace)
   (guarantee bitless-char? char2 'string-replace)
   (string-map (lambda (char)
                (if (char=? char char1) char2 char))
              string))
+
+(define (reverse-string string)
+  (let ((builder (string-builder)))
+    (do ((i (fix:- (string-length string) 1)
+           (fix:- i 1)))
+       ((not (fix:>= i 0)))
+      (builder (string-ref string i)))
+    (builder)))
 \f
 (define (string-8-bit? string)
   (receive (string start end) (translate-slice string 0 (string-length string))