lib: improve synopsis and doc of many libs
[nit.git] / lib / binary / binary.nit
index 6268832..b6909cd 100644 (file)
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Add reading and writing binary services
+# Read and write binary data with any `Reader` and `Writer`
 #
 # ~~~
 # var w = new FileWriter.open("/tmp/data.bin")
@@ -81,9 +81,9 @@ redef abstract class Writer
        do
                assert bits.length <= 8
 
-               var int = 0
+               var int = 0u8
                for b in bits.length.times do
-                       if bits[b] then int += 2**b
+                       if bits[b] then int |= 1u8 << (7 - b)
                end
 
                write_byte int
@@ -153,7 +153,7 @@ redef abstract class Reader
        # Read a single byte and return `true` if its value is different than 0
        #
        # Returns `false` when an error is pending (`last_error != null`).
-       fun read_bool: Bool do return read_byte != 0
+       fun read_bool: Bool do return read_byte != 0u8
 
        # Get an `Array` of 8 `Bool` by reading a single byte
        #
@@ -164,7 +164,11 @@ redef abstract class Reader
        do
                var int = read_byte
                if int == null then return new Array[Bool]
-               return [for b in 8.times do int.bin_and(2**b) > 0]
+               var arr = new Array[Bool]
+               for i in [7 .. 0].step(-1) do
+                       arr.push(((int >> i) & 1u8) != 0u8)
+               end
+               return arr
        end
 
        # Read a null terminated string
@@ -174,11 +178,13 @@ redef abstract class Reader
        # Returns a truncated string when an error is pending (`last_error != null`).
        fun read_string: String
        do
-               var buf = new FlatBuffer
+               var buf = new Bytes.empty
                loop
                        var byte = read_byte
-                       if byte == null or byte == 0x00 then return buf.to_s
-                       buf.bytes.add byte
+                       if byte == null or byte == 0u8 then
+                               return buf.to_s
+                       end
+                       buf.add byte
                end
        end
 
@@ -216,7 +222,7 @@ redef abstract class Reader
        end
 
        # Utility for `read_float`
-       private fun native_read_float(b0, b1, b2, b3: Int, big_endian: Bool): Float `{
+       private fun native_read_float(b0, b1, b2, b3: Byte, big_endian: Bool): Float `{
                union {
                        unsigned char b[4];
                        float val;
@@ -259,7 +265,7 @@ redef abstract class Reader
        end
 
        # Utility for `read_double`
-       private fun native_read_double(b0, b1, b2, b3, b4, b5, b6, b7: Int, big_endian: Bool): Float `{
+       private fun native_read_double(b0, b1, b2, b3, b4, b5, b6, b7: Byte, big_endian: Bool): Float `{
                union {
                        unsigned char b[8];
                        double val;
@@ -309,7 +315,7 @@ redef abstract class Reader
        end
 
        # Utility for `read_int64`
-       private fun native_read_int64(b0, b1, b2, b3, b4, b5, b6, b7: Int, big_endian: Bool): Int `{
+       private fun native_read_int64(b0, b1, b2, b3, b4, b5, b6, b7: Byte, big_endian: Bool): Int `{
                union {
                        unsigned char b[8];
                        int64_t val;
@@ -335,7 +341,7 @@ end
 
 redef class Int
        # Utility for `BinaryWriter`
-       private fun int64_byte_at(index: Int, big_endian: Bool): Int `{
+       private fun int64_byte_at(index: Int, big_endian: Bool): Byte `{
                union {
                        unsigned char bytes[8];
                        int64_t val;
@@ -354,7 +360,7 @@ end
 
 redef class Float
        # Utility for `BinaryWriter`
-       private fun float_byte_at(index: Int, big_endian: Bool): Int `{
+       private fun float_byte_at(index: Int, big_endian: Bool): Byte `{
                union {
                        unsigned char bytes[4];
                        float val;
@@ -371,7 +377,7 @@ redef class Float
        `}
 
        # Utility for `BinaryWriter`
-       private fun double_byte_at(index: Int, big_endian: Bool): Int `{
+       private fun double_byte_at(index: Int, big_endian: Bool): Byte `{
                union {
                        unsigned char bytes[8];
                        double val;