9092858a58
I updated everything to the latest Unity Editor. Also realized I had the wrong shaders on my hairs, those are fixed and the hairs look MUCH better!
72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Unity.Burst
|
|
{
|
|
#if BURST_COMPILER_SHARED
|
|
public static class SafeStringArrayHelper
|
|
#else
|
|
internal static class SafeStringArrayHelper
|
|
#endif
|
|
{
|
|
// Methods to help when needing to serialise arrays of strings safely
|
|
public static string SerialiseStringArraySafe(string[] array)
|
|
{
|
|
var s = new StringBuilder();
|
|
foreach (var entry in array)
|
|
{
|
|
s.Append($"{Encoding.UTF8.GetByteCount(entry)}]");
|
|
s.Append(entry);
|
|
}
|
|
return s.ToString();
|
|
}
|
|
|
|
public static string[] DeserialiseStringArraySafe(string input)
|
|
{
|
|
// Safer method of serialisation (len]path) e.g. "5]frank8]c:\\billy" ( new [] {"frank","c:\\billy"} )
|
|
|
|
// Since the len part of `len]path` is specified in bytes we'll be working on a byte array instead
|
|
// of a string, because functions like Substring expects char offsets and number of chars.
|
|
var bytes = Encoding.UTF8.GetBytes(input);
|
|
var listFolders = new List<string>();
|
|
var index = 0;
|
|
var length = bytes.Length;
|
|
while (index < length)
|
|
{
|
|
int len = 0;
|
|
// Read the decimal encoded length, terminated by an ']'
|
|
while (true)
|
|
{
|
|
if (index >= length)
|
|
{
|
|
throw new FormatException($"Invalid input `{input}`: reached end while reading length");
|
|
}
|
|
|
|
var d = bytes[index];
|
|
|
|
if (d == ']')
|
|
{
|
|
index++;
|
|
break;
|
|
}
|
|
|
|
if (d < '0' || d > '9')
|
|
{
|
|
throw new FormatException(
|
|
$"Invalid input `{input}` at {index}: Got non-digit character while reading length");
|
|
}
|
|
|
|
len = len * 10 + (d - '0');
|
|
|
|
index++;
|
|
}
|
|
|
|
listFolders.Add(Encoding.UTF8.GetString(bytes, index, len));
|
|
index += len;
|
|
}
|
|
|
|
return listFolders.ToArray();
|
|
}
|
|
}
|
|
} |