package org.warp.jcwdb; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.longs.LongArrayList; public class DBLightBigListParser extends DBTypeParserImpl> { private final JCWDatabase db; public DBLightBigListParser(JCWDatabase db) { this.db = db; } public DBReader> getReader() { return (i, size) -> { LongArrayList chunks = new LongArrayList(); IntArrayList chunkSizes = new IntArrayList(); long max = size / (Long.BYTES + Integer.BYTES); for (int item = 0; item < max; item++) { long itm = i.readLong(); int itm2 = i.readInt(); chunks.add(itm); chunkSizes.add(itm2); } return new LightBigList<>(db, chunks, chunkSizes); }; } public DBDataOutput> getWriter(final LightBigList value) { final int elementsCount = value.chunksCount(); return DBDataOutput.create((o) -> { LongArrayList list = value.chunks; IntArrayList list2 = value.chunkSizes; for (int i = 0; i < elementsCount; i++) { o.writeLong(list.getLong(i)); o.writeInt(list2.getInt(i)); } }, DBStandardTypes.LIGHT_LIST_BIG, elementsCount * (Long.BYTES + Integer.BYTES), calculateHash(value)); } @Override public long calculateHash(LightBigList value) { return (((long)value.chunks.hashCode()) << 32) | (value.chunkSizes.hashCode() & 0xffffffffL); } }