builtin: optimize hex() (#11261)
							parent
							
								
									2f6b2dd189
								
							
						
					
					
						commit
						fde934cd93
					
				|  | @ -256,13 +256,12 @@ pub fn (b bool) str() string { | |||
| [direct_array_access; inline] | ||||
| fn u64_to_hex(nn u64, len byte) string { | ||||
| 	mut n := nn | ||||
| 	mut buf := [256]byte{} | ||||
| 	mut buf := [17]byte{} | ||||
| 	buf[len] = 0 | ||||
| 	mut i := 0 | ||||
| 	for i = len - 1; i >= 0; i-- { | ||||
| 		d := byte(n & 0xF) | ||||
| 		x := if d < 10 { d + `0` } else { d + 87 } | ||||
| 		buf[i] = x | ||||
| 		buf[i] = if d < 10 { d + `0` } else { d + 87 } | ||||
| 		n = n >> 4 | ||||
| 	} | ||||
| 	return unsafe { tos(memdup(&buf[0], len + 1), len) } | ||||
|  | @ -272,13 +271,12 @@ fn u64_to_hex(nn u64, len byte) string { | |||
| [direct_array_access; inline] | ||||
| fn u64_to_hex_no_leading_zeros(nn u64, len byte) string { | ||||
| 	mut n := nn | ||||
| 	mut buf := [256]byte{} | ||||
| 	mut buf := [17]byte{} | ||||
| 	buf[len] = 0 | ||||
| 	mut i := 0 | ||||
| 	for i = len - 1; i >= 0; i-- { | ||||
| 		d := byte(n & 0xF) | ||||
| 		x := if d < 10 { d + `0` } else { d + 87 } | ||||
| 		buf[i] = x | ||||
| 		buf[i] = if d < 10 { d + `0` } else { d + 87 } | ||||
| 		n = n >> 4 | ||||
| 		if n == 0 { | ||||
| 			break | ||||
|  | @ -306,7 +304,11 @@ pub fn (nn byte) hex() string { | |||
| // Example: assert i8(10).hex() == '0a'
 | ||||
| // Example: assert i8(15).hex() == '0f'
 | ||||
| pub fn (nn i8) hex() string { | ||||
| 	return byte(nn).hex() | ||||
| 	if nn == 0 { | ||||
| 		return '00' | ||||
| 	} | ||||
| 	return u64_to_hex(u64(nn), 2) | ||||
| 	//return byte(nn).hex()
 | ||||
| } | ||||
| 
 | ||||
| // hex returns the value of the `u16` as a hexadecimal `string`.
 | ||||
|  |  | |||
|  | @ -23,8 +23,6 @@ fn test_str_methods() { | |||
| 	assert int(-2147483648).str() == '-2147483648' | ||||
| 	assert i64(1).str() == '1' | ||||
| 	assert i64(-1).str() == '-1' | ||||
| 	// assert byte(1).str() == '1'
 | ||||
| 	// assert byte(-1).str() == '255'
 | ||||
| 	assert u16(1).str() == '1' | ||||
| 	assert u16(-1).str() == '65535' | ||||
| 	assert u32(1).str() == '1' | ||||
|  | @ -33,6 +31,8 @@ fn test_str_methods() { | |||
| 	assert u64(-1).str() == '18446744073709551615' | ||||
| 	assert voidptr(-1).str() == 'ffffffffffffffff' | ||||
| 	assert voidptr(1).str() == '1' | ||||
| 	assert (&byte(-1)).str() == 'ffffffffffffffff' | ||||
| 	assert (&byte(1)).str() == '1' | ||||
| 	assert byteptr(-1).str() == 'ffffffffffffffff' | ||||
| 	assert byteptr(1).str() == '1' | ||||
| } | ||||
|  | @ -105,6 +105,18 @@ fn test_hex() { | |||
| 	assert b.hex() == '4d2' | ||||
| 	b1 := -1 | ||||
| 	assert b1.hex() == 'ffffffff' | ||||
| 	// unsigned tests
 | ||||
| 	assert u8(12).hex() == '0c' | ||||
| 	assert u8(255).hex() == 'ff' | ||||
| 	assert u16(65535).hex() == 'ffff' | ||||
| 	assert u32(-1).hex() == 'ffffffff' | ||||
| 	assert u64(-1).hex() == 'ffffffffffffffff' | ||||
| 	// signed tests
 | ||||
| 	assert i8(-1).hex() == 'ff' | ||||
| 	assert i8(12).hex() == '0c' | ||||
| 	assert i16(32767).hex() == '7fff' | ||||
| 	assert int(2147483647).hex() == '7fffffff' | ||||
| 	assert i64(9223372036854775807).hex() == '7fffffffffffffff' | ||||
| } | ||||
| 
 | ||||
| fn test_bin() { | ||||
|  | @ -168,7 +180,6 @@ fn test_num_separator() { | |||
| 	// f32 or f64
 | ||||
| 	assert 312_2.55 == 3122.55 | ||||
| 	assert 312_2.55 == 3122.55 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| fn test_int_decl() { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue