OSDN Git Service

add rect
authormzp <mzpppp@gmail.com>
Mon, 12 Oct 2009 22:14:06 +0000 (07:14 +0900)
committermzp <mzpppp@gmail.com>
Mon, 12 Oct 2009 22:14:06 +0000 (07:14 +0900)
swflib/OMakefile
swflib/swfBaseIn.ml
swflib/swfBaseIn.mli
swflib/swfBaseInTest.ml

index 1d8302d..d08fcc8 100644 (file)
@@ -57,7 +57,7 @@ OUnitTest(cpool    , cpool revList)
 OUnitTest(swfOut, swfOut swfBaseOut bitsOut)
 OUnitTest(tagOut, tagOut)
 OUnitTest(swfBaseOut, swfBaseOut bitsOut)
-OUnitTest(swfBaseIn, swfBaseIn bitsIn)
+OUnitTest(swfBaseIn, swfBaseIn bitsIn swfBaseOut bitsOut)
 OUnitTest(bitsOut, bitsOut)
 OUnitTest(bitsIn, bitsIn)
 
index d8520ac..1ce77af 100644 (file)
@@ -55,7 +55,7 @@ let rec read_u30 stream =
 
 let eui32 = read_u30
 
-let bits f s =
+let bits ~f s =
   f @@ BitsIn.of_stream s
 
 let ub n bs =
@@ -80,3 +80,8 @@ let float64 =
   open Int64 in
   parser [< x = of_int32 $ ui32; y = of_int32 $ ui32 >] ->
     float_of_bits @@ logor (shift_left y 32) x
+
+let rect s = bits s ~f:begin parser
+    [< n = ub 5; x_min = sb n; x_max = sb n; y_min = sb n; y_max = sb n>] ->
+      (x_min, x_max, y_min, y_max)
+end
index 59284d5..55d7848 100644 (file)
@@ -11,7 +11,7 @@ val si32 : int Stream.t -> int32
 
 val eui32 : int Stream.t -> int32
 
-val bits : (BitsIn.bit Stream.t -> 'a) -> int Stream.t -> 'a
+val bits : f:(BitsIn.bit Stream.t -> 'a) -> int Stream.t -> 'a
 val ub : int -> BitsIn.bit Stream.t -> int
 val sb : int -> BitsIn.bit Stream.t -> int
 
@@ -21,4 +21,4 @@ val fixed8 : int Stream.t -> float
 val float32  : int Stream.t -> float
 val float64 : int Stream.t -> float
 
-
+val rect : int Stream.t -> int * int * int * int
index e1e93a8..4430233 100644 (file)
@@ -50,7 +50,7 @@ let _ = begin "swfBaseIn.ml" >::: [
     ok 0x1FFF_FFFFl eui32 [0xFF;0xFF;0xFF;0xFF;0x01]
   end;
   "bits" >:: begin fun () ->
-    ok (1,1,1) (bits begin fun bs ->
+    ok (1,1,1) (bits ~f:begin fun bs ->
                  let x = ub 3 bs in
                  let y = ub 1 bs in
                  let z = ub 1 bs in
@@ -59,16 +59,16 @@ let _ = begin "swfBaseIn.ml" >::: [
       [0b0011_1000]
   end;
   "ub" >:: begin fun () ->
-    ok 1 (bits @@ ub 3) [0b0010_0000]
+    ok 1 (bits ~f:(ub 3)) [0b0010_0000]
   end;
   "sb" >:: begin fun () ->
-    ok 1 (bits @@ sb 3) [0b0010_0000];
-    ok ~-1 (bits @@ sb 3) [0b1110_0000]
+    ok 1 (bits ~f:(sb 3)) [0b0010_0000];
+    ok ~-1 (bits ~f:(sb 3)) [0b1110_0000]
   end;
   "padding" >:: begin fun () ->
     let s =
       Stream.of_list [0b1000_0000; 0xEF] in
-      assert_equal 1 (bits (ub 1) s);
+      assert_equal 1 (bits ~f:(ub 1) s);
       assert_equal 0xEF @@ Stream.next s
   end;
   "Fixed" >:: begin fun () ->
@@ -86,5 +86,11 @@ let _ = begin "swfBaseIn.ml" >::: [
     ok 0.333333333333333315 float64
       [0x55; 0x55; 0x55; 0x55;
        0x55; 0x55; 0xd5; 0x3f]
-  end
+  end;
+  "rect" >:: begin fun () ->
+    open SwfBaseOut in begin
+      ok (0,0,1,1)        rect @@ SwfBaseOut.to_list [`Bits [UB(5,2);  SB(2,0);    SB(2,0);    SB(2,1);   SB(2,1)]];
+      ok (127,260,15,514) rect @@ SwfBaseOut.to_list [`Bits [UB(5,11); SB(11,127); SB(11,260); SB(11,15); SB(11,514)]]
+    end
+  end;
 ] end +> run_test_tt_main