85 lines
2.0 KiB
C#
85 lines
2.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Reflection;
|
|
#if UNITY_EDITOR
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
#endif
|
|
|
|
|
|
namespace UniJSON
|
|
{
|
|
public static partial class ConcreteCast
|
|
{
|
|
public static string GetMethodName(Type src, Type dst)
|
|
{
|
|
return string.Format("Cast{0}To{1}", src.Name, dst.Name);
|
|
}
|
|
|
|
public static MethodInfo GetMethod(Type src, Type dst)
|
|
{
|
|
var name = GetMethodName(src, dst);
|
|
var mi = typeof(ConcreteCast).GetMethod(name,
|
|
BindingFlags.Static | BindingFlags.Public);
|
|
return mi;
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
static Type[] s_castTypes = new Type[]
|
|
{
|
|
typeof(byte),
|
|
typeof(ushort),
|
|
typeof(uint),
|
|
typeof(ulong),
|
|
|
|
typeof(sbyte),
|
|
typeof(short),
|
|
typeof(int),
|
|
typeof(long),
|
|
|
|
typeof(float),
|
|
typeof(double),
|
|
};
|
|
|
|
public static void GenerateGenericCast()
|
|
{
|
|
var s = new StringBuilder();
|
|
using (var w = new StringWriter(s))
|
|
{
|
|
w.WriteLine(@"
|
|
using System;
|
|
|
|
namespace UniJSON {
|
|
public static partial class ConcreteCast
|
|
{
|
|
");
|
|
foreach (var x in s_castTypes)
|
|
{
|
|
foreach (var y in s_castTypes)
|
|
{
|
|
w.WriteLine(@"
|
|
public static $1 $2($0 src)
|
|
{
|
|
return ($1)src;
|
|
}
|
|
".Replace("$0", x.Name).Replace("$1", y.Name).Replace("$2", GetMethodName(x, y)));
|
|
}
|
|
}
|
|
w.WriteLine(@"
|
|
}
|
|
}
|
|
");
|
|
}
|
|
|
|
var path = Application.dataPath + SOURCE;
|
|
Debug.LogFormat("{0}", path);
|
|
File.WriteAllText(path, s.ToString().Replace("\r\n", "\n"), new UTF8Encoding(false));
|
|
AssetDatabase.ImportAsset("Assets" + SOURCE);
|
|
}
|
|
const string SOURCE = "/VRM/UniJSON/Scripts/ConcreteCast.g.cs";
|
|
#endif
|
|
}
|
|
}
|