concept PersistentLister implements ILister { new HashMap lists; new HashMap treeMaps; new HashMap treeSets; new HashMap vars; public synchronized L getList(S name) { L l = lists.get(name); if (l == null) { lists.put(name, l = listInConcept(this, new L)); change(); } ret l; } public synchronized IVar getVar(S name) { Var v = vars.get(name); if (v == null) { vars.put(name, v = varInConcept(this, new Var)); change(); } ret l; } public synchronized Map getTreeMap(S name) { Map m = treeMaps.get(name); if (m == null) { treeMaps.put(name, m = mapInConcept(this, new TreeMap)); change(); } if (getOpt_raw(m, 'm) == null) fail("map not sane: " + className(m) + " " + struct(m)); ret m; } public synchronized Set getTreeSet(S name) { Set m = treeSets.get(name); if (m == null) { treeSets.put(name, m = setInConcept(this, new TreeSet)); change(); } ret m; } }