From 1ca01577682f8c0659a263c0ef94b3ab34bab9e9 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Fri, 28 Aug 2015 21:09:46 -0700 Subject: [PATCH] Java: Add backwards compat shims for array types. --- .../wpilibj/networktables/NetworkTable.java | 19 +++++++ .../networktables2/type/ArrayData.java | 49 +++++++++++++++++++ .../networktables2/type/BooleanArray.java | 16 ++++++ .../networktables2/type/NumberArray.java | 16 ++++++ .../networktables2/type/StringArray.java | 16 ++++++ .../edu/wpi/first/wpilibj/tables/ITable.java | 10 ++++ 6 files changed, 126 insertions(+) create mode 100644 java/src/edu/wpi/first/wpilibj/networktables2/type/ArrayData.java create mode 100644 java/src/edu/wpi/first/wpilibj/networktables2/type/BooleanArray.java create mode 100644 java/src/edu/wpi/first/wpilibj/networktables2/type/NumberArray.java create mode 100644 java/src/edu/wpi/first/wpilibj/networktables2/type/StringArray.java diff --git a/java/src/edu/wpi/first/wpilibj/networktables/NetworkTable.java b/java/src/edu/wpi/first/wpilibj/networktables/NetworkTable.java index 468460c433..64826e1def 100644 --- a/java/src/edu/wpi/first/wpilibj/networktables/NetworkTable.java +++ b/java/src/edu/wpi/first/wpilibj/networktables/NetworkTable.java @@ -1,6 +1,7 @@ package edu.wpi.first.wpilibj.networktables; import edu.wpi.first.wpilibj.tables.*; +import edu.wpi.first.wpilibj.networktables2.type.*; import java.io.*; import java.util.*; @@ -677,6 +678,24 @@ public class NetworkTable implements ITable, IRemote { NetworkTablesJNI.putDoubleArray(path + PATH_SEPARATOR + key, toNative((Double[])value)); else if (value instanceof String[]) NetworkTablesJNI.putStringArray(path + PATH_SEPARATOR + key, (String[])value); + else if (value instanceof BooleanArray) + NetworkTablesJNI.putBooleanArray(path + PATH_SEPARATOR + key, toNative((Boolean[])((ArrayData)value).getDataArray())); + else if (value instanceof NumberArray) + NetworkTablesJNI.putDoubleArray(path + PATH_SEPARATOR + key, toNative((Double[])((ArrayData)value).getDataArray())); + else if (value instanceof StringArray) + NetworkTablesJNI.putStringArray(path + PATH_SEPARATOR + key, (String[])((ArrayData)value).getDataArray()); + } + + public void retrieveValue(String key, Object externalData) throws TableKeyNotDefinedException { + Object value = getValue(key); + if (value instanceof boolean[] && externalData instanceof BooleanArray) + ((ArrayData)externalData).setDataArray(fromNative((boolean[])value)); + else if (value instanceof double[] && externalData instanceof NumberArray) + ((ArrayData)externalData).setDataArray(fromNative((double[])value)); + else if (value instanceof String[] && externalData instanceof StringArray) + ((ArrayData)externalData).setDataArray((String[])value); + else + throw new TableKeyNotDefinedException(key); } /** diff --git a/java/src/edu/wpi/first/wpilibj/networktables2/type/ArrayData.java b/java/src/edu/wpi/first/wpilibj/networktables2/type/ArrayData.java new file mode 100644 index 0000000000..e05f3a03f5 --- /dev/null +++ b/java/src/edu/wpi/first/wpilibj/networktables2/type/ArrayData.java @@ -0,0 +1,49 @@ +package edu.wpi.first.wpilibj.networktables2.type; + +/** + * @deprecated Use ArrayList instead. + */ +public class ArrayData { + private Object[] data = new Object[0]; + + protected Object getAsObject(int index) { + return data[index]; + } + protected void _set(int index, Object value) { + data[index] = value; + } + protected void _add(Object value) { + setSize(size() + 1); + data[size() - 1] = value; + } + public void remove(int index) { + if (index < 0 || index >= size()) + throw new IndexOutOfBoundsException(); + if (index < size() - 1) + System.arraycopy(data, index + 1, data, index, size() - index - 1); + setSize(size() - 1); + } + public void setSize(int size) { + if (size == data.length) + return; + Object[] newArray = new Object[size]; + if (size < data.length) + System.arraycopy(data, 0, newArray, 0, size); + else { + System.arraycopy(data, 0, newArray, 0, data.length); + for (int i = data.length; i < newArray.length; ++i) + newArray[i] = null; + } + data = newArray; + } + public int size() { + return data.length; + } + + public Object[] getDataArray() { + return data; + } + public void setDataArray(Object[] value) { + data = value; + } +} diff --git a/java/src/edu/wpi/first/wpilibj/networktables2/type/BooleanArray.java b/java/src/edu/wpi/first/wpilibj/networktables2/type/BooleanArray.java new file mode 100644 index 0000000000..d80d6e2b4c --- /dev/null +++ b/java/src/edu/wpi/first/wpilibj/networktables2/type/BooleanArray.java @@ -0,0 +1,16 @@ +package edu.wpi.first.wpilibj.networktables2.type; + +/** + * @deprecated Use ArrayList instead. + */ +public class BooleanArray extends ArrayData { + public boolean get(int index) { + return ((Boolean)getAsObject(index)).booleanValue(); + } + public void set(int index, boolean value) { + _set(index, value?Boolean.TRUE:Boolean.FALSE); + } + public void add(boolean value) { + _add(value?Boolean.TRUE:Boolean.FALSE); + } +} diff --git a/java/src/edu/wpi/first/wpilibj/networktables2/type/NumberArray.java b/java/src/edu/wpi/first/wpilibj/networktables2/type/NumberArray.java new file mode 100644 index 0000000000..800f625a50 --- /dev/null +++ b/java/src/edu/wpi/first/wpilibj/networktables2/type/NumberArray.java @@ -0,0 +1,16 @@ +package edu.wpi.first.wpilibj.networktables2.type; + +/** + * @deprecated Use ArrayList instead. + */ +public class NumberArray extends ArrayData { + public double get(int index) { + return ((Double)getAsObject(index)).doubleValue(); + } + public void set(int index, double value) { + _set(index, new Double(value)); + } + public void add(double value) { + _add(new Double(value)); + } +} diff --git a/java/src/edu/wpi/first/wpilibj/networktables2/type/StringArray.java b/java/src/edu/wpi/first/wpilibj/networktables2/type/StringArray.java new file mode 100644 index 0000000000..9df91029ba --- /dev/null +++ b/java/src/edu/wpi/first/wpilibj/networktables2/type/StringArray.java @@ -0,0 +1,16 @@ +package edu.wpi.first.wpilibj.networktables2.type; + +/** + * @deprecated Use ArrayList instead. + */ +public class StringArray extends ArrayData { + public String get(int index) { + return ((String)getAsObject(index)); + } + public void set(int index, String value) { + _set(index, value); + } + public void add(String value) { + _add(value); + } +} diff --git a/java/src/edu/wpi/first/wpilibj/tables/ITable.java b/java/src/edu/wpi/first/wpilibj/tables/ITable.java index f3e6902910..aff494b05c 100644 --- a/java/src/edu/wpi/first/wpilibj/tables/ITable.java +++ b/java/src/edu/wpi/first/wpilibj/tables/ITable.java @@ -49,6 +49,16 @@ public interface ITable { public void putValue(String key, Object value) throws IllegalArgumentException; + /** + * Retrieve an array data type from the table. + * @param key the key to be assigned to + * @param externalValue the array data type to retreive into + * @throws TableKeyNotDefinedException if there is no value associated with + * the given key + * @deprecated Use get*Array functions instead. + */ + public void retrieveValue(String key, Object externalValue) throws TableKeyNotDefinedException; + /** * Put a number in the table * @param key the key to be assigned to