X-Git-Url: http://nitlanguage.org diff --git a/lib/c.nit b/lib/c.nit index 306f2cc..a8e0c2f 100644 --- a/lib/c.nit +++ b/lib/c.nit @@ -29,7 +29,7 @@ abstract class CArray[E] # Pointer to the real C array var native_array: NATIVE is noinit - private init(length: Int) do self._length = length + private init(length: Int) is old_style_init do self._length = length redef fun [](index) do @@ -70,10 +70,10 @@ extern class NativeCArray `{ void * `} type E: nullable Object # Get element at `index`. - fun [](index: E): E is abstract + fun [](index: Int): E is abstract # Set `val` at `index`. - fun []=(index: E, val: E) is abstract + fun []=(index: Int, val: E) is abstract # Return pointer to the address to the second element of this array # @@ -86,8 +86,8 @@ class CIntArray super CArray[Int] redef type NATIVE: NativeCIntArray - init(size: Int) - do + # Initialize a new CIntArray of `size` elements. + init(size: Int) is old_style_init do native_array = new NativeCIntArray(size) super size end @@ -111,10 +111,10 @@ extern class NativeCIntArray `{ int* `} # Initialize a new NativeCIntArray of `size` elements. new(size: Int) `{ return calloc(size, sizeof(int)); `} - redef fun [](index) `{ return recv[index]; `} - redef fun []=(index, val) `{ recv[index] = val; `} + redef fun [](index) `{ return self[index]; `} + redef fun []=(index, val) `{ self[index] = val; `} - redef fun +(offset) `{ return recv + offset; `} + redef fun +(offset) `{ return self + offset; `} end # Wrapper around an array of `unsigned char` in C (`unsigned char*`) with length and destroy state @@ -123,8 +123,7 @@ class CByteArray redef type NATIVE: NativeCByteArray # Allocate a new array of `size` - init(size: Int) - do + init(size: Int) is old_style_init do native_array = new NativeCByteArray(size) super size end @@ -148,15 +147,52 @@ extern class NativeCByteArray `{ unsigned char* `} # Allocate a new array of `size` new(size: Int) `{ return calloc(size, sizeof(unsigned char)); `} - redef fun [](index) `{ return recv[index]; `} - redef fun []=(index, val) `{ recv[index] = val; `} + 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 `NativeString` in C (`char**`) with length and destroy state. +class CNativeStringArray + super CArray[NativeString] + + redef type NATIVE: NativeCStringArray + + # Initialize a new NativeCStringArray of `size` elements. + init(size: Int) is old_style_init do + native_array = new NativeCStringArray(size) + super size + end + + # Build from an `Array[NativeString]` + new from(array: Array[NativeString]) + do + var carray = new CNativeStringArray(array.length) + for i in array.length.times do + carray[i] = array[i] + end + return carray + end +end + +# An array of `NativeString` in C (`char**`) +extern class NativeCStringArray `{ char** `} + super NativeCArray + + redef type E: NativeString + + # Initialize a new NativeCStringArray of `size` elements. + new(size: Int) `{ return calloc(size, sizeof(char*)); `} - redef fun +(offset) `{ return recv + offset; `} + redef fun [](index) `{ return self[index]; `} + redef fun []=(index, val) `{ self[index] = val; `} + redef fun +(offset) `{ return self + offset; `} end redef class NativeString super NativeCArray redef type E: Char - redef fun +(offset) `{ return recv + offset; `} + redef fun +(offset) `{ return self + offset; `} end