diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-04-21 21:49:35 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-04-21 21:49:35 +0100 |
commit | 80cb6a01d7de62e525b9a791f90041536b3dc977 (patch) | |
tree | 30e1d1dc33b4176e23d7832da3dbea650a2cfbe0 | |
parent | 5d5672f5600c517c23348cbdf9400e1bcae3364c (diff) | |
download | rspamd-80cb6a01d7de62e525b9a791f90041536b3dc977.tar.gz rspamd-80cb6a01d7de62e525b9a791f90041536b3dc977.zip |
[Project] Add some more methods
-rw-r--r-- | src/libserver/symcache/symcache_c.cxx | 19 | ||||
-rw-r--r-- | src/libserver/symcache/symcache_internal.hxx | 16 | ||||
-rw-r--r-- | src/libserver/symcache/symcache_item.hxx | 4 |
3 files changed, 39 insertions, 0 deletions
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<typename Functor> + 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()) { |