diff options
author | Keith Packard <keithp@keithp.com> | 2016-05-12 23:33:53 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2016-05-12 23:41:55 -0700 |
commit | b1a90adac9f6e2a609ce1ccd6749462bb5c9adbe (patch) | |
tree | 107b6491d8ffc507609f9923353d5454c0664323 /altoslib/AltosHashSet.java | |
parent | b13037fad0905c5933d1ff579122ba1357b02eea (diff) |
altoslib: Store saved state in version-independent format
Use AltosHashSet for AltosState so that AltosDroid doesn't lose
tracker information when the application is upgraded.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosHashSet.java')
-rw-r--r-- | altoslib/AltosHashSet.java | 183 |
1 files changed, 163 insertions, 20 deletions
diff --git a/altoslib/AltosHashSet.java b/altoslib/AltosHashSet.java index 488d52e8..4b89f8cc 100644 --- a/altoslib/AltosHashSet.java +++ b/altoslib/AltosHashSet.java @@ -22,13 +22,11 @@ import java.util.*; import java.text.*; public class AltosHashSet extends Hashtable<String,String> { - private StringWriter writer; - static private int get(StringReader reader) throws IOException { return reader.read(); } - static private String get_token(StringReader reader) throws IOException { + static public String get_token(StringReader reader) throws IOException { int c = get(reader); if (c == -1) @@ -54,7 +52,7 @@ public class AltosHashSet extends Hashtable<String,String> { writer.write(c); } - static private void put_token(StringWriter writer, String token) throws IOException { + static public void put_token(StringWriter writer, String token) throws IOException { for (int i = 0; i < token.length(); i++) { int c = token.codePointAt(i); @@ -83,6 +81,22 @@ public class AltosHashSet extends Hashtable<String,String> { } } + public void putBoolean(String key, boolean value) { + put(key, value ? "t" : "f"); + } + + public boolean getBoolean(String key, boolean def) { + String value = get(key); + + if (value == null) + return def; + if (value.equals("t")) + return true; + if (value.equals("f")) + return false; + return def; + } + public void putInt(String key, int value) { put(key, Integer.toString(value)); } @@ -99,6 +113,59 @@ public class AltosHashSet extends Hashtable<String,String> { } } + public void putIntArray(String key, int value[]) { + if (value == null) + return; + + StringWriter writer = new StringWriter(); + + try { + for (int i = 0; i < value.length; i++) + put_token(writer, Integer.toString(value[i])); + put(key, writer.toString()); + } catch (IOException ie) { + } + } + + public int[] getIntArray(String key, int[] def) { + String value = get(key); + + if (value == null) + return def; + try { + StringReader reader = new StringReader(value); + ArrayList<Integer> array = new ArrayList<Integer>(); + String elt; + + while ((elt = get_token(reader)) != null) + array.add(AltosParse.parse_int(elt)); + int[] ret = new int[array.size()]; + for (int i = 0; i < ret.length; i++) + ret[i] = array.get(i); + return ret; + } catch (ParseException pe) { + return def; + } catch (IOException ie) { + return def; + } + } + + public void putLong(String key, long value) { + put(key, Long.toString(value)); + } + + public long getLong(String key, long def) { + String value = get(key); + + if (value == null) + return def; + try { + return AltosParse.parse_long(value); + } catch (ParseException pe) { + return def; + } + } + public void putDouble(String key, double value) { put(key, AltosParse.format_double_net(value)); } @@ -115,6 +182,43 @@ public class AltosHashSet extends Hashtable<String,String> { } } + public void putDoubleArray(String key, double value[]) { + if (value == null) + return; + + StringWriter writer = new StringWriter(); + + try { + for (int i = 0; i < value.length; i++) + put_token(writer, AltosParse.format_double_net(value[i])); + put(key, writer.toString()); + } catch (IOException ie) { + } + } + + public double[] getDoubleArray(String key, double[] def) { + String value = get(key); + + if (value == null) + return def; + try { + StringReader reader = new StringReader(value); + ArrayList<Double> array = new ArrayList<Double>(); + String elt; + + while ((elt = get_token(reader)) != null) + array.add(AltosParse.parse_double_net(elt)); + double[] ret = new double[array.size()]; + for (int i = 0; i < ret.length; i++) + ret[i] = array.get(i); + return ret; + } catch (ParseException pe) { + return def; + } catch (IOException ie) { + return def; + } + } + public String getString(String key, String def) { String value = get(key); @@ -124,10 +228,34 @@ public class AltosHashSet extends Hashtable<String,String> { } public void putString(String key, String value) { - put(key, value); + if (value != null) + put(key, value); } - public AltosHashSet (String string) throws IOException { + public AltosHashSet getHash(String key) { + String value = get(key); + + if (value == null) + return null; + try { + return new AltosHashSet(value); + } catch (IOException ie) { + return null; + } + } + + public void putHash(String key, AltosHashSet h) { + put(key, h.toString()); + } + + public void putHashable(String key, AltosHashable h) { + if (h == null) + return; + + put(key, h.hashSet().toString()); + } + + private AltosHashSet (String string) throws IOException { StringReader reader = new StringReader(string); String key, value; @@ -143,31 +271,46 @@ public class AltosHashSet extends Hashtable<String,String> { public AltosHashSet() { } - static public AltosHashSet[] array(String string) throws IOException { + static public AltosHashSet fromString(String string) { + try { + return new AltosHashSet(string); + } catch (IOException ie) { + return null; + } + } + + static public AltosHashSet[] array(String string) { if (string == null) return null; - StringReader reader = new StringReader(string); - ArrayList<AltosHashSet> array = new ArrayList<AltosHashSet>(); - String element; + try { + StringReader reader = new StringReader(string); + ArrayList<AltosHashSet> array = new ArrayList<AltosHashSet>(); + String element; - while ((element = get_token(reader)) != null) - array.add(new AltosHashSet(element)); - return array.toArray(new AltosHashSet[0]); + while ((element = get_token(reader)) != null) + array.add(new AltosHashSet(element)); + return array.toArray(new AltosHashSet[0]); + } catch (IOException ie) { + return null; + } } - static public String toString(AltosHashSet[] sets) throws IOException { - + static public String toString(AltosHashSet[] sets) { if (sets == null) return null; - StringWriter writer = new StringWriter(); + try { + StringWriter writer = new StringWriter(); - for (AltosHashSet h : sets) { - String element = h.toString(); - put_token(writer, element); + for (AltosHashSet h : sets) { + String element = h.toString(); + put_token(writer, element); + } + return writer.toString(); + } catch (IOException ie) { + return null; } - return writer.toString(); } } |