expr visit(expr const & e) { switch (e.kind()) { case expr_kind::Sort: case expr_kind::Constant: case expr_kind::Var: case expr_kind::Meta: case expr_kind::Local: return e; default: break; } check_system("unfold macros"); auto it = m_cache.find(e); if (it != m_cache.end()) return it->second; switch (e.kind()) { case expr_kind::Sort: case expr_kind::Constant: case expr_kind::Var: case expr_kind::Meta: case expr_kind::Local: lean_unreachable(); case expr_kind::Macro: return save_result(e, visit_macro(e)); case expr_kind::App: return save_result(e, visit_app(e)); case expr_kind::Lambda: case expr_kind::Pi: return save_result(e, visit_binding(e)); } lean_unreachable(); }
int aggr_source_discovery::add_to_cache(cache &c, int ifindex, const inet6_addr &group, const inet6_addr &src) { sg_pair p(group, src); cache::iterator i = c.find(p); time_t now = time(0); if (i == c.end()) { c.insert(std::make_pair(p, now)); if (g_mrd->should_log(INTERNAL_FLOW)) { g_mrd->log().xprintf("AggrSourceDiscovery added source" " (%{Addr}, %{Addr}) to cache.\n", src, group); } return 1; } else { if ((now - i->second) > m_keepalive) { if (g_mrd->should_log(INTERNAL_FLOW)) { g_mrd->log().xprintf("AggrSourceDiscovery " "updated source (%{Addr}," "%{Addr}), cache was old.\n", src, group); } /* was in the cache but is old */ source_discovery_origin::discovered_source(ifindex, group, src); return 0; } i->second = now; } return -1; }