static DependentCache> ai_trueWebs_cache = new DependentCache(f ai_trueWebs_calc, f cachedNodeIndex /*_changeCount*/); static Set ai_trueWebs() { ret keys(ai_trueWebs_cache!); } static MultiMap ai_trueWebs_calc() { ai_onNewOrRemovedWeb(f ai_trueWebs_onNewWeb, f ai_trueWebs_onRemovedWeb); ai_trueWebs_cache.set(new MultiMap); Collection webs = allWebsFromCachedNodeIndex_uncached(); for (Web web : webs) ai_trueWebs_onNewWeb(web); ret ai_trueWebs_cache!; } svoid ai_trueWebs_onNewWeb(Web web) { if (web.unverified) ret; lock ai_trueWebs_cache.lock; new Matches m; for (WebNode n : web_search_dollarX(webFromTriple("$X", "is", "true"), web)) if (web_match("Web *", n, m) && isGlobalID($1)) ai_trueWebs_cache->put(asGlobalID($1), web.globalIDObj()); } svoid ai_trueWebs_onRemovedWeb(Web web) { if (web.unverified) ret; lock ai_trueWebs_cache.lock; new Matches m; for (WebNode n : web_search_dollarX(webFromTriple("$X", "is", "true"), web)) if (web_match("Web *", n, m) && isGlobalID($1)) ai_trueWebs_cache->remove(asGlobalID($1), web.globalIDObj()); }