Class: Concurrent::CAtomicFixnum
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ext/concurrent-ruby-ext/rb_concurrent.c, ext/concurrent-ruby-ext/atomic_fixnum.c |
Constant Summary
-
MAX_VALUE =
# File 'ext/concurrent-ruby-ext/rb_concurrent.c', line 47LL2NUM(LLONG_MAX)
-
MIN_VALUE =
CAtomicFixnum
LL2NUM(LLONG_MIN)
Class Method Summary
- .new(*args) constructor
Instance Attribute Summary
- #value rw
- #value=(value) rw
Instance Method Summary
- #compare_and_set(rb_expect, rb_update)
-
#decrement(*args)
Alias for #down.
- #down(*args) (also: #decrement)
-
#increment(*args)
Alias for #up.
- #up(*args) (also: #increment)
- #update
Constructor Details
.new(*args)
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 14
VALUE method_atomic_fixnum_initialize(int argc, VALUE* argv, VALUE self) { VALUE value = LL2NUM(0); rb_check_arity(argc, 0, 1); if (argc == 1) { Check_Type(argv[0], T_FIXNUM); value = argv[0]; } DATA_PTR(self) = (void *) value; return(self); }
Instance Attribute Details
#value (rw)
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 25
VALUE method_atomic_fixnum_value(VALUE self) { return (VALUE) DATA_PTR(self); }
#value=(value) (rw)
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 29
VALUE method_atomic_fixnum_value_set(VALUE self, VALUE value) { Check_Type(value, T_FIXNUM); DATA_PTR(self) = (void *) value; return(value); }
Instance Method Details
#compare_and_set(rb_expect, rb_update)
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 57
VALUE method_atomic_fixnum_compare_and_set(VALUE self, VALUE rb_expect, VALUE rb_update) { Check_Type(rb_expect, T_FIXNUM); Check_Type(rb_update, T_FIXNUM); return ir_compare_and_set(self, rb_expect, rb_update); }
#decrement(*args)
Alias for #down.
#down(*args) Also known as: #decrement
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 46
VALUE method_atomic_fixnum_decrement(int argc, VALUE* argv, VALUE self) { long long value = NUM2LL((VALUE) DATA_PTR(self)); long long delta = 1; rb_check_arity(argc, 0, 1); if (argc == 1) { Check_Type(argv[0], T_FIXNUM); delta = NUM2LL(argv[0]); } return method_atomic_fixnum_value_set(self, LL2NUM(value - delta)); }
#increment(*args)
Alias for #up.
#up(*args) Also known as: #increment
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 35
VALUE method_atomic_fixnum_increment(int argc, VALUE* argv, VALUE self) { long long value = NUM2LL((VALUE) DATA_PTR(self)); long long delta = 1; rb_check_arity(argc, 0, 1); if (argc == 1) { Check_Type(argv[0], T_FIXNUM); delta = NUM2LL(argv[0]); } return method_atomic_fixnum_value_set(self, LL2NUM(value + delta)); }
#update
[ GitHub ]# File 'ext/concurrent-ruby-ext/atomic_fixnum.c', line 63
VALUE method_atomic_fixnum_update(VALUE self) { VALUE old_value, new_value; for (;;) { old_value = method_atomic_fixnum_value(self); new_value = rb_yield(old_value); if (ir_compare_and_set(self, old_value, new_value) == Qtrue) { return new_value; } } }