private static string GenerateGuidString(FastGuid guid) { return(string.Create(13, guid.IdValue, (buffer, value) => { char[] encode32Chars = s_encode32Chars; buffer[12] = encode32Chars[value & 31]; buffer[11] = encode32Chars[(value >> 5) & 31]; buffer[10] = encode32Chars[(value >> 10) & 31]; buffer[9] = encode32Chars[(value >> 15) & 31]; buffer[8] = encode32Chars[(value >> 20) & 31]; buffer[7] = encode32Chars[(value >> 25) & 31]; buffer[6] = encode32Chars[(value >> 30) & 31]; buffer[5] = encode32Chars[(value >> 35) & 31]; buffer[4] = encode32Chars[(value >> 40) & 31]; buffer[3] = encode32Chars[(value >> 45) & 31]; buffer[2] = encode32Chars[(value >> 50) & 31]; buffer[1] = encode32Chars[(value >> 55) & 31]; buffer[0] = encode32Chars[(value >> 60) & 31]; })); }
private static unsafe string GenerateGuidString(FastGuid guid) { // stackalloc to allocate array on stack rather than heap char *charBuffer = stackalloc char[13]; // ID charBuffer[0] = _encode32Chars[(int)(guid.IdValue >> 60) & 31]; charBuffer[1] = _encode32Chars[(int)(guid.IdValue >> 55) & 31]; charBuffer[2] = _encode32Chars[(int)(guid.IdValue >> 50) & 31]; charBuffer[3] = _encode32Chars[(int)(guid.IdValue >> 45) & 31]; charBuffer[4] = _encode32Chars[(int)(guid.IdValue >> 40) & 31]; charBuffer[5] = _encode32Chars[(int)(guid.IdValue >> 35) & 31]; charBuffer[6] = _encode32Chars[(int)(guid.IdValue >> 30) & 31]; charBuffer[7] = _encode32Chars[(int)(guid.IdValue >> 25) & 31]; charBuffer[8] = _encode32Chars[(int)(guid.IdValue >> 20) & 31]; charBuffer[9] = _encode32Chars[(int)(guid.IdValue >> 15) & 31]; charBuffer[10] = _encode32Chars[(int)(guid.IdValue >> 10) & 31]; charBuffer[11] = _encode32Chars[(int)(guid.IdValue >> 5) & 31]; charBuffer[12] = _encode32Chars[(int)guid.IdValue & 31]; // string ctor overload that takes char* return(new string(charBuffer, 0, 13)); }