Пример #1
0
 public FCValueType()
 {
     m_nTemplateType = fc_value_tempalte_type.template_none;
     m_nKeyType      = fc_value_type.fc_value_unknow;
     m_nValueType    = fc_value_type.fc_value_unknow;
     m_bRef          = false;
 }
Пример #2
0
    // 功能:分析类型
    public void SetType(Type nType)
    {
        if (nType.IsArray)
        {
            m_nTemplateType = fc_value_tempalte_type.template_array;
            m_key           = m_value = nType.GetElementType();
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }

        string szTypeName  = nType.Name;
        string szSpaceName = nType.Namespace;

        if (szTypeName == "List`1" ||
            szTypeName == "List`1&")
        {
            Type[] argtypes = nType.GetGenericArguments(); // 模板的参数
            m_nTemplateType = fc_value_tempalte_type.template_list;
            m_key           = m_value = argtypes[0];
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }
        if (szTypeName == "Dictionary`2" ||
            szTypeName == "Dictionary`2&")
        {
            Type[] argtypes = nType.GetGenericArguments(); // 模板的参数
            m_nTemplateType = fc_value_tempalte_type.template_map;
            m_key           = argtypes[0];
            m_value         = argtypes[1];
            m_nKeyType      = GetBaseFCType(m_key);
            m_nValueType    = GetBaseFCType(m_value);
            return;
        }
        if (szTypeName == "Task`1")
        {
            Type[] argtypes = nType.GetGenericArguments(); // 模板的参数
            m_nTemplateType = fc_value_tempalte_type.template_task;
            m_key           = m_value = argtypes[0];
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }
        m_nTemplateType = fc_value_tempalte_type.template_none;
        m_key           = m_value = nType;
        m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
    }
Пример #3
0
    public static fc_value_type GetBaseFCType(Type nType)
    {
        if (s_BaseTypeFinder == null)
        {
            InitBaseTypeFinder();
        }
        fc_value_type nFCType = fc_value_type.fc_value_unknow;

        if (s_BaseTypeFinder.TryGetValue(nType, out nFCType))
        {
            return(nFCType);
        }
        if (nType.IsEnum)
        {
            return(fc_value_type.fc_value_enum);
        }
        if (typeof(System.MulticastDelegate).IsAssignableFrom(nType) ||
            nType == typeof(System.MulticastDelegate))
        {
            return(fc_value_type.fc_value_delegate);
        }
        return(fc_value_type.fc_value_object);
    }
Пример #4
0
    public static bool  IsRefType(fc_value_type nType)
    {
        switch (nType)
        {
        case fc_value_type.fc_value_vector2:
        case fc_value_type.fc_value_vector3:
        case fc_value_type.fc_value_vector4:
        case fc_value_type.fc_value_plane:
        case fc_value_type.fc_value_bounds:
        case fc_value_type.fc_value_matrix:
        case fc_value_type.fc_value_ray:
        case fc_value_type.fc_value_sphere:
        case fc_value_type.fc_value_quaternion:
        case fc_value_type.fc_value_color32:
        case fc_value_type.fc_value_color:
        case fc_value_type.fc_value_intrect:
        case fc_value_type.fc_value_rect:
            return(true);

        default:
            break;
        }
        return(false);
    }
Пример #5
0
    public static string GetFCLibFuncShortName(fc_value_type nType)
    {
        switch (nType)
        {
        case fc_value_type.fc_value_bool:
            return("bool");

        case fc_value_type.fc_value_char:
            return("char");

        case fc_value_type.fc_value_byte:
            return("byte");

        case fc_value_type.fc_value_short:
            return("short");

        case fc_value_type.fc_value_ushort:
            return("ushort");

        case fc_value_type.fc_value_int:
            return("int");

        case fc_value_type.fc_value_uint:
            return("uint");

        case fc_value_type.fc_value_float:
            return("float");

        case fc_value_type.fc_value_double:
            return("double");

        case fc_value_type.fc_value_int64:
            return("int64");

        case fc_value_type.fc_value_uint64:
            return("uint64");

        case fc_value_type.fc_value_string_a:
            return("string_a");

        case fc_value_type.fc_value_vector2:
            return("vector2");

        case fc_value_type.fc_value_vector3:
            return("vector3");

        case fc_value_type.fc_value_vector4:
            return("vector4");

        case fc_value_type.fc_value_plane:
            return("plane");

        case fc_value_type.fc_value_ray:
            return("ray");

        case fc_value_type.fc_value_matrix:
            return("matrix");

        case fc_value_type.fc_value_sphere:
            return("sphere");

        case fc_value_type.fc_value_quaternion:
            return("quaternion");

        case fc_value_type.fc_value_bounds:
            return("bounds");

        case fc_value_type.fc_value_rect:
            return("rect");

        case fc_value_type.fc_value_intrect:
            return("intrect");

        case fc_value_type.fc_value_color:
            return("color");

        case fc_value_type.fc_value_color32:
            return("color32");

        case fc_value_type.fc_value_int_ptr:
            return("void_ptr");

        //case fc_value_type.fc_value_system_object:
        //case fc_value_type.fc_value_object:
        //    return "intptr";
        default:
            break;
        }
        return(string.Empty);
    }
Пример #6
0
    public static string GetBaseValueTypeName(fc_value_type nFCType, Type nType, bool bCSharp, bool bFullName)
    {
        if (nType.IsByRef)
        {
            Type nRealType = nType.GetElementType();
            if (nRealType != null)
            {
                FCValueType v = TransType(nRealType);
                nFCType = v.m_nValueType;
                nType   = nRealType;
            }
        }

        switch (nFCType)
        {
        case fc_value_type.fc_value_bool:
            return("bool");

        case fc_value_type.fc_value_byte:
            return("byte");

        case fc_value_type.fc_value_char:
            return("char");

        case fc_value_type.fc_value_short:
            return("short");

        case fc_value_type.fc_value_ushort:
            return("ushort");

        case fc_value_type.fc_value_int:
            return("int");

        case fc_value_type.fc_value_uint:
            return("uint");

        case fc_value_type.fc_value_float:
            return("float");

        case fc_value_type.fc_value_double:
            return("double");

        case fc_value_type.fc_value_int64:
            return(bCSharp ? "long": "long");

        case fc_value_type.fc_value_uint64:
            return(bCSharp ? "ulong" : "ulong");

        case fc_value_type.fc_value_string_a:
            return(bCSharp ? "string" : "StringA");

        case fc_value_type.fc_value_void:
            return("void");

        case fc_value_type.fc_value_vector2:
            return("Vector2");

        case fc_value_type.fc_value_vector3:
            return("Vector3");

        case fc_value_type.fc_value_vector4:
            return("Vector4");

        case fc_value_type.fc_value_plane:
            return("Plane");

        case fc_value_type.fc_value_bounds:
            return("Bounds");

        case fc_value_type.fc_value_matrix:
            return(bCSharp ? "Matrix4x4" : "Matrix");

        case fc_value_type.fc_value_ray:
            return("Ray");

        case fc_value_type.fc_value_sphere:
            return("Sphere");

        case fc_value_type.fc_value_quaternion:
            return("Quaternion");

        case fc_value_type.fc_value_color32:
            return("Color32");

        case fc_value_type.fc_value_color:
            return("Color");

        case fc_value_type.fc_value_intrect:
            return("IntRect");

        case fc_value_type.fc_value_rect:
            return("Rect");

        case fc_value_type.fc_value_int_ptr:
            return("IntPtr");

        case fc_value_type.fc_value_system_object:
            return(bCSharp ? "System.Object" : "Object");

        case fc_value_type.fc_value_unity_object:
            return(bCSharp ? "UnityObject" : "UnityObject");

        //return bCSharp ? "UnityEngine.Object" : "UnityObject";
        case fc_value_type.fc_value_delegate:
        {
            return(GetDeleteExportName(nType, bCSharp, bFullName));
        }

        case fc_value_type.fc_value_task:
            return("Task");

        default:
            break;
        }
        string szCSharpName = bFullName ? nType.FullName : nType.Name;

        if (string.IsNullOrEmpty(szCSharpName))
        {
            return(string.Empty);
        }
        if (!bFullName && !bCSharp)
        {
            if (nType.IsNested && nType.IsEnum)
            {
                string szFullName = nType.FullName;
                int    nIndex     = szFullName.LastIndexOf('.');
                if (nIndex != -1)
                {
                    szCSharpName = szFullName.Substring(nIndex + 1);
                }
                else
                {
                    szCSharpName = szFullName;
                }
            }
        }

        szCSharpName = szCSharpName.Replace('+', '.');
        szCSharpName = szCSharpName.Replace("&", "");
        return(szCSharpName);
    }
Пример #7
0
 public static bool IsObjectType(fc_value_type nValueType)
 {
     return(nValueType == fc_value_type.fc_value_system_object || nValueType == fc_value_type.fc_value_object || nValueType == fc_value_type.fc_value_unity_object);
 }
Пример #8
0
 public static bool IsGraphicType(fc_value_type nValueType)
 {
     return(nValueType != fc_value_type.fc_value_object && nValueType >= fc_value_type.fc_value_vector2);
 }
Пример #9
0
 public static bool IsBaseType(fc_value_type nValueType)
 {
     return(nValueType < fc_value_type.fc_value_system_object);
 }
Пример #10
0
    public void SetType(Type nType)
    {
        m_bRef = nType.IsByRef;
        if (m_bRef)
        {
            Type nRealType = nType.GetElementType();
            if (nRealType != null)
            {
                nType = nRealType;
            }
        }

        if (nType.IsArray)
        {
            m_nTemplateType = fc_value_tempalte_type.template_array;
            m_key           = m_value = nType.GetElementType();
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }

        string szTypeName  = nType.Name;
        string szSpaceName = nType.Namespace;

        if (szTypeName == "List`1" ||
            szTypeName == "List`1&")
        {
            Type[] argtypes = nType.GetGenericArguments();
            m_nTemplateType = fc_value_tempalte_type.template_list;
            m_key           = m_value = argtypes[0];
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }
        if (szTypeName == "Dictionary`2" ||
            szTypeName == "Dictionary`2&")
        {
            Type[] argtypes = nType.GetGenericArguments();
            m_nTemplateType = fc_value_tempalte_type.template_map;
            m_key           = argtypes[0];
            m_value         = argtypes[1];
            m_nKeyType      = GetBaseFCType(m_key);
            m_nValueType    = GetBaseFCType(m_value);
            return;
        }
        if (szTypeName == "Task`1")
        {
            Type[] argtypes = nType.GetGenericArguments();
            m_nTemplateType = fc_value_tempalte_type.template_task;
            m_key           = m_value = argtypes[0];
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }
        if (szTypeName == "IEnumerable`1")
        {
            Type[] argtypes = nType.GetGenericArguments();
            m_nTemplateType = fc_value_tempalte_type.template_ienumerable;
            m_key           = m_value = argtypes[0];
            m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
            return;
        }
        m_bCustomTemplate = IsCustomTemplate(szTypeName);

        m_nTemplateType = fc_value_tempalte_type.template_none;
        m_key           = m_value = nType;
        m_nKeyType      = m_nValueType = GetBaseFCType(m_value);
    }
Пример #11
0
    // 功能:得到变量的类型名
    public static string GetBaseValueTypeName(fc_value_type nFCType, Type nType, bool bCSharp, bool bFullName)
    {
        switch (nFCType)
        {
        case fc_value_type.fc_value_bool:
            return("bool");

        case fc_value_type.fc_value_byte:
            return("byte");

        case fc_value_type.fc_value_char:
            return("char");

        case fc_value_type.fc_value_short:
            return("short");

        case fc_value_type.fc_value_ushort:
            return("ushort");

        case fc_value_type.fc_value_int:
            return("int");

        case fc_value_type.fc_value_uint:
            return("uint");

        case fc_value_type.fc_value_float:
            return("float");

        case fc_value_type.fc_value_double:
            return("double");

        case fc_value_type.fc_value_int64:
            return(bCSharp ? "long": "int64");

        case fc_value_type.fc_value_uint64:
            return(bCSharp ? "ulong" : "uint64");

        case fc_value_type.fc_value_string_a:
            return(bCSharp ? "string" : "StringA");

        case fc_value_type.fc_value_void:
            return("void");

        case fc_value_type.fc_value_vector2:
            return("Vector2");

        case fc_value_type.fc_value_vector3:
            return("Vector3");

        case fc_value_type.fc_value_vector4:
            return("Vector4");

        case fc_value_type.fc_value_plane:
            return("Plane");

        case fc_value_type.fc_value_bounds:
            return("Bounds");

        case fc_value_type.fc_value_matrix:
            return(bCSharp ? "Matrix4x4" : "Matrix");

        case fc_value_type.fc_value_ray:
            return("Ray");

        case fc_value_type.fc_value_sphere:
            return("Sphere");

        case fc_value_type.fc_value_quaternion:
            return("Quaternion");

        case fc_value_type.fc_value_color32:
            return("Color32");

        case fc_value_type.fc_value_color:
            return("Color");

        case fc_value_type.fc_value_intrect:
            return("IntRect");

        case fc_value_type.fc_value_rect:
            return("Rect");

        case fc_value_type.fc_value_system_object:
            return(bCSharp ? "System.Object" : "Object");

        case fc_value_type.fc_value_unity_object:
            return(bCSharp ? "UnityObject" : "UnityObject");

        //return bCSharp ? "UnityEngine.Object" : "UnityObject";
        case fc_value_type.fc_value_delegate:
        {
            return(GetDeleteExportName(nType, bCSharp, bFullName));
        }

        case fc_value_type.fc_value_task:
            return("Task");

        default:
            break;
        }
        string szCSharpName = bFullName ? nType.FullName : nType.Name;

        szCSharpName = szCSharpName.Replace('+', '.');
        return(szCSharpName);
    }
Пример #12
0
    bool AddKeyValueCall(fc_value_type nValueType, string szLeftName, string szPtrName, string szCSharpName)
    {
        StringBuilder fileData = m_szTempBuilder;
        bool          bSuc     = true;

        switch (nValueType)
        {
        case fc_value_type.fc_value_bool:
        case fc_value_type.fc_value_byte:
        case fc_value_type.fc_value_short:
        case fc_value_type.fc_value_ushort:
        case fc_value_type.fc_value_int:
        case fc_value_type.fc_value_uint:
        case fc_value_type.fc_value_float:
        case fc_value_type.fc_value_double:
        case fc_value_type.fc_value_vector2:
        case fc_value_type.fc_value_vector3:
        case fc_value_type.fc_value_vector4:
        case fc_value_type.fc_value_rect:
        case fc_value_type.fc_value_color32:
        case fc_value_type.fc_value_color:
        {
            fileData.AppendFormat("                {0} {1} = FCLibHelper.fc_get_value_{2}({3});\r\n", szCSharpName, szLeftName, szCSharpName, szPtrName);
        }
        break;

        case fc_value_type.fc_value_int64:
        {
            fileData.AppendFormat("                {0} {1} = FCLibHelper.fc_get_value_int64({2});\r\n", szCSharpName, szLeftName, szPtrName);
        }
        break;

        case fc_value_type.fc_value_uint64:
        {
            fileData.AppendFormat("                {0} {1} = FCLibHelper.fc_get_value_uint64({2});\r\n", szCSharpName, szLeftName, szPtrName);
        }
        break;

        case fc_value_type.fc_value_string_a:
        {
            fileData.AppendFormat("                string {0} = FCLibHelper.fc_get_value_string_a({1});\r\n", szLeftName, szPtrName);
        }
        break;

        case fc_value_type.fc_value_system_object:
        case fc_value_type.fc_value_unity_object:
        case fc_value_type.fc_value_object:
        {
            fileData.AppendFormat("                {0} {1} = FCGetObj.GetObj<{2}>({3});\r\n", szCSharpName, szLeftName, szCSharpName, szPtrName);
        }
        break;

        case fc_value_type.fc_value_enum:
        {
            fileData.AppendFormat("                {0} {1} = ({2})FCLibHelper.fc_set_array_int({3});\r\n", szCSharpName, szLeftName, szCSharpName, szPtrName);
        }
        break;

        default:
            bSuc = false;
            break;
        }
        return(bSuc);
    }