Browse Source

Removed the internals of partial template specialisations - not supported yet.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/658/head
Dimitar Dobrev 10 years ago
parent
commit
3718d36854
  1. 20
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  2. 4
      src/Generator/Passes/TrimSpecializationsPass.cs
  3. 15
      tests/CSharp/CSharpTemplates.h

20
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -310,27 +310,31 @@ namespace CppSharp.Generators.CSharp
private void GenerateClassTemplateSpecializationInternal(ClassTemplate classTemplate) private void GenerateClassTemplateSpecializationInternal(ClassTemplate classTemplate)
{ {
PushBlock(CSharpBlockKind.Namespace);
WriteLine("namespace {0}", classTemplate.Name);
WriteStartBraceIndent();
IList<ClassTemplateSpecialization> specializations; IList<ClassTemplateSpecialization> specializations;
if (classTemplate.TemplatedClass.Fields.Any(f => f.IsDependent && !f.Type.IsAddress())) if (classTemplate.TemplatedClass.Fields.Any(f => f.IsDependent && !f.Type.IsAddress()))
specializations = classTemplate.Specializations; specializations = classTemplate.Specializations;
else else
specializations = new[] { classTemplate.Specializations[0] }; specializations = new[] { classTemplate.Specializations[0] };
foreach (var nestedClass in specializations[0].Classes.Where(c => !c.IsDependent)) if (classTemplate.TemplatedClass.Classes.Count == 0 && specializations.Count == 0)
return;
PushBlock(CSharpBlockKind.Namespace);
WriteLine("namespace {0}", classTemplate.Name);
WriteStartBraceIndent();
foreach (var specialization in specializations)
GenerateClassInternals(specialization);
foreach (var nestedClass in classTemplate.TemplatedClass.Classes)
{ {
NewLine();
GenerateClassProlog(nestedClass); GenerateClassProlog(nestedClass);
NewLine(); NewLine();
WriteStartBraceIndent(); WriteStartBraceIndent();
GenerateClassInternals(nestedClass); GenerateClassInternals(nestedClass);
WriteCloseBraceIndent(); WriteCloseBraceIndent();
} }
NewLine();
foreach (var specialization in specializations)
GenerateClassInternals(specialization);
WriteCloseBraceIndent(); WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);

4
src/Generator/Passes/TrimSpecializationsPass.cs

@ -29,6 +29,10 @@ namespace CppSharp.Passes
template.Specializations.Remove(specialization); template.Specializations.Remove(specialization);
} }
for (int i = template.Specializations.Count - 1; i >= 0; i--)
if (template.Specializations[i] is ClassTemplatePartialSpecialization)
template.Specializations.RemoveAt(i);
return true; return true;
} }
} }

15
tests/CSharp/CSharpTemplates.h

@ -64,3 +64,18 @@ private:
TwoTemplateArgs<int*, int> p2, TwoTemplateArgs<int*, int> p2,
TwoTemplateArgs<int*, float> p3); TwoTemplateArgs<int*, float> p3);
}; };
template <typename Key, typename T>
class PartiallySpecialized
{
};
template <typename Key>
class PartiallySpecialized<Key, int>
{
union
{
int i;
float f;
};
};

Loading…
Cancel
Save