persistable asclass AbstractSSIList extends NotifyingList is StringIO { *() { init(); } *(Cl l) { initAndAddAll(importSSIs(l)); } L importSSIs(Cl l) { ret map importSSI(l); } abstract MySSI importSSI(AbstractSSI ssi); BufferedImage render(WidthAndHeight size) { ret renderAll(this, size); } BufferedImage render(BufferedImage canvas) { ret renderAll(this, canvas); } BufferedImage renderOutlines(WidthAndHeight size) { ret toSSIList().renderOutlines(size); } SSIList toSSIList() { ret new SSIList(map(this, -> .toSSI())); } public void readWrite(StringHead head) { head.exchangeAll(this); } L vectorSSIs() { ret instancesOf VectorSSI(this); } L directSSIs aka literalSSIs() { ret instancesOf SSI(this); } Percent percentageVectorized() { ret Percent.ratio(l(vectorSSIs()), l(this)); } }