12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
- using System;
- #if UNITY_2018_3_OR_NEWER
- using UnityEngine;
- #endif
- namespace Cysharp.Threading.Tasks.Internal
- {
- internal static class RuntimeHelpersAbstraction
- {
- // If we can use RuntimeHelpers.IsReferenceOrContainsReferences(.NET Core 2.0), use it.
- public static bool IsWellKnownNoReferenceContainsType<T>()
- {
- return WellKnownNoReferenceContainsType<T>.IsWellKnownType;
- }
- static bool WellKnownNoReferenceContainsTypeInitialize(Type t)
- {
- // The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single.
- if (t.IsPrimitive) return true;
- if (t.IsEnum) return true;
- if (t == typeof(DateTime)) return true;
- if (t == typeof(DateTimeOffset)) return true;
- if (t == typeof(Guid)) return true;
- if (t == typeof(decimal)) return true;
- // unwrap nullable
- if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>))
- {
- return WellKnownNoReferenceContainsTypeInitialize(t.GetGenericArguments()[0]);
- }
- #if UNITY_2018_3_OR_NEWER
- // or add other wellknown types(Vector, etc...) here
- if (t == typeof(Vector2)) return true;
- if (t == typeof(Vector3)) return true;
- if (t == typeof(Vector4)) return true;
- if (t == typeof(Color)) return true;
- if (t == typeof(Rect)) return true;
- if (t == typeof(Bounds)) return true;
- if (t == typeof(Quaternion)) return true;
- if (t == typeof(Vector2Int)) return true;
- if (t == typeof(Vector3Int)) return true;
- #endif
- return false;
- }
- static class WellKnownNoReferenceContainsType<T>
- {
- public static readonly bool IsWellKnownType;
- static WellKnownNoReferenceContainsType()
- {
- IsWellKnownType = WellKnownNoReferenceContainsTypeInitialize(typeof(T));
- }
- }
- }
- }
|