sclass ThoughtSpace { S globalID; new LinkedHashMap statements; new HashMap statementsIndex; new LinkedHashMap concepts; long changes; *() {} *(S *globalID) {} void addStatements(L l) { for (Lisp x : l) addStatement(x); } void addLispStatements(Collection l) { for (LispStatement x : l) addStatement(x); } void addStatement(Lisp l) { if (!containsStatement(l)) addStatement(new LispStatement(l)); } void addStatement(LispStatement s) { statements.put(s.globalID, s); statementsIndex.put(s.term, s); ++changes; } void removeStatement(S statementID) { removeStatement(statements.get(statementID)); } void removeStatement(LispStatement s) { if (s != null) removeStatement(s.term); } void removeStatement(Lisp l) { LispStatement s = statementsIndex.get(l); if (s != null) { statements.remove(s.globalID); statementsIndex.remove(l); ++changes; } } bool containsStatement(Lisp l) { ret statementsIndex.containsKey(l); } }