class Object::Atomic
Public Class Methods
new(p1 = v1)
click to toggle source
static VALUE ir_initialize(int argc, VALUE* argv, VALUE self) { VALUE value = Qnil; if (rb_scan_args(argc, argv, "01", &value) == 1) { value = argv[0]; } DATA_PTR(self) = (void *) value; return Qnil; }
Public Instance Methods
compare_and_set(p1, p2)
click to toggle source
static VALUE ir_compare_and_set(volatile VALUE self, VALUE expect_value, VALUE new_value) { #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 if (OSAtomicCompareAndSwap64(expect_value, new_value, &DATA_PTR(self))) { return Qtrue; } #elif HAVE_GCC_CAS if (__sync_bool_compare_and_swap(&DATA_PTR(self), expect_value, new_value)) { return Qtrue; } #else #error No CAS operation available for this platform #endif return Qfalse; }
compare_and_swap(p1, p2)
click to toggle source
static VALUE ir_compare_and_set(volatile VALUE self, VALUE expect_value, VALUE new_value) { #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 if (OSAtomicCompareAndSwap64(expect_value, new_value, &DATA_PTR(self))) { return Qtrue; } #elif HAVE_GCC_CAS if (__sync_bool_compare_and_swap(&DATA_PTR(self), expect_value, new_value)) { return Qtrue; } #else #error No CAS operation available for this platform #endif return Qfalse; }
get()
click to toggle source
static VALUE ir_get(VALUE self) { return (VALUE) DATA_PTR(self); }
get_and_set(p1)
click to toggle source
static VALUE ir_get_and_set(VALUE self, VALUE new_value) { VALUE old_value; old_value = (VALUE) DATA_PTR(self); DATA_PTR(self) = (void *) new_value; return old_value; }
set(p1)
click to toggle source
static VALUE ir_set(VALUE self, VALUE new_value) { DATA_PTR(self) = (void *) new_value; return new_value; }
swap(p1)
click to toggle source
static VALUE ir_get_and_set(VALUE self, VALUE new_value) { VALUE old_value; old_value = (VALUE) DATA_PTR(self); DATA_PTR(self) = (void *) new_value; return old_value; }
value()
click to toggle source
static VALUE ir_get(VALUE self) { return (VALUE) DATA_PTR(self); }
value=(p1)
click to toggle source
static VALUE ir_set(VALUE self, VALUE new_value) { DATA_PTR(self) = (void *) new_value; return new_value; }