expanded class interface NATIVE_ARRAY[E]
   -- 
   --  This class gives access to the lowest level for arrays both
   --  for the C language and Java language.
   --  
   --  Warning : using this class makes your Eiffel code non
   --  portable on other Eiffel systems.
   --  This class may also be modified in further release for a better
   --  interoperability between Java and C low level arrays.
   -- 

feature(s) from NATIVE_ARRAY
   --  Basic features :

   element_sizeof: INTEGER
      --  The size in number of bytes for type E.


   calloc (nb_elements: INTEGER): like Current
      --  Allocate a new array of nb_elements of type E.
      --  The new array is initialized with default values.


   item (index: INTEGER): E
      --  To read an item.
      --  Assume that calloc is already done and that index
      --  is the range [0 .. nb_elements-1].


   put (element: E; index: INTEGER)
      --  To write an item.
      --  Assume that calloc is already done and that index
      --  is the range [0 .. nb_elements-1].


feature(s) from NATIVE_ARRAY
   realloc (old_nb_elts, new_nb_elts: INTEGER): like Current
      --  Assume Current is a valid NATIVE_ARRAY in range 
      --  [0 .. old_nb_elts-1]. Allocate a bigger new array in
      --  range [0 .. new_nb_elts-1].
      --  Old range is copied in the new allocated array.
      --  No initialization done for new items in C.
      --  Initialization is done for Java.
      -- 

      require
         is_not_null;
         old_nb_elts < new_nb_elts

feature(s) from NATIVE_ARRAY
   --  Comparison :

   memcmp (other: like Current; capacity: INTEGER): BOOLEAN
      --  True if all elements in range [0..capacity-1] are
      --  identical using equal. Assume Current and other 
      --  are big enough. 
      --  See also fast_memcmp.

      require
         capacity > 0 implies other.is_not_null

   fast_memcmp (other: like Current; capacity: INTEGER): BOOLEAN
      --  Same jobs as memcmp but uses infix "=" instead equal.

      require
         capacity > 0 implies other.is_not_null

feature(s) from NATIVE_ARRAY
   --  Searching :

   index_of (element: like item; upper: INTEGER): INTEGER
      --  Give the index of the first occurrence of element using
      --  is_equal for comparison.
      --  Answer upper + 1 when element is not inside.

      require
         upper >= - 1

   fast_index_of (element: like item; upper: INTEGER): INTEGER
      --  Same as index_of but use basic = for comparison.

      require
         upper >= - 1

   has (element: like item; upper: INTEGER): BOOLEAN
      --  Look for element using is_equal for comparison.
      --  Also consider has to choose the most appropriate.

      require
         upper >= - 1

   fast_has (element: like item; upper: INTEGER): BOOLEAN
      --  Look for element using basic = for comparison.
      --  Also consider has to choose the most appropriate.

      require
         upper >= - 1

feature(s) from NATIVE_ARRAY
   --  Removing :

   remove_first (upper: INTEGER)
      --  Assume upper is a valid index.
      --  Move range [1 .. upper] by 1 position left.

      require
         upper >= 0

   remove (index, upper: INTEGER)
      --  Assume upper is a valid index.
      --  Move range [index + 1 .. upper] by 1 position left.

      require
         index >= 0;
         index <= upper

feature(s) from NATIVE_ARRAY
   --  Replacing :

   replace_all (old_value, new_value: like item; upper: INTEGER)
      --  Replace all occurences of the element old_value by new_value 
      --  using is_equal for comparison.
      --  See also fast_replace_all to choose the apropriate one.

      require
         upper >= - 1

   fast_replace_all (old_value, new_value: like item; upper: INTEGER)
      --  Replace all occurences of the element old_value by new_value 
      --  using basic = for comparison.
      --  See also replace_all to choose the apropriate one.

      require
         upper >= - 1

feature(s) from NATIVE_ARRAY
   --  Adding :

   copy_at (start_index: INTEGER; model: like Current; model_capacity: INTEGER)
      --  Copy range [0 .. model_capacity-1] of model starting to 
      --  write at start_index of Current.
      --  Range [start_index .. start_index+model_capacity] of 
      --  Current is affected (assume Current is large enough).

      require
         start_index >= 0;
         model_capacity >= 0;
         model_capacity > 0 implies model.is_not_null

feature(s) from NATIVE_ARRAY
   --  Other :

   set_all_with (v: like item; upper: INTEGER)
      --  Set all elements in range [0 .. upper] with
      --  value v.


   clear_all (upper: INTEGER)
      --  Set all elements in range [0 .. upper] with
      --  the default value.


   clear (lower, upper: INTEGER)
      --  Set all elements in range [lower .. upper] with
      --  the default value

      require
         lower >= 0;
         upper >= lower

   copy_from (model: like Current; upper: INTEGER)
      --  Assume upper is a valid index both in Current and model.


   move (lower, upper, offset: INTEGER)
      --  Move range [lower .. upper] by offset positions.
      --  Freed positions are not initialized to default values.

      require
         lower >= 0;
         upper >= lower;
         lower + offset >= 0

   nb_occurrences (element: like item; upper: INTEGER): INTEGER
      --  Number of occurrences of element in range [0..upper]
      --  using equal for comparison.
      --  See also fast_nb_occurrences to chose the apropriate one.


   fast_nb_occurrences (element: like item; upper: INTEGER): INTEGER
      --  Number of occurrences of element in range [0..upper]
      --  using basic "=" for comparison.
      --  See also fast_nb_occurrences to chose the apropriate one.


   all_cleared (upper: INTEGER): BOOLEAN
      --  Are all items in range [0..upper] set to default
      --  values?

      require
         upper >= - 1

feature(s) from NATIVE_ARRAY
   --  Interfacing with C :

   to_external: POINTER
      --  Gives access to the C pointer on the area of storage.


   from_pointer (pointer: POINTER): like Current
      --  Convert pointer into Current type.


   is_not_null: BOOLEAN


end of expanded NATIVE_ARRAY[E]