43 lines
1.2 KiB
C#
43 lines
1.2 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
|
||
|
namespace Mirror
|
||
|
{
|
||
|
public static class Extensions
|
||
|
{
|
||
|
// string.GetHashCode is not guaranteed to be the same on all machines, but
|
||
|
// we need one that is the same on all machines. simple and stupid:
|
||
|
public static int GetStableHashCode(this string text)
|
||
|
{
|
||
|
unchecked
|
||
|
{
|
||
|
int hash = 23;
|
||
|
foreach (char c in text)
|
||
|
hash = hash * 31 + c;
|
||
|
return hash;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// previously in DotnetCompatibility.cs
|
||
|
// leftover from the UNET days. supposedly for windows store?
|
||
|
internal static string GetMethodName(this Delegate func)
|
||
|
{
|
||
|
#if NETFX_CORE
|
||
|
return func.GetMethodInfo().Name;
|
||
|
#else
|
||
|
return func.Method.Name;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// helper function to copy to List<T>
|
||
|
// C# only provides CopyTo(T[])
|
||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||
|
public static void CopyTo<T>(this IEnumerable<T> source, List<T> destination)
|
||
|
{
|
||
|
// foreach allocates. use AddRange.
|
||
|
destination.AddRange(source);
|
||
|
}
|
||
|
}
|
||
|
}
|