static VALUE rb_struct_hash_r(VALUE s, VALUE s2, int recur) { long h = rb_hash(rb_obj_class(s)); if (!recur) { for (long i = 0; i < RSTRUCT_LEN(s); i++) { h = (h << 1) | (h < 0 ? 1 : 0); VALUE n = rb_hash(RSTRUCT_PTR(s)[i]); h ^= NUM2LONG(n); } } return LONG2FIX(h); }
/* :nodoc: */ static VALUE nucomp_hash(VALUE self) { st_index_t v, h[2]; VALUE n; get_dat1(self); n = rb_hash(dat->real); h[0] = NUM2LONG(n); n = rb_hash(dat->imag); h[1] = NUM2LONG(n); v = rb_memhash(h, sizeof(h)); return LONG2FIX(v); }
static VALUE rb_struct_hash(VALUE s) { long i, h; VALUE n; h = rb_hash(rb_obj_class(s)); for (i = 0; i < RSTRUCT_LEN(s); i++) { h = (h << 1) | (h<0 ? 1 : 0); n = rb_hash(RSTRUCT_PTR(s)[i]); h ^= NUM2LONG(n); } return LONG2FIX(h); }
static VALUE range_hash(VALUE range) { long hash = EXCL(range); VALUE v; v = rb_hash(RANGE_BEG(range)); hash ^= v << 1; v = rb_hash(RANGE_END(range)); hash ^= v << 9; hash ^= EXCL(range) << 24; return LONG2FIX(hash); }
/* :nodoc: */ static VALUE nurat_hash(VALUE self, SEL sel) { long v, h[2]; VALUE n; get_dat1(self); n = rb_hash(dat->num); h[0] = NUM2LONG(n); n = rb_hash(dat->den); h[1] = NUM2LONG(n); v = rb_memhash(h, sizeof(h)); return LONG2FIX(v); }
static VALUE range_hash(VALUE range) { st_index_t hash = EXCL(range); VALUE v; hash = rb_hash_start(hash); v = rb_hash(RANGE_BEG(range)); hash = rb_hash_uint(hash, NUM2LONG(v)); v = rb_hash(RANGE_END(range)); hash = rb_hash_uint(hash, NUM2LONG(v)); hash = rb_hash_uint(hash, EXCL(range) << 24); hash = rb_hash_end(hash); return LONG2FIX(hash); }
static VALUE recursive_hash(VALUE range, VALUE dummy, int recur) { st_index_t hash = EXCL(range); VALUE v; hash = rb_hash_start(hash); if (!recur) { v = rb_hash(RANGE_BEG(range)); hash = rb_hash_uint(hash, NUM2LONG(v)); v = rb_hash(RANGE_END(range)); hash = rb_hash_uint(hash, NUM2LONG(v)); } hash = rb_hash_uint(hash, EXCL(range) << 24); hash = rb_hash_end(hash); return LONG2FIX(hash); }
static VALUE rb_struct_hash(VALUE s) { long i, len; st_index_t h; VALUE n; const VALUE *ptr; h = rb_hash_start(rb_hash(rb_obj_class(s))); ptr = RSTRUCT_CONST_PTR(s); len = RSTRUCT_LEN(s); for (i = 0; i < len; i++) { n = rb_hash(ptr[i]); h = rb_hash_uint(h, NUM2LONG(n)); } h = rb_hash_end(h); return INT2FIX(h); }
static VALUE recursive_hash(VALUE s, VALUE dummy, int recur) { long i, len; st_index_t h; VALUE n, *ptr; h = rb_hash_start(rb_hash(rb_obj_class(s))); if (!recur) { ptr = RSTRUCT_PTR(s); len = RSTRUCT_LEN(s); for (i = 0; i < len; i++) { n = rb_hash(ptr[i]); h = rb_hash_uint(h, NUM2LONG(n)); } } h = rb_hash_end(h); return INT2FIX(h); }
VALUE hash_spec_rb_hash(VALUE self, VALUE hash) { return rb_hash(hash); }