From 9ef482bd13bcbb8fd64b2ef343438764fe9d225e Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 14 Jul 2025 10:53:00 -0400 Subject: [PATCH] Add rb_concurrent_set_size --- concurrent_set.c | 8 ++++++++ internal/concurrent_set.h | 1 + 2 files changed, 9 insertions(+) diff --git a/concurrent_set.c b/concurrent_set.c index 8e77669b43..3380bd189d 100644 --- a/concurrent_set.c +++ b/concurrent_set.c @@ -61,6 +61,14 @@ rb_concurrent_set_new(const struct rb_concurrent_set_funcs *funcs, int capacity) return obj; } +rb_atomic_t +rb_concurrent_set_size(VALUE set_obj) +{ + struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj); + + return RUBY_ATOMIC_LOAD(set->size); +} + struct concurrent_set_probe { int idx; int d; diff --git a/internal/concurrent_set.h b/internal/concurrent_set.h index d0f546b888..ecd33d85ce 100644 --- a/internal/concurrent_set.h +++ b/internal/concurrent_set.h @@ -14,6 +14,7 @@ struct rb_concurrent_set_funcs { }; VALUE rb_concurrent_set_new(const struct rb_concurrent_set_funcs *funcs, int capacity); +rb_atomic_t rb_concurrent_set_size(VALUE set_obj); VALUE rb_concurrent_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data); VALUE rb_concurrent_set_delete_by_identity(VALUE set_obj, VALUE key); void rb_concurrent_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *key, void *data), void *data);