Added String preferences
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / util / BitVectorAdapter.java
1 package net.mograsim.logic.model.util;
2
3 import java.lang.reflect.Type;
4
5 import com.google.gson.JsonDeserializationContext;
6 import com.google.gson.JsonDeserializer;
7 import com.google.gson.JsonElement;
8 import com.google.gson.JsonParseException;
9 import com.google.gson.JsonPrimitive;
10 import com.google.gson.JsonSerializationContext;
11 import com.google.gson.JsonSerializer;
12
13 import net.mograsim.logic.core.types.Bit;
14 import net.mograsim.logic.core.types.BitVector;
15
16 public class BitVectorAdapter implements JsonSerializer<BitVector>, JsonDeserializer<BitVector>
17 {
18         @Override
19         public JsonElement serialize(BitVector src, Type typeOfSrc, JsonSerializationContext context)
20         {
21                 return new JsonPrimitive(src.toBitstring());
22         }
23
24         @Override
25         public BitVector deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
26         {
27                 if (!typeOfT.equals(BitVector.class))
28                         throw new JsonParseException("Type mismatch");
29                 if (json.isJsonPrimitive())
30                         // don't check for isString, because the "input" could consist solely of ones and zeroes.
31                         return BitVector.parseBitstring(json.getAsString());
32
33                 return BitVector.of(((BitVectorPrimitive) context.deserialize(json, BitVectorPrimitive.class)).bits);
34         }
35
36         private static class BitVectorPrimitive
37         {
38                 public Bit[] bits;
39         }
40 }