sclass TripleIndex extends VirtualNodeIndex { SyncListMultiMap> index = caseInsensitiveSyncListMultiMap(); Map websByID = synchroHashMap(); bool activated; // are we the main index (see tripleIndex()) int numWebs() { ret l(websByID); } L get(S query) { ret ai_tripleRefsToWebNodes_lazyList(index.get(query)); } Web getWeb(GlobalID id) { ret webFromTriple(websByID.get(id)); } void addWeb(Web web) { if (web == null) ret; TripleWeb w = ai_webToTripleWeb(web); if (w == null) //ret with print("Skipping non-tripelizable web"); fail("Skipping non-tripelizable web: " + webToStringShort(web)); index.put(w.a, TripleA(w)); index.put(w.b, TripleB(w)); index.put(w.c, TripleC(w)); websByID.put(w.globalID, w); } void clear() { index.clear(); websByID.clear(); } activate { if (!activated) { activated = true; ai_onNewOrRemovedWeb(voidfunc(Web web) { addWeb(web) }, voidfunc(Web web) { removeWeb(web) }); } } }