diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/data/DataPalette.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/data/DataPalette.java new file mode 100644 index 000000000..8be6fc055 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/data/DataPalette.java @@ -0,0 +1,71 @@ +package com.volmit.iris.gen.v2.scaffold.data; + +import com.volmit.iris.util.KList; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class DataPalette { + private final KList palette; + + public DataPalette() + { + this(new KList<>(16)); + } + + public DataPalette(KList palette) + { + this.palette = palette; + } + + public KList getPalette() + { + return palette; + } + + public int getIndex(T t) + { + int v = 0; + + synchronized (palette) + { + v = palette.indexOf(t); + + if(v == -1) + { + v = palette.size(); + palette.add(t); + } + } + + return v; + } + + public void write(IOAdapter adapter, DataOutputStream dos) throws IOException + { + synchronized (palette) + { + dos.writeShort(getPalette().size() + Short.MIN_VALUE); + + for(int i = 0; i < palette.size(); i++) + { + adapter.write(palette.get(i), dos); + } + } + } + + public static DataPalette getPalette(IOAdapter adapter, DataInputStream din) throws IOException + { + KList palette = new KList<>(); + int s = din.readShort() - Short.MIN_VALUE; + + for(int i = 0; i < s; i++) + { + palette.add(adapter.read(din)); + } + + return new DataPalette<>(palette); + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/data/IOAdapter.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/data/IOAdapter.java new file mode 100644 index 000000000..4c8d12600 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/data/IOAdapter.java @@ -0,0 +1,13 @@ +package com.volmit.iris.gen.v2.scaffold.data; + +import com.volmit.iris.gen.v2.scaffold.hunk.Hunk; +import com.volmit.iris.util.Function3; + +import java.io.*; + +public interface IOAdapter +{ + public void write(T t, DataOutputStream dos) throws IOException; + + public T read(DataInputStream din) throws IOException; +}