]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'mongodb-changes' of git://github.com/x6j8x/factor
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 6 Jul 2010 00:40:09 +0000 (20:40 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 6 Jul 2010 00:40:09 +0000 (20:40 -0400)
extra/bson/bson-tests.factor
extra/bson/constants/constants.factor
extra/bson/reader/reader.factor
extra/bson/writer/writer.factor

index 7353a9a8314272841e6ec2edcb11b7a449ffa074..5540cb2ef58d87b455f11430e3cd9333b7472c98 100644 (file)
@@ -8,8 +8,8 @@ IN: bson.tests
 
 [ H{ { "a" "a string" } } ] [ H{ { "a" "a string" } } turnaround ] unit-test
 
-[ H{ { "a" "a string" } { "b" H{ { "a" "a string" } } } } ]
-[ H{ { "a" "a string" } { "b" H{ { "a" "a string" } } } } turnaround ] unit-test
+[ H{ { "a" "a string" } { "b" H{ { "a" "アップルからの最新のニュースや情報を読む" } } } } ]
+[ H{ { "a" "a string" } { "b" H{ { "a" "アップルからの最新のニュースや情報を読む" } } } } turnaround ] unit-test
 
 [ H{ { "a list" { 1 2.234 "hello world" } } } ]
 [ H{ { "a list" { 1 2.234 "hello world" } } } turnaround ] unit-test
index e4bf14432a14a79c6113e89f1027d96427e038a6..b2b260615f1ef5ee856cdd3dd17726bc2ca7823e 100644 (file)
@@ -79,9 +79,10 @@ CONSTANT: T_Integer64 HEX: 12
 CONSTANT: T_MinKey  HEX: FF
 CONSTANT: T_MaxKey  HEX: 7F
 
-CONSTANT: T_Binary_Function     HEX: 1
-CONSTANT: T_Binary_Bytes        HEX: 2
-CONSTANT: T_Binary_UUID         HEX: 3
-CONSTANT: T_Binary_MD5          HEX: 5
-CONSTANT: T_Binary_Custom       HEX: 80
+CONSTANT: T_Binary_Default                  HEX: 0
+CONSTANT: T_Binary_Function                 HEX: 1
+CONSTANT: T_Binary_Bytes_Deprecated         HEX: 2
+CONSTANT: T_Binary_UUID                     HEX: 3
+CONSTANT: T_Binary_MD5                      HEX: 5
+CONSTANT: T_Binary_Custom                   HEX: 80
 
index 852f46f951fc750d27a074830936377def6bdb11..f1f3ab85086fbd6935ca824ca4727ab7b1f10919 100644 (file)
@@ -2,6 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors assocs bson.constants calendar combinators
 combinators.short-circuit io io.binary kernel math locals
+io.encodings.utf8 io.encodings
 namespaces sequences serialize strings vectors byte-arrays ;
 
 FROM: io.encodings.binary => binary ;
@@ -34,10 +35,11 @@ DEFER: read-elements
     read-byte-raw first ; inline
 
 : read-cstring ( -- string )
-    "\0" read-until drop >string ; inline
+    input-stream get utf8 <decoder>
+    "\0" swap stream-read-until drop ; inline
 
 : read-sized-string ( length -- string )
-    read 1 head-slice* >string ; inline
+    read binary [ read-cstring ] with-byte-reader ; inline
 
 : read-timestamp ( -- timestamp )
     8 read [ 4 head signed-le> ] [ 4 tail signed-le> ] bi <mongo-timestamp> ;
@@ -54,7 +56,8 @@ DEFER: read-elements
 : bson-binary-read ( -- binary )
    read-int32 read-byte 
    {
-        { T_Binary_Bytes [ read ] }
+        { T_Binary_Default [ read ] }
+        { T_Binary_Bytes_Deprecated [ drop read-int32 read ] }
         { T_Binary_Custom [ read bytes>object ] }
         { T_Binary_Function [ read ] }
         [ drop read >string ]
index 0c494c98488baf29d08f17bc4508f91ba973fbee..e02b2c6da23d3d6638ad86af50455c610c8cfd2f 100644 (file)
@@ -2,6 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays assocs bson.constants byte-arrays
 calendar combinators.short-circuit fry hashtables io io.binary
+io.encodings.utf8 io.encodings io.streams.byte-array
 kernel linked-assocs literals math math.parser namespaces byte-vectors
 quotations sequences serialize strings vectors dlists alien.accessors ;
 FROM: words => word? word ;
@@ -42,8 +43,11 @@ TYPED: write-int32 ( int: integer -- ) INT32-SIZE (>le) ; inline
 
 TYPED: write-double ( real: float -- ) double>bits INT64-SIZE (>le) ; inline
 
+TYPED: write-utf8-string ( string: string -- )
+    output-stream get utf8 <encoder> stream-write ; inline
+
 TYPED: write-cstring ( string: string -- )
-    get-output [ length ] [  ] bi copy 0 write1 ; inline
+    write-utf8-string 0 write1 ; inline
 
 : write-longlong ( object -- ) INT64-SIZE (>le) ; inline
 
@@ -56,7 +60,7 @@ DEFER: write-pair
 
 TYPED: write-byte-array ( binary: byte-array -- )
     [ length write-int32 ]
-    [ T_Binary_Bytes write1 write ] bi ; inline
+    [ T_Binary_Default write1 write ] bi ; inline
 
 TYPED: write-mdbregexp ( regexp: mdbregexp -- )
    [ regexp>> write-cstring ]
@@ -94,8 +98,12 @@ TYPED: (serialize-code) ( code: code -- )
   [ length write-int32 ]
   [ T_Binary_Custom write1 write ] bi ; inline
 
+: write-string-length ( string -- )
+    [ length>> 1 + ] 
+    [ aux>> [ length ] [ 0 ] if* ] bi + write-int32 ; inline
+
 TYPED: write-string ( string: string -- )
-    '[ _ write-cstring ] with-length-prefix-excl ; inline
+    dup write-string-length write-cstring ; inline
 
 TYPED: write-boolean ( bool: boolean -- )
     [ 1 write1 ] [ 0 write1 ] if ; inline