From aa0a1252808a7d7873478ba599d192b1fd2d4e28 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Sat, 5 Dec 2015 20:04:03 -0500 Subject: [PATCH] lib/c: intro CUInt16Array MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/c.nit | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/c.nit b/lib/c.nit index 01f0bde..076ea65 100644 --- a/lib/c.nit +++ b/lib/c.nit @@ -93,7 +93,7 @@ class CIntArray super size end - # Create from an `SequenceRead[Int]` + # Create from a `SequenceRead[Int]` new from(array: SequenceRead[Int]) do var carray = new CIntArray(array.length) @@ -118,6 +118,42 @@ extern class NativeCIntArray `{ int* `} redef fun +(offset) `{ return self + offset; `} end +# Wrapper of a C array of type `uint16_t*` with length and destroy state +class CUInt16Array + super CArray[Int] + redef type NATIVE: NativeCUInt16Array + + # Initialize a new CIntArray of `size` elements. + init(size: Int) is old_style_init do + native_array = new NativeCUInt16Array(size) + super size + end + + # Create from a `SequenceRead[Int]` + new from(array: SequenceRead[Int]) + do + var carray = new CUInt16Array(array.length) + for i in array.length.times do + carray[i] = array[i] + end + return carray + end +end + +# An array of `uint16_t` in C +extern class NativeCUInt16Array `{ uint16_t* `} + super NativeCArray + redef type E: Int + + # Initialize a new NativeCUInt16Array of `size` elements. + new(size: Int) `{ return calloc(size, sizeof(uint16_t)); `} + + redef fun [](index) `{ return self[index]; `} + redef fun []=(index, val) `{ self[index] = val; `} + + redef fun +(offset) `{ return self + offset; `} +end + # Wrapper around an array of `unsigned char` in C (`unsigned char*`) with length and destroy state class CByteArray super CArray[Byte] -- 1.7.9.5