class ArrayFloat extends Array<Float> {

  @Override
  void arraycopy(int srcPos, Object dest, int destPos, long length) {
    if (indexFn.isCanonicalOrder()) {
      storageF.arraycopy(srcPos, dest, destPos, length);
    } else {
      float[] ddest = (float[]) dest;
      int destIndex = destPos;
      Iterator<Integer> iter = indexFn.iterator(srcPos, length);
      while (iter.hasNext()) {
        ddest[destIndex++] = storageF.get(iter.next());
      }
    }
  }

  public  ArrayFloat(int[] shape);
  public  ArrayFloat(int[] shape, Storage<Float> storageF);
  private  ArrayFloat(IndexFn indexFn, Storage<Float> storageF);

}