package org.simantics.scl.compiler.parser.generator.compression; import java.util.Arrays; public class CompressTable { private static class Row implements Comparable { int id; int density; int minPos; int maxPos; int[] data; int displacement; @Override public int compareTo(Row o) { return o.density < density ? 1 : o.density > density ? -1 : 0; } } public static CompressedTable compress(int[][] table_) { // Sort table by size Row[] table = new Row[table_.length]; for(int i=0;i= 0) continue tryAgain; } } row.displacement = d; for(int p = row.minPos;p<=row.maxPos;++p) { int val = row.data[p]; if(val != 0) { int id = d+p; rowIds[id] = row.id; values[id] = val; } } break; } } // Produce final tables int minDis=capacity; int maxDis=0; for(Row row : table) { int d = row.displacement; if(d < minDis) minDis = d; if(d > maxDis) maxDis = d; } int[] displacement = new int[table.length]; for(int i=0;i