Changeset 2808

Show
Ignore:
Timestamp:
03/27/08 14:35:32 (10 months ago)
Author:
ksprotte
Message:

encoding now supports wide chars

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/bknr/datastore/src/data/encoding-test.lisp

    r2797 r2808  
    9797(test-encoding char.3 #\Rubout) 
    9898(test-encoding char.4 (code-char 255)) 
     99 
     100(test:test char.random 
     101  (test:for-all ((char (test:gen-character))) 
     102    (test:is (char= char (copy-by-encoding char))))) 
    99103 
    100104;; strings 
  • trunk/bknr/datastore/src/data/encoding.lisp

    r2797 r2808  
    122122;;;; workaround 
    123123 
    124 (defun %read-char (stream &optional (eof-error-p t) eof-value) 
    125   (let ((b (read-byte stream eof-error-p -1))) 
    126     (if (eql b -1) 
    127         eof-value 
    128         (code-char b)))) 
     124(declaim (inline %read-char %write-char)) 
     125(defun %read-char (stream)   
     126  (code-char (%decode-uint32 stream))) 
    129127 
    130128(defun %write-char (char stream) 
     129  (%encode-int32 (char-code char) stream)) 
     130 
     131;;;; tags 
     132(declaim (inline %read-tag %write-tag)) 
     133(defun %read-tag (stream)   
     134  (code-char (read-byte stream))) 
     135 
     136(defun %write-tag (char stream) 
    131137  (write-byte (char-code char) stream)) 
    132  
    133 (defun %write-string (string stream) 
    134   (dotimes (i (length string)) 
    135     (%write-char (char string i) stream))) 
    136138 
    137139;;;; binary encoding 
     
    159161 
    160162(defun encode-integer (object stream) 
    161   (%write-char #\i stream) 
     163  (%write-tag #\i stream) 
    162164  (%encode-integer object stream)) 
    163165 
    164166(defun encode-rational (object stream) 
    165   (%write-char #\r stream) 
     167  (%write-tag #\r stream) 
    166168  (%encode-rational object stream)) 
    167169 
     
    185187 
    186188(defun encode-list (object stream) 
    187   (%write-char #\l stream) 
     189  (%write-tag #\l stream) 
    188190  (%encode-list object stream)) 
    189191 
    190192(defun encode-char (object stream) 
    191   (%write-char #\c stream) 
     193  (%write-tag #\c stream) 
    192194  (%write-char object stream)) 
    193195 
     
    198200 
    199201(defun encode-string (object stream) 
    200   (%write-char #\s stream) 
     202  (%write-tag #\s stream) 
    201203  (%encode-string object stream)) 
    202204 
     
    206208 
    207209(defun encode-symbol (object stream) 
    208   (%write-char #\y stream) 
     210  (%write-tag #\y stream) 
    209211  (%encode-symbol object stream)) 
    210212 
    211213(defun encode-hash-table (object stream) 
    212   (%write-char #\# stream) 
     214  (%write-tag #\# stream) 
    213215  (%encode-symbol (hash-table-test object) stream) 
    214216  (%encode-double-float (float (hash-table-rehash-size object) 1.0d0) stream) 
     
    232234 
    233235(defun encode-single-float (object stream) 
    234   (%write-char #\f stream) 
     236  (%write-tag #\f stream) 
    235237  (%encode-single-float object stream)) 
    236238 
     
    252254 
    253255(defun encode-double-float (object stream) 
    254   (%write-char #\d stream) 
     256  (%write-tag #\d stream) 
    255257  (%encode-double-float object stream)) 
    256258 
     
    277279 
    278280(defun encode-array (object stream) 
    279   (%write-char #\a stream) 
     281  (%write-tag #\a stream) 
    280282  (%encode-array object stream)) 
    281283 
     
    421423 
    422424(defun decode (stream) 
    423   (let ((tag (%read-char stream))) 
     425  (let ((tag (%read-tag stream))) 
    424426    (case tag 
    425427      (#\a (%decode-array stream))