map: add functions new_map/new_map_init_1 with key_bytes parameter (#7424)
							parent
							
								
									25dd983d97
								
							
						
					
					
						commit
						2147d8785b
					
				|  | @ -227,9 +227,13 @@ pub mut: | |||
| 	len             int | ||||
| } | ||||
| 
 | ||||
| // bootstrap
 | ||||
| fn new_map_1(value_bytes int) map { | ||||
| 	return new_map(int(sizeof(string)), value_bytes) | ||||
| } | ||||
| 
 | ||||
| fn new_map(key_bytes int, value_bytes int) map { | ||||
| 	metasize := int(sizeof(u32) * (init_capicity + extra_metas_inc)) | ||||
| 	key_bytes := int(sizeof(string)) | ||||
| 	return map{ | ||||
| 		key_bytes: key_bytes | ||||
| 		value_bytes: value_bytes | ||||
|  | @ -244,9 +248,20 @@ fn new_map_1(value_bytes int) map { | |||
| } | ||||
| 
 | ||||
| fn new_map_init(n int, value_bytes int, keys &string, values voidptr) map { | ||||
| 	mut out := new_map_1(value_bytes) | ||||
| 	for i in 0 .. n { | ||||
| 		unsafe {out.set(keys[i], byteptr(values) + i * value_bytes)} | ||||
| 	return new_map_init_1(n, int(sizeof(string)), value_bytes, keys, values) | ||||
| } | ||||
| 
 | ||||
| fn new_map_init_1(n int, key_bytes int, value_bytes int, keys voidptr, values voidptr) map { | ||||
| 	mut out := new_map(key_bytes, value_bytes) | ||||
| 	// TODO pre-allocate n slots
 | ||||
| 	mut pkey := byteptr(keys) | ||||
| 	mut pval := byteptr(values) | ||||
| 	for _ in 0 .. n { | ||||
| 		unsafe { | ||||
| 			out.set_1(pkey, pval) | ||||
| 			pkey += key_bytes | ||||
| 			pval += value_bytes | ||||
| 		} | ||||
| 	} | ||||
| 	return out | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue