fix the DataContainer for the last time

This commit is contained in:
Julian Krings
2025-08-26 17:23:33 +02:00
parent a7b4bf3ff2
commit 7938c150dd
2 changed files with 29 additions and 8 deletions

View File

@@ -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<T> implements Palette<T> {
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<T> implements Palette<T> {
@Override
public void iterate(Consumer2<T, Integer> 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<T> from(Palette<T> 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<T> from(int size, Writable<T> 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;
}
}

View File

@@ -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<T> implements Palette<T> {
@Override
public void iterate(Consumer2<T, Integer> c) {
for (int i = 1; i < size() + 1; i++) {
for (int i = 1; i <= size(); i++) {
c.accept(palette.get(i), i);
}
}