package precomp; import puzzle.Masker.Slot; public sealed interface Mask permits Const9x8.Cell, Const3x4.Cell, Mask.Masker { record Masker(long lo, long hi, int index, int r, int c, int place, byte d) implements precomp.Mask { } default Mask or(Mask o) { return new Masker(o.lo() | lo(), o.hi() | hi(), 0, 0, 0, 0, (byte) 0); } default Mask and(Mask o) { return new Masker(o.lo() & lo(), o.hi() & hi(), 0, 0, 0, 0, (byte) 0); } long hi(); long lo(); int index(); int r(); int c(); int place(); byte d(); default byte letter() { return (byte) (d() | 64); } default void letter(byte[] template, int minR, int minC, int height, int width) { int rr = r() - minR; int cc = c() - minC; if (rr >= 0 && rr < height && cc >= 0 && cc < width) { template[rr * (width + 1) + cc] = letter(); } } default byte clueChar() { return (byte) (d() | 48); } }