+ # The corresponding C type
+ type NATIVE: NativeCArray
+
+ # Pointer to the real C array
+ var native_array: NATIVE is noinit
+
+ private init(length: Int) is old_style_init do self._length = length
+
+ redef fun [](index)
+ do
+ assert not destroyed
+ assert index >= 0 and index < length
+ return native_array[index]
+ end
+
+ # Set `val` at `index`.
+ fun []=(index: Int, val: E)
+ do
+ assert not destroyed
+ assert index >= 0 and index < length
+ native_array[index] = val
+ end
+
+ # Was this instance destroyed?
+ #
+ # See `CArray::destroy`.
+ var destroyed = false
+
+ # Free used memory used by `native_array`.
+ #
+ # Also set `destroyed` to true.
+ fun destroy
+ do
+ if destroyed then return
+
+ native_array.free
+ destroyed = true
+ end