Exemple #1
0
        public string CreateIncludeCodeForOverridable(DefClass type)
        {
            UsedTypes.Clear();

            PreClassProducers.Clear();
            PostClassProducers.Clear();

            IndentStringBuilder sbTypes = new IndentStringBuilder();

            new IncSubclassingClassProducer(this, type, sbTypes, null).Add();
            if (type.HasAttribute<InterfacesForOverridableAttribute>())
            {
                List<DefClass[]> interfaces = type.GetAttribute<InterfacesForOverridableAttribute>().Interfaces;
                foreach (DefClass[] ifaces in interfaces)
                {
                    new IncSubclassingClassProducer(this, type, sbTypes, ifaces).Add();
                }
            }

            foreach (ClassProducer producer in PostClassProducers)
            {
                if (!(producer is NativeProtectedTypesProxy)
                    && !(producer is NativeProtectedStaticsProxy))
                    producer.Add();
            }

            foreach (ClassProducer producer in PreClassProducers)
            {
                if (!(producer is NativeProtectedTypesProxy)
                    && !(producer is NativeProtectedStaticsProxy))
                    producer.AddFirst();
            }

            IndentStringBuilder sb = new IndentStringBuilder();
            sb.AppendLine("#pragma once\n");

            sb.AppendFormat("namespace {0}\n{{\n", ManagedNamespace);

            sb.IncreaseIndent();
            sb.AppendLine(sbTypes.ToString());
            sb.DecreaseIndent();

            sb.AppendLine("}");

            return sb.ToString().Replace("\r", "");
        }
Exemple #2
0
        public string CreateCppCodeForIncludeFile(string include, out bool hasContent)
        {
            UsedTypes.Clear();

            PreClassProducers.Clear();
            PostClassProducers.Clear();

            IndentStringBuilder contentsb = new IndentStringBuilder();
            foreach (DefType t in IncludeFiles[include])
            {
                CppAddType(t, contentsb);
            }

            foreach (ClassProducer producer in PostClassProducers)
            {
                producer.Add();
            }

            foreach (ClassProducer producer in PreClassProducers)
            {
                producer.AddFirst();
            }

            IndentStringBuilder sb = new IndentStringBuilder();
            hasContent = false;

            CppAddIncludeFiles(include, UsedTypes, sb);

            sb.AppendFormat("namespace {0}\n{{\n", ManagedNamespace);

            sb.IncreaseIndent();

            string txt = contentsb.ToString();
            if (txt != "")
            {
                hasContent = true;
                sb.AppendLine(txt);
            }

            sb.DecreaseIndent();

            sb.AppendLine("}");

            return sb.ToString().Replace("\r", "");
        }
Exemple #3
0
        public string CreateIncludeCodeForIncludeFile(string include)
        {
            UsedTypes.Clear();

            PreClassProducers.Clear();
            PostClassProducers.Clear();

            IndentStringBuilder sbTypes = new IndentStringBuilder();
            foreach (DefType t in IncludeFiles[include])
            {
                IncAddType(t, sbTypes);
            }

            foreach (ClassProducer producer in PostClassProducers)
            {
                producer.Add();
            }

            foreach (ClassProducer producer in PreClassProducers)
            {
                producer.AddFirst();
            }

            IndentStringBuilder sb = new IndentStringBuilder();
            sb.AppendLine("#pragma once\n");

            IncAddIncludeFiles(include, UsedTypes, sb);

            sb.AppendFormat("namespace {0}\n{{\n", ManagedNamespace);

            sb.IncreaseIndent();
            sb.AppendLine(sbTypes.ToString());
            sb.DecreaseIndent();

            sb.AppendLine("}");

            return sb.ToString().Replace("\r","");
        }
Exemple #4
0
        private void IncAddIncludeFiles(string include, List<DefType> usedTypes, IndentStringBuilder sb)
        {
            sb.AppendFormat("#include \"{0}\"\n", include);
            List<string> added = new List<string>();

            foreach (DefType type in usedTypes)
            {
                if (String.IsNullOrEmpty(type.IncludeFile) || type.IncludeFile == include)
                    continue;

                if (added.Contains(type.IncludeFile))
                    continue;

                sb.AppendLine("#include \"" + GetManagedIncludeFileName(type.IncludeFile) + "\"");
                added.Add(type.IncludeFile);
            }

            sb.AppendLine();
        }