/*******************************************************************************
 * Copyright (c) 2002 - 2006 IBM Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package com.ibm.wala.model.java.lang.reflect;


/**
 * A synthetic model of java.lang.reflect.Array native methods
 */
public class Array {

  /**
   * A simple model of object-array copy
   */
  public static Object get(Object array, int index) throws IllegalArgumentException, ArrayIndexOutOfBoundsException {

    if (!array.getClass().isArray()) {
      throw new IllegalArgumentException();
    }
    
    if (array instanceof Object[]) {
      Object[] A = (Object[])array;
      return A[index];
    } else if (array instanceof int[]) {
      int[] A = (int[]) array;
      return A[index];
    } else if (array instanceof char[]) {
      char[] A = (char[]) array;
      return A[index];
    } else if (array instanceof short[]) {
      short[] A = (short[]) array;
      return A[index];
    } else if (array instanceof long[]) {
      long[] A = (long[]) array;
      return A[index];
    } else if (array instanceof byte[]) {
      byte[] A = (byte[]) array;
      return A[index];
    } else if (array instanceof double[]) {
      double[] A = (double[]) array;
      return A[index];
    } else if (array instanceof boolean[]) {
      boolean[] A = (boolean[]) array;
      return A[index];
    } else if (array instanceof float[]) {
      float[] A = (float[]) array;
      return A[index];
    } else {
      return null;
    }
  }
}
