summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--concurrent_set.c8
-rw-r--r--internal/concurrent_set.h1
2 files changed, 9 insertions, 0 deletions
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);