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", ""); }
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", ""); }
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",""); }
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(); }