From 80cb6a01d7de62e525b9a791f90041536b3dc977 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 21 Apr 2022 21:49:35 +0100 Subject: [PATCH] [Project] Add some more methods --- src/libserver/symcache/symcache_c.cxx | 19 +++++++++++++++++++ src/libserver/symcache/symcache_internal.hxx | 16 ++++++++++++++++ src/libserver/symcache/symcache_item.hxx | 4 ++++ 3 files changed, 39 insertions(+) diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx index 7e552e83a..bdef8b162 100644 --- a/src/libserver/symcache/symcache_c.cxx +++ b/src/libserver/symcache/symcache_c.cxx @@ -218,9 +218,28 @@ rspamd_symcache_item_name (struct rspamd_symcache_item *item) return real_item->get_name().c_str(); } +gint +rspamd_symcache_item_flags (struct rspamd_symcache_item *item) +{ + auto *real_item = C_API_SYMCACHE_ITEM(item); + return real_item->get_flags(); +} + const struct rspamd_symcache_item_stat * rspamd_symcache_item_stat (struct rspamd_symcache_item *item) { auto *real_item = C_API_SYMCACHE_ITEM(item); return real_item->st; +} + +void +rspamd_symcache_foreach(struct rspamd_symcache *cache, + void (*func) (struct rspamd_symcache_item *item, gpointer /* userdata */), + gpointer ud) +{ + auto *real_cache = C_API_SYMCACHE(cache); + + real_cache->symbols_foreach([&](const rspamd::symcache::cache_item* item) { + func((struct rspamd_symcache_item *)item, ud); + }); } \ No newline at end of file diff --git a/src/libserver/symcache/symcache_internal.hxx b/src/libserver/symcache/symcache_internal.hxx index 1bfd2f881..974c34e75 100644 --- a/src/libserver/symcache/symcache_internal.hxx +++ b/src/libserver/symcache/symcache_internal.hxx @@ -317,7 +317,23 @@ public: */ auto periodic_resort(struct ev_loop *ev_loop, double cur_time, double last_resort) -> void; + /** + * A simple helper to get the reload time + * @return + */ auto get_reload_time() const { return reload_time; }; + + /** + * Iterate over all symbols using a specific functor + * @tparam Functor + * @param f + */ + template + auto symbols_foreach(Functor f) -> void { + for (const auto &sym_it : items_by_symbol) { + f(sym_it.second.get()); + } + } }; /* diff --git a/src/libserver/symcache/symcache_item.hxx b/src/libserver/symcache/symcache_item.hxx index c5b6c8ff7..23347a8ec 100644 --- a/src/libserver/symcache/symcache_item.hxx +++ b/src/libserver/symcache/symcache_item.hxx @@ -265,6 +265,10 @@ public: return symbol; } + auto get_flags() const -> auto { + return flags; + }; + auto add_condition(lua_State *L, int cbref) -> bool { if (!is_virtual()) { -- 2.39.5