Changeset 2797

Show
Ignore:
Timestamp:
03/25/08 11:55:16 (10 months ago)
Author:
ksprotte
Message:

bknr.datastore now uses trivial-utf-8 for string encode / decode

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/bknr/datastore/src/bknr.datastore.asd

    r2658 r2797  
    2222               :unit-test 
    2323               :bknr.utils 
    24                :bknr.indices) 
     24               :bknr.indices 
     25               :trivial-utf-8) 
    2526 
    2627  :components ((:module "data" :components ((:file "package") 
  • trunk/bknr/datastore/src/data/encoding-test.lisp

    r2774 r2797  
    101101(test:test string.random 
    102102  (test:for-all ((string (test:gen-string))) 
     103    (test:is (string= string (copy-by-encoding string))))) 
     104 
     105(test:test string.random.code-limited 
     106  (test:for-all ((string (test:gen-string :elements (test:gen-character :code-limit 10000)))) 
    103107    (test:is (string= string (copy-by-encoding string))))) 
    104108 
  • trunk/bknr/datastore/src/data/encoding.lisp

    r2768 r2797  
    151151    (write-byte n stream) 
    152152    (loop 
    153         for i from (- (* n 8) 8) downto 0 by 8 
    154         do (write-byte (ldb (byte 8 i) object) stream)))) 
     153       for i from (- (* n 8) 8) downto 0 by 8 
     154       do (write-byte (ldb (byte 8 i) object) stream)))) 
    155155 
    156156(defun %encode-rational (object stream) 
     
    170170  ;; Daher nicht FOR-ON verwenden. 
    171171  (loop for l = list then (cdr l) 
    172         while (consp l) 
    173         count 1)) 
     172     while (consp l) 
     173     count 1)) 
    174174 
    175175(defun %encode-list (object stream) 
    176176  (let ((len (count-conses object))) 
    177177    (%encode-integer len stream) 
    178   ;; Vorsicht, CMUCL LOOP hat einen Bug mit dotted lists. 
    179   ;; Daher nicht FOR-ON verwenden. 
     178    ;; Vorsicht, CMUCL LOOP hat einen Bug mit dotted lists. 
     179    ;; Daher nicht FOR-ON verwenden. 
    180180    (when (> len 0) 
    181181      (loop for l = object then (cdr l) 
    182            while (consp l) 
    183            do (encode (car l) stream) 
    184            finally (encode l stream))))) 
     182         while (consp l) 
     183         do (encode (car l) stream) 
     184         finally (encode l stream))))) 
    185185 
    186186(defun encode-list (object stream) 
     
    193193 
    194194(defun %encode-string (object stream) 
    195   (labels ((string-to-octets (string) 
    196              #+sbcl(sb-ext:string-to-octets string :external-format :utf-8) 
    197              #-sbcl(flexi-streams:string-to-octets string :external-format #.(flexi-streams:make-external-format :utf-8)))) 
    198     (let ((octets (string-to-octets object))) 
    199       (%encode-integer (length octets) stream) 
    200       (write-sequence octets stream)))) 
     195  (let ((octets (trivial-utf-8:string-to-utf-8-bytes object))) 
     196    (%encode-integer (length octets) stream) 
     197    (write-sequence octets stream))) 
    201198 
    202199(defun encode-string (object stream) 
     
    335332 
    336333(defun %decode-string (stream) 
    337   (labels ((octets-to-string-safe (octets) ; and portable 
     334  (labels ((octets-to-string-safe (octets) ; safe and portable 
    338335             (let ((flexi-streams:*substitution-char* #\?)) 
    339336               (flexi-streams:octets-to-string octets :external-format #.(flexi-streams:make-external-format :utf-8)))) 
    340337           (octets-to-string (octets) 
    341              #+sbcl (handler-case 
    342                         #+sbcl(sb-ext:octets-to-string octets :external-format :utf-8) 
    343                         (#+sbcl sb-impl::octet-decoding-error () 
    344                                 (octets-to-string-safe octets))) 
    345              #-sbcl (octets-to-string-safe octets))) 
     338             (handler-case 
     339                 (trivial-utf-8:utf-8-bytes-to-string octets) 
     340               (trivial-utf-8:utf-8-decoding-error ()                    
     341                 (octets-to-string-safe octets))))) 
    346342    (let* ((n (%decode-integer stream)) 
    347343           (buffer (make-array n :element-type '(unsigned-byte 8))))     
     
    411407              (list (%decode-integer stream)) 
    412408              (loop repeat (%decode-integer stream) 
    413                     collect (%decode-integer stream)))) 
     409                 collect (%decode-integer stream)))) 
    414410         (fill-pointer 
    415411          (if fill-pointer-p 
     
    451447                      (1 -1.0))) 
    452448              (iexpt (ldb (byte 8 23) bits)) 
    453               (expt (if (zerop iexpt) ; denormalized 
     449              (expt (if (zerop iexpt)   ; denormalized 
    454450                        -126 
    455451                        (- iexpt 127))) 
     
    472468                      (1 -1.0d0))) 
    473469              (iexpt (ldb (byte 11 52) bits)) 
    474               (expt (if (zerop iexpt) ; denormalized 
     470              (expt (if (zerop iexpt)   ; denormalized 
    475471                        -1022 
    476472                        (- iexpt 1023)))