/** * Makes an empty EnumOrderedMap (EOM); needs key and value types to be specified in order to work. For an empty * EnumOrderedMap with Radius keys and Coord values, you could use {@code Maker.<Radius, Coord>makeEOM()}. Using * the new keyword is probably just as easy in this case; this method is provided for completeness relative to * makeEOM() with 2 or more parameters. * @param <K> the type of Enum keys in the returned EnumOrderedMap; cannot be inferred and must be specified * @param <V> the type of values in the returned EnumOrderedMap; cannot be inferred and must be specified * @return an empty EnumOrderedMap with the given key and value types. */ public static <K extends Enum<K>, V> EnumOrderedMap<K, V> makeEOM() { return new EnumOrderedMap<>(); }
@Override public void write(Json json, EnumOrderedMap object, Class knownType) { if(object == null) { json.writeValue(null); return; } json.writeObjectStart(); if(!object.isEmpty()) { json.writeValue("c", object.firstKey().getClass().getName()); json.writeValue("k", object.firstKey(), null); json.writeValue("v", object.getAt(0), null); int sz = object.size(); Object[] r = new Object[(sz - 1) * 2]; for (int i = 1, p = 0; i < sz; i++) { r[p++] = object.keyAt(i); r[p++] = object.getAt(i); } json.writeValue("r", r, Object[].class, Object.class); } else json.writeValue("c", "default"); json.writeObjectEnd(); }
EnumOrderedMap<K, V> eom = new EnumOrderedMap<>(); eom.put(k0, v0); return eom; EnumOrderedMap<K, V> eom = new EnumOrderedMap<>(k0); eom.put(k0, v0); eom.put((K) rest[i], (V) rest[i + 1]); }catch (ClassCastException cce) { issueLog.append("makeEOM call had a casting problem with pair at rest[")
@Override @SuppressWarnings("unchecked") public EnumOrderedMap read(Json json, JsonValue jsonData, Class type) { if(jsonData == null || jsonData.isNull()) return null; String c = json.readValue("c", String.class, "", jsonData); if("default".equals(c)) return new EnumOrderedMap(); try { Class<? extends Enum<?>> cl = ClassReflection.forName(c); if(!ClassReflection.isEnum(cl)) return null; Enum<?> k = json.readValue("k", cl, jsonData); Object v = json.readValue("v", null, INVALID, jsonData); Object[] r = json.readValue("r", Object[].class, jsonData); if(v == INVALID) return new EnumOrderedMap(); return Maker.makeEOM(k, v, r); } catch (ReflectionException e) { return null; } //return new OrderedMap(json.readValue(OrderedSet.class, jsonData.get("k")), // json.readValue(ArrayList.class, jsonData.get("v")), jsonData.getFloat("f")); } });