Simplified BitVector (de)serializing
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Thu, 9 Apr 2020 16:10:57 +0000 (18:10 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Thu, 9 Apr 2020 16:10:57 +0000 (18:10 +0200)
plugins/net.mograsim.logic.model.am2900/components/net/mograsim/logic/model/am2900/components/Am2900.json
plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/util/BitVectorAdapter.java [new file with mode: 0644]
plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/util/JsonHandler.java

index eadd2da..ceb1351 100644 (file)
           "x": 555.0,
           "y": 270.0
         },
-        "params": {
-          "bits": [
-            "ZERO"
-          ]
-        }
+        "params": "0"
       },
       {
         "id": "FixedOutput",
           "x": 645.0,
           "y": 390.0
         },
-        "params": {
-          "bits": [
-            "ZERO"
-          ]
-        }
+        "params": "0"
       },
       {
         "id": "FixedOutput",
           "x": 385.0,
           "y": 510.0
         },
-        "params": {
-          "bits": [
-            "ONE"
-          ]
-        }
+        "params": "1"
       },
       {
         "id": "FixedOutput",
           "x": 455.0,
           "y": 560.0
         },
-        "params": {
-          "bits": [
-            "ONE"
-          ]
-        }
+        "params": "1"
       },
       {
         "id": "FixedOutput",
           "x": 430.0,
           "y": 570.0
         },
-        "params": {
-          "bits": [
-            "ZERO"
-          ]
-        }
+        "params": "0"
       },
       {
         "id": "FixedOutput",
           "x": 485.0,
           "y": 510.0
         },
-        "params": {
-          "bits": [
-            "ZERO"
-          ]
-        }
+        "params": "0"
       },
       {
         "id": "FixedOutput",
           "x": 545.0,
           "y": 380.0
         },
-        "params": {
-          "bits": [
-            "ZERO"
-          ]
-        }
+        "params": "0"
       },
       {
         "id": "FixedOutput",
           "x": 270.0,
           "y": 380.0
         },
-        "params": {
-          "bits": [
-            "ZERO"
-          ]
-        }
+        "params": "0"
       },
       {
         "id": "NandGate",
diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/util/BitVectorAdapter.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/util/BitVectorAdapter.java
new file mode 100644 (file)
index 0000000..4d8375c
--- /dev/null
@@ -0,0 +1,40 @@
+package net.mograsim.logic.model.util;
+
+import java.lang.reflect.Type;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+
+public class BitVectorAdapter implements JsonSerializer<BitVector>, JsonDeserializer<BitVector>
+{
+       @Override
+       public JsonElement serialize(BitVector src, Type typeOfSrc, JsonSerializationContext context)
+       {
+               return new JsonPrimitive(src.toBitstring());
+       }
+
+       @Override
+       public BitVector deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
+       {
+               if (!typeOfT.equals(BitVector.class))
+                       throw new JsonParseException("Type mismatch");
+               if (json.isJsonPrimitive())
+                       // don't check for isString, because the "input" could consist solely of ones and zeroes.
+                       return BitVector.parseBitstring(json.getAsString());
+
+               return BitVector.of(((BitVectorPrimitive) context.deserialize(json, BitVectorPrimitive.class)).bits);
+       }
+
+       private static class BitVectorPrimitive
+       {
+               public Bit[] bits;
+       }
+}
index 950b953..7c8e353 100644 (file)
@@ -13,9 +13,12 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonElement;
 
+import net.mograsim.logic.core.types.BitVector;
+
 public class JsonHandler
 {
-       public final static Gson parser = new GsonBuilder().setPrettyPrinting().create();
+       public final static Gson parser = new GsonBuilder().registerTypeAdapter(BitVector.class, new BitVectorAdapter()).setPrettyPrinting()
+                       .create();
 
        public static <T> T readJson(String path, Class<T> type) throws IOException
        {