/** * Convert the provided raw bytes into a 64bit Ruby integer. * * @example Convert the bytes to an Integer. * rb_integer_from_bson_int64(Int64, bytes); * * @param [ BSON::Int64 ] self The Int64 eigenclass. * @param [ String ] bytes The raw bytes. * * @return [ Integer ] The Ruby integer. * * @since 2.0.0 */ static VALUE rb_integer_from_bson_int64(VALUE self, VALUE bson) { const uint8_t *v = (const uint8_t*) RSTRING_PTR(bson); const int64_t lower = v[0] + (v[1] << 8) + (v[2] << 16) + (v[3] << 24); const int64_t upper = v[4] + (v[5] << 8) + (v[6] << 16) + (v[7] << 24); const uint64_t integer = lower + (upper << 32); return INT642NUM(integer); }
/** * Convert the provided raw bytes into a 64bit Ruby integer. * * @example Convert the bytes to an Integer. * rb_integer_from_bson_int64(Int64, bytes); * * @param [ BSON::Int64 ] self The Int64 eigenclass. * @param [ String ] bytes The raw bytes. * * @return [ Integer ] The Ruby integer. * * @since 2.0.0 */ static VALUE rb_integer_from_bson_int64(VALUE self, VALUE bson) { return INT642NUM(rb_bson_to_int64_t(bson)); }