OSDN Git Service

add bits input
authormzp <mzpppp@gmail.com>
Mon, 12 Oct 2009 10:19:22 +0000 (19:19 +0900)
committermzp <mzpppp@gmail.com>
Mon, 12 Oct 2009 10:19:22 +0000 (19:19 +0900)
swflib/OMakefile
swflib/swfBaseIn.ml
swflib/swfBaseIn.mli
swflib/swfBaseInTest.ml

index 98b39a5..1d8302d 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)
+OUnitTest(swfBaseIn, swfBaseIn bitsIn)
 OUnitTest(bitsOut, bitsOut)
 OUnitTest(bitsIn, bitsIn)
 
index aeea52f..c60246e 100644 (file)
@@ -54,3 +54,14 @@ let rec read_u30 stream =
        raise (Stream.Error "invalid format")
 
 let eui32 = read_u30
+
+let bits f s =
+  f @@ BitsIn.of_stream s
+
+let ub n bs =
+  BitsIn.bits n bs
+
+let sb n bs =
+  s_extend n (ub n bs)
+
+let fb _ _ =  undefined
index 1a1f9f7..333c2dd 100644 (file)
@@ -10,3 +10,8 @@ val si24 : int Stream.t -> int
 val si32 : int Stream.t -> int32
 
 val eui32 : int Stream.t -> int32
+
+val bits : (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
+val fb : int -> BitsIn.bit Stream.t -> float
index 42aa550..dc5d4e5 100644 (file)
@@ -48,5 +48,27 @@ let _ = begin "swfBaseIn.ml" >::: [
     ok 0x003F_FFFFl eui32 [0xFF;0xFF;0xFF;0x01];
     ok 0x0FFF_FFFFl eui32 [0xFF;0xFF;0xFF;0x7F];
     ok 0x1FFF_FFFFl eui32 [0xFF;0xFF;0xFF;0xFF;0x01]
-  end
+  end;
+  "bits" >:: begin fun () ->
+    ok (1,1,1) (bits begin fun bs ->
+                 let x = ub 3 bs in
+                 let y = ub 1 bs in
+                 let z = ub 1 bs in
+                   (x,y,z)
+               end)
+      [0b0011_1000]
+  end;
+  "ub" >:: begin fun () ->
+    ok 1 (bits @@ ub 3) [0b0010_0000]
+  end;
+  "sb" >:: begin fun () ->
+    ok 1 (bits @@ sb 3) [0b0010_0000];
+    ok ~-1 (bits @@ 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 0xEF @@ Stream.next s
+  end;
 ] end +> run_test_tt_main