/*
* <copyright>
* Copyright 2011 BBN Technologies
* </copyright>
*/
package com.bbn.openmap.util;
import com.bbn.openmap.omGraphics.OMGeometry;
/**
* A set of convenience functions for deep copying data structures.
*
* @author ddietrick
*/
public class DeepCopyUtil {
public static double[] deepCopy(double[] source) {
if (source == null) {
return null;
}
double[] ds = new double[source.length];
System.arraycopy(source, 0, ds, 0, source.length);
return ds;
}
public static int[] deepCopy(int[] source) {
if (source == null) {
return null;
}
int[] ints = new int[source.length];
System.arraycopy(source, 0, ints, 0, source.length);
return ints;
}
public static boolean[] deepCopy(boolean[] source) {
if (source == null) {
return null;
}
boolean[] bools = new boolean[source.length];
System.arraycopy(source, 0, bools, 0, source.length);
return bools;
}
public static float[] deepCopy(float[] source) {
if (source == null) {
return null;
}
float[] floats = new float[source.length];
System.arraycopy(source, 0, floats, 0, source.length);
return floats;
}
public static char[] deepCopy(char[] source) {
if (source == null) {
return null;
}
char[] chars = new char[source.length];
System.arraycopy(source, 0, chars, 0, source.length);
return chars;
}
public static short[] deepCopy(short[] source) {
if (source == null) {
return null;
}
short[] shorts = new short[source.length];
System.arraycopy(source, 0, shorts, 0, source.length);
return shorts;
}
public static long[] deepCopy(long[] source) {
if (source == null) {
return null;
}
long[] longs = new long[source.length];
System.arraycopy(source, 0, longs, 0, source.length);
return longs;
}
public static byte[] deepCopy(byte[] source) {
if (source == null) {
return null;
}
byte[] bytes = new byte[source.length];
System.arraycopy(source, 0, bytes, 0, source.length);
return bytes;
}
public static <T extends OMGeometry> T deepCopy(T source) {
T list = (T) ComponentFactory.create(source.getClass().getName());
list.restore(source);
return list;
}
public static <T extends OMGeometry> T[] deepCopy(T[] source) {
if (source == null) {
return null;
}
// This is a shallow copy, clone objects are same as source objects
T[] clone = source.clone();
// JDK 1.6 required
//T[] clone = Arrays.copyOfRange(source, 0, source.length);
for (int i = 0; i < source.length; i++) {
T subclone = null;
subclone = (T) ComponentFactory.create(source[i].getClass().getName());
if (subclone != null) {
subclone.restore(source[i]);
}
clone[i] = subclone;
}
return clone;
}
public static double[][] deepCopy(double[][] source) {
if (source == null) {
return null;
}
double[][] ret = new double[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new double[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static boolean[][] deepCopy(boolean[][] source) {
if (source == null) {
return null;
}
boolean[][] ret = new boolean[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new boolean[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static byte[][] deepCopy(byte[][] source) {
if (source == null) {
return null;
}
byte[][] ret = new byte[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new byte[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static char[][] deepCopy(char[][] source) {
if (source == null) {
return null;
}
char[][] ret = new char[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new char[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static int[][] deepCopy(int[][] source) {
if (source == null) {
return null;
}
int[][] ret = new int[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new int[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static float[][] deepCopy(float[][] source) {
if (source == null) {
return null;
}
float[][] ret = new float[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new float[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static long[][] deepCopy(long[][] source) {
if (source == null) {
return null;
}
long[][] ret = new long[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new long[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
public static short[][] deepCopy(short[][] source) {
if (source == null) {
return null;
}
short[][] ret = new short[source.length][];
for (int i = 0; i < source.length; i++) {
if (source[i] != null) {
ret[i] = new short[source[i].length];
System.arraycopy(source[0], 0, ret[i], 0, source[i].length);
}
}
return ret;
}
}