struct __go_open_array __go_string_to_byte_array (String str) { uintptr cap; unsigned char *data; struct __go_open_array ret; cap = runtime_roundupsize (str.len); data = (unsigned char *) runtime_malloc (cap); __builtin_memcpy (data, str.str, str.len); if (cap != (uintptr) str.len) __builtin_memset (data + str.len, 0, cap - (uintptr) str.len); ret.__values = (void *) data; ret.__count = str.len; ret.__capacity = (intgo) cap; return ret; }
struct __go_open_array __go_string_to_int_array (String str) { size_t c; const unsigned char *p; const unsigned char *pend; uintptr mem; uint32_t *data; uint32_t *pd; struct __go_open_array ret; c = 0; p = str.str; pend = p + str.len; while (p < pend) { int rune; ++c; p += __go_get_rune (p, pend - p, &rune); } if (c > MaxMem / sizeof (uint32_t)) runtime_throw ("out of memory"); mem = runtime_roundupsize (c * sizeof (uint32_t)); data = (uint32_t *) runtime_mallocgc (mem, 0, FlagNoScan | FlagNoZero); p = str.str; pd = data; while (p < pend) { int rune; p += __go_get_rune (p, pend - p, &rune); *pd++ = rune; } if (mem > (uintptr) c * sizeof (uint32_t)) __builtin_memset (data + c, 0, mem - (uintptr) c * sizeof (uint32_t)); ret.__values = (void *) data; ret.__count = c; ret.__capacity = (intgo) (mem / sizeof (uint32_t)); return ret; }