lib/c: add memmove to `CByteArray` and its native counterpart
authorAlexis Laferrière <alexis.laf@xymus.net>
Wed, 16 Sep 2015 13:53:00 +0000 (09:53 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Mon, 16 Nov 2015 22:44:46 +0000 (17:44 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/c.nit

index a9b04e1..08c0bf1 100644 (file)
--- a/lib/c.nit
+++ b/lib/c.nit
@@ -138,6 +138,18 @@ class CByteArray
                end
                return carray
        end
+
+       # Safely move `n` bytes from `dst_offset` to `src_offset`, inside this array
+       #
+       # Require: all arguments greater than 0 and ranges within `length`
+       fun memmove(dst_offset, src_offset, n: Int)
+       do
+               assert dst_offset >= 0 and src_offset >= 0 and n >= 0
+               assert dst_offset + n <= length
+               assert src_offset + n <= length
+
+               native_array.memmove(dst_offset, src_offset, n)
+       end
 end
 
 # An array of `unsigned char` in C (`unsigned char*`)
@@ -152,6 +164,11 @@ extern class NativeCByteArray `{ unsigned char* `}
        redef fun []=(index, val) `{ self[index] = val; `}
 
        redef fun +(offset) `{ return self + offset; `}
+
+       # Move `n` bytes from `dst_offset` to `src_offset`
+       fun memmove(dst_offset, src_offset, n: Int) `{
+               memmove(self+dst_offset, self+src_offset, n);
+       `}
 end
 
 # Wrapper around an array of `NativeString` in C (`char**`) with length and destroy state.