diff --git a/core/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java b/core/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java index 77cc1ee54..134425f6f 100644 --- a/core/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java +++ b/core/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java @@ -21,6 +21,8 @@ package com.volmit.iris.util.hunk.bits; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.function.Consumer2; +import java.io.DataInputStream; +import java.io.IOException; import java.util.LinkedHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -33,7 +35,6 @@ public class HashPalette implements Palette { this.size = new AtomicInteger(1); this.palette = new LinkedHashMap<>(); this.lookup = new KMap<>(); - palette.put(null, 0); } @Override @@ -78,13 +79,32 @@ public class HashPalette implements Palette { @Override public void iterate(Consumer2 c) { synchronized (palette) { - for (T i : palette.keySet()) { - if (i == null) { - continue; - } - - c.accept(i, id(i)); + for (int i = 1; i < size.get(); i++) { + c.accept(lookup.get(i), i); } } } + + @Override + public Palette from(Palette oldPalette) { + oldPalette.iterate((t, i) -> { + if (t == null) throw new NullPointerException("Null palette entries are not allowed!"); + lookup.put(i, t); + palette.put(t, i); + }); + size.set(oldPalette.size() + 1); + return this; + } + + @Override + public Palette from(int size, Writable writable, DataInputStream in) throws IOException { + for (int i = 1; i <= size; i++) { + T t = writable.readNodeData(in); + if (t == null) throw new NullPointerException("Null palette entries are not allowed!"); + lookup.put(i, t); + palette.put(t, i); + } + this.size.set(size + 1); + return this; + } } diff --git a/core/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java b/core/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java index 45172ac1e..5e2c1d43e 100644 --- a/core/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java +++ b/core/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.hunk.bits; import com.volmit.iris.util.function.Consumer2; +import lombok.Synchronized; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReferenceArray; @@ -87,7 +88,7 @@ public class LinearPalette implements Palette { @Override public void iterate(Consumer2 c) { - for (int i = 1; i < size() + 1; i++) { + for (int i = 1; i <= size(); i++) { c.accept(palette.get(i), i); } }