Exemple #1
0
        public static bool IsIteratorWrapper(DefTypeDef type)
        {
            if (IsTypeNameIteratorWrapper(type.BaseTypeName))
                return true;

            return false;
        }
Exemple #2
0
        public static bool IsInternalTypeDef(DefType type)
        {
            if (!(type is DefTypeDef))
            {
                return(false);
            }

            if (type.IsSharedPtr)
            {
                return(false);
            }

            DefTypeDef explicitType = (type.IsNested) ? type.ParentClass.FindType <DefTypeDef>(type.Name) : type.NameSpace.FindType <DefTypeDef>(type.Name);

            if (explicitType.IsSTLContainer)
            {
                return(false);
            }

            if (explicitType.BaseType is DefInternal)
            {
                return(true);
            }

            return(false);
        }
Exemple #3
0
        public static bool IsIteratorWrapper(DefTypeDef type)
        {
            if (IsTypeNameIteratorWrapper(type.BaseTypeName))
            {
                return(true);
            }

            return(false);
        }
Exemple #4
0
        protected virtual DefType CreateExplicitContainerType(string container, string key, string val)
        {
            string      stdcont = "std::" + container;
            XmlDocument doc     = new XmlDocument();
            XmlElement  elem    = doc.CreateElement("typedef");

            elem.SetAttribute("basetype", stdcont);
            elem.SetAttribute("name", stdcont);
            XmlElement te = doc.CreateElement("type");

            te.InnerText = val;
            elem.AppendChild(te);
            if (key != "")
            {
                te           = doc.CreateElement("type");
                te.InnerText = key;
                elem.InsertAfter(te, null);
            }

            return(DefTypeDef.CreateExplicitType((DefTypeDef)DefType.CreateType(elem)));
        }
Exemple #5
0
        public static string GetBaseType(DefTypeDef typedef)
        {
            string baseTypeName = typedef.BaseTypeName;

            if (string.IsNullOrEmpty(baseTypeName))
            {
                return(baseTypeName);
            }

            int    charPos     = baseTypeName.IndexOf("<");
            string ogreTypeDef = charPos == -1 ? baseTypeName : baseTypeName.Substring(0, charPos);

            if (IsStdCollection(ogreTypeDef))
            {
                return("std::" + ogreTypeDef);
            }

            if (ogreTypeDef.Equals("HashedVector", StringComparison.Ordinal))
            {
                return(ogreTypeDef);
            }

            return(baseTypeName);
        }
Exemple #6
0
 public void IncAddValueTypeTypeDef(DefTypeDef t, IndentStringBuilder sb)
 {
     sb.AppendIndent("");
     if (t.IsNested)
         sb.Append(Producer.GetProtectionString(t.ProtectionType) + ": ");
     sb.Append("typedef " + t.BaseType.FullCLRName + " " + t.CLRName + ";\n\n");
 }
Exemple #7
0
        public void CppAddSTLContainer(DefTypeDef t, IndentStringBuilder sb)
        {
            if (t is DefStdPair)
            {
                return;
            }

            if (t is DefTemplateOneType)
            {
                if (t.HasAttribute<STLListNoRemoveAndUniqueAttribute>())
                {
                    sb.AppendLine("#undef CPP_STLLIST_DEFINE_REMOVE_AND_UNIQUE");
                    sb.AppendLine("#define CPP_STLLIST_DEFINE_REMOVE_AND_UNIQUE(PREFIX,CLASS_NAME,M,N)");
                    sb.AppendLine();
                }

                sb.AppendLine("#define STLDECL_MANAGEDTYPE " + t.TypeMembers[0].CLRTypeName);
                sb.AppendLine("#define STLDECL_NATIVETYPE " + t.TypeMembers[0].NativeTypeName);
                CppCheckTypeForDependancy(t.TypeMembers[0].Type);
            }
            else if (t is DefTemplateTwoTypes)
            {
                sb.AppendLine("#define STLDECL_MANAGEDKEY " + t.TypeMembers[0].CLRTypeName);
                sb.AppendLine("#define STLDECL_MANAGEDVALUE " + t.TypeMembers[1].CLRTypeName);
                sb.AppendLine("#define STLDECL_NATIVEKEY " + t.TypeMembers[0].NativeTypeName);
                sb.AppendLine("#define STLDECL_NATIVEVALUE " + t.TypeMembers[1].NativeTypeName);
                CppCheckTypeForDependancy(t.TypeMembers[0].Type);
                CppCheckTypeForDependancy(t.TypeMembers[1].Type);
            }

            sb.AppendIndent("CPP_DECLARE_STL" + t.STLContainer.ToUpper());

            if (t.IsReadOnly)
                sb.Append("_READONLY");

            string prefix;
            if (!t.IsNested)
            {
                prefix = t.FullNativeName;
                prefix = prefix.Substring(0, prefix.LastIndexOf("::"));
            }
            else
            {
                prefix = t.ParentClass.FullNativeName;
            }

            if (prefix.Contains("::"))
                prefix = prefix.Substring(prefix.IndexOf("::") + 2) + "::";
            else
                prefix = "";

            sb.Append("( " + prefix + ", " + t.CLRName);

            if (t is DefTemplateOneType)
                sb.Append(", STLDECL_MANAGEDTYPE, STLDECL_NATIVETYPE )\n");
            else if (t is DefTemplateTwoTypes)
                sb.Append(", STLDECL_MANAGEDKEY, STLDECL_MANAGEDVALUE, STLDECL_NATIVEKEY, STLDECL_NATIVEVALUE )\n");
            else
                throw new Exception("Unexpected");

            if (t is DefTemplateOneType)
            {
                sb.AppendLine("#undef STLDECL_MANAGEDTYPE");
                sb.AppendLine("#undef STLDECL_NATIVETYPE");

                if (t.HasAttribute<STLListNoRemoveAndUniqueAttribute>())
                {
                    sb.AppendLine();
                    sb.AppendLine("#undef CPP_STLLIST_DEFINE_REMOVE_AND_UNIQUE");
                    sb.AppendLine("#define CPP_STLLIST_DEFINE_REMOVE_AND_UNIQUE(PREFIX,CLASS_NAME,M,N)    CPP_STLLIST_REMOVE_AND_UNIQUE_DEFINITIONS(PREFIX,CLASS_NAME,M,N)");
                }
            }
            else if (t is DefTemplateTwoTypes)
            {
                sb.AppendLine("#undef STLDECL_MANAGEDKEY");
                sb.AppendLine("#undef STLDECL_MANAGEDVALUE");
                sb.AppendLine("#undef STLDECL_NATIVEKEY");
                sb.AppendLine("#undef STLDECL_NATIVEVALUE");
            }

            sb.AppendLine();
        }
Exemple #8
0
        public void IncAddSTLContainer(DefTypeDef t, IndentStringBuilder sb)
        {
            if (t is DefStdPair)
            {
                //sb.AppendIndent("");
                //if (t.IsNested)
                //    sb.Append(Producer.GetProtectionString(t.ProtectionType) + ": ");
                //sb.Append("typedef " + t.FullSTLContainerTypeName + " " + t.CLRName + ";\n\n");
                return;
            }

            if (!t.IsNested)
            {
                this.AddPreDeclaration("ref class " + t.CLRName + ";");
                this.AddPreDeclaration("ref class Const_" + t.CLRName + ";");
            }

            if (t is DefTemplateOneType)
            {
                if (t.HasAttribute<STLListNoRemoveAndUniqueAttribute>())
                {
                    sb.AppendLine("#undef INC_STLLIST_DEFINE_REMOVE_AND_UNIQUE");
                    sb.AppendLine("#define INC_STLLIST_DEFINE_REMOVE_AND_UNIQUE(M)");
                    sb.AppendLine();
                }

                sb.AppendLine("#define STLDECL_MANAGEDTYPE " + t.TypeMembers[0].CLRTypeName);
                sb.AppendLine("#define STLDECL_NATIVETYPE " + t.TypeMembers[0].NativeTypeName);
                CheckTypeForDependancy(t.TypeMembers[0].Type);
            }
            else if (t is DefTemplateTwoTypes)
            {
                sb.AppendLine("#define STLDECL_MANAGEDKEY " + t.TypeMembers[0].CLRTypeName);
                sb.AppendLine("#define STLDECL_MANAGEDVALUE " + t.TypeMembers[1].CLRTypeName);
                sb.AppendLine("#define STLDECL_NATIVEKEY " + t.TypeMembers[0].NativeTypeName);
                sb.AppendLine("#define STLDECL_NATIVEVALUE " + t.TypeMembers[1].NativeTypeName);
                CheckTypeForDependancy(t.TypeMembers[0].Type);
                CheckTypeForDependancy(t.TypeMembers[1].Type);
            }

            sb.AppendIndent("");
            string publicprot, privateprot;
            if (!t.IsNested)
            {
                publicprot = "public";
                privateprot = "private";
            }
            else
            {
                publicprot = Producer.GetProtectionString(t.ProtectionType) + ": ";
                privateprot = "private:";
                sb.Append(publicprot);
            }

            sb.Append("INC_DECLARE_STL" + t.STLContainer.ToUpper());

            if (t.IsReadOnly)
                sb.Append("_READONLY");

            sb.Append("( " + t.CLRName);

            if (t is DefTemplateOneType)
                sb.Append(", STLDECL_MANAGEDTYPE, STLDECL_NATIVETYPE, " + publicprot + ", " + privateprot + " )\n");
            else if (t is DefTemplateTwoTypes)
                sb.Append(", STLDECL_MANAGEDKEY, STLDECL_MANAGEDVALUE, STLDECL_NATIVEKEY, STLDECL_NATIVEVALUE, " + publicprot + ", " + privateprot + " )\n");
            else
                throw new Exception("Unexpected");

            if (t is DefTemplateOneType)
            {
                sb.AppendLine("#undef STLDECL_MANAGEDTYPE");
                sb.AppendLine("#undef STLDECL_NATIVETYPE");

                if (t.HasAttribute<STLListNoRemoveAndUniqueAttribute>())
                {
                    sb.AppendLine();
                    sb.AppendLine("#undef INC_STLLIST_DEFINE_REMOVE_AND_UNIQUE");
                    sb.AppendLine("#define INC_STLLIST_DEFINE_REMOVE_AND_UNIQUE(M)    INC_STLLIST_REMOVE_AND_UNIQUE_DEFINITIONS(M)");
                }
            }
            else if (t is DefTemplateTwoTypes)
            {
                sb.AppendLine("#undef STLDECL_MANAGEDKEY");
                sb.AppendLine("#undef STLDECL_MANAGEDVALUE");
                sb.AppendLine("#undef STLDECL_NATIVEKEY");
                sb.AppendLine("#undef STLDECL_NATIVEVALUE");
            }

            sb.AppendLine();
        }
 //public override string GetCLRTypeName(ITypeMember m)
 //{
 //    switch (m.PassedByType)
 //    {
 //        case PassedByType.Reference:
 //            return ConversionTypeName;
 //        case PassedByType.PointerPointer:
 //        case PassedByType.Value:
 //        case PassedByType.Pointer:
 //        default:
 //            throw new Exception("Unexpected");
 //    }
 //}
 //public override string GetNativeCallConversion(string expr, ITypeMember m)
 //{
 //    switch (m.PassedByType)
 //    {
 //        case PassedByType.Reference:
 //            return NativeCallConversionFunction + "( " + expr + ")";
 //        case PassedByType.PointerPointer:
 //        case PassedByType.Value:
 //        case PassedByType.Pointer:
 //        default:
 //            throw new Exception("Unexpected");
 //    }
 //}
 public static new DefTypeDef CreateExplicitType(DefTypeDef typedef)
 {
     return new DefStdMap(typedef.Element);
 }
 //public override void GetDefaultParamValueConversion(DefParam param, out string preConversion, out string conversion, out string postConversion)
 //{
 //    preConversion = postConversion = "";
 //    switch (param.PassedByType)
 //    {
 //        case PassedByType.Pointer:
 //            if (param.IsConst)
 //                conversion = "nullptr";
 //            else
 //            {
 //                preConversion = "array<" + TypeMembers[0].CLRTypeName + ">^ out_" + param.Name + ";";
 //                conversion = "out_" + param.Name;
 //            }
 //            break;
 //        default:
 //            base.GetDefaultParamValueConversion(param, out preConversion, out conversion, out postConversion);
 //            break;
 //    }
 //}
 //public override string GetCLRParamTypeName(DefParam param)
 //{
 //    switch (param.PassedByType)
 //    {
 //        case PassedByType.Reference:
 //        case PassedByType.Pointer:
 //            if (param.IsConst)
 //                return "Collections::Generic::List<" + TypeMembers[0].CLRTypeName + ">^";
 //            else
 //                return "[Out] array<" + TypeMembers[0].CLRTypeName + ">^%";
 //        case PassedByType.Value:
 //            return "Collections::Generic::List<" + TypeMembers[0].CLRTypeName + ">^";
 //        case PassedByType.PointerPointer:
 //        default:
 //            throw new Exception("Unexpected");
 //    }
 //}
 //public override string GetPreCallParamConversion(DefParam param, out string newname)
 //{
 //    string expr;
 //    switch (param.PassedByType)
 //    {
 //        case PassedByType.Reference:
 //            if (param.IsConst)
 //            {
 //                expr = FullNativeName + " o_" + param.Name + ";\n";
 //                expr += "FillListFromGenericList<" + FullNativeName + ", " + TypeMembers[0].CLRTypeName + ">(o_" + param.Name + ", " + param.Name + ");\n";
 //                newname = "o_" + param.Name;
 //                return expr;
 //            }
 //            else
 //            {
 //                newname = "o_" + param.Name;
 //                return FullNativeName + " o_" + param.Name + ";\n";
 //            }
 //        case PassedByType.Pointer:
 //            if (param.IsConst)
 //            {
 //                expr = FullNativeName + "* p_" + param.Name + " = 0;\n";
 //                expr += FullNativeName + " o_" + param.Name + ";\n";
 //                expr += "if (" + param.Name + " != CLR_NULL)\n{\n";
 //                expr += "\tFillListFromGenericList<" + FullNativeName + ", " + TypeMembers[0].CLRTypeName + ">(o_" + param.Name + ", " + param.Name + ");\n";
 //                expr += "\tp_" + param.Name + " = &o_" + param.Name + ";\n";
 //                expr += "}\n";
 //                newname = "p_" + param.Name;
 //                return expr;
 //            }
 //            else
 //            {
 //                newname = "&o_" + param.Name;
 //                return FullNativeName + " o_" + param.Name + ";\n";
 //            }
 //        case PassedByType.Value:
 //            expr = FullNativeName + " o_" + param.Name + ";\n";
 //            expr += "FillListFromGenericList<" + FullNativeName + ", " + TypeMembers[0].CLRTypeName + ">(o_" + param.Name + ", " + param.Name + ");\n";
 //            newname = "o_" + param.Name;
 //            return expr;
 //        case PassedByType.PointerPointer:
 //        default:
 //            throw new Exception("Unexpected");
 //    }
 //}
 //public override string GetPostCallParamConversionCleanup(DefParam param)
 //{
 //    switch (param.PassedByType)
 //    {
 //        case PassedByType.Reference:
 //        case PassedByType.Pointer:
 //            if (param.IsConst)
 //            {
 //                return base.GetPostCallParamConversionCleanup(param);
 //            }
 //            else
 //            {
 //                return param.Name + " = " + NativeCallConversionFunction + "<" + TypeMembers[0].CLRTypeName + ", " + FullNativeName + ">(o_" + param.Name + ");\n";
 //            }
 //        default:
 //            return base.GetPostCallParamConversionCleanup(param);
 //    }
 //}
 //public override string GetCLRTypeName(ITypeMember m)
 //{
 //    if (IsUnnamedSTLContainer)
 //    {
 //        switch (m.PassedByType)
 //        {
 //            case PassedByType.Value:
 //            case PassedByType.Pointer:
 //            case PassedByType.Reference:
 //                return "array<" + TypeMembers[0].CLRTypeName + ">^";
 //            case PassedByType.PointerPointer:
 //            default:
 //                throw new Exception("Unexpected");
 //        }
 //    }
 //    else
 //        return base.GetCLRTypeName(m);
 //}
 //public override string GetNativeCallConversion(string expr, ITypeMember m)
 //{
 //    if (IsUnnamedSTLContainer)
 //    {
 //        switch (m.PassedByType)
 //        {
 //            case PassedByType.Value:
 //            case PassedByType.Reference:
 //                return NativeCallConversionFunction + "<" + TypeMembers[0].CLRTypeName + ", " + FullNativeName + ">( " + expr + " )";
 //            case PassedByType.Pointer:
 //                return NativeCallConversionFunction + "<" + TypeMembers[0].CLRTypeName + ", " + FullNativeName + ">( *(" + expr + ") )";
 //            case PassedByType.PointerPointer:
 //            default:
 //                throw new Exception("Unexpected");
 //        }
 //    }
 //    else
 //        return base.GetNativeCallConversion(expr, m);
 //}
 public static new DefTypeDef CreateExplicitType(DefTypeDef typedef)
 {
     switch (typedef.BaseTypeName)
     {
         case "std::vector":
             return DefStdVector.CreateExplicitType(typedef);
         case "std::set":
             return DefStdSet.CreateExplicitType(typedef);
         case "std::deque":
             return DefStdDeque.CreateExplicitType(typedef);
         case "std::list":
             return new DefStdList(typedef.Element);
         default:
             throw new Exception("Unexpected");
     }
 }
 public static new DefTypeDef CreateExplicitType(DefTypeDef typedef)
 {
     return new DefIterator(typedef.Element);
 }
 public static new DefTypeDef CreateExplicitType(DefTypeDef typedef)
 {
     switch (typedef.BaseTypeName)
     {
         case "::std::hash_map":
             return DefStdHashMap.CreateExplicitType(typedef);
         case "std::map":
             return DefStdMap.CreateExplicitType(typedef);
         case "std::multimap":
             return DefStdMultiMap.CreateExplicitType(typedef);
         case "std::pair":
             return DefStdPair.CreateExplicitType(typedef);
         default:
             throw new Exception("Unexpected");
     }
 }
 public static new DefTypeDef CreateExplicitType(DefTypeDef typedef)
 {
     if (typedef.IsSharedPtr)
         return DefSharedPtr.CreateExplicitType(typedef);
     else if (Producer.IsIteratorWrapper(typedef))
         return DefIterator.CreateExplicitType(typedef);
     else if (typedef.BaseTypeName.StartsWith("TRect"))
         return DefTRect.CreateExplicitType(typedef);
     else
         return DefStdList.CreateExplicitType(typedef);
 }