|
|
@ -374,27 +374,17 @@ namespace CppSharp.Types.Std |
|
|
|
{ |
|
|
|
{ |
|
|
|
var type = Type.Desugar(resolveTemplateSubstitution: false); |
|
|
|
var type = Type.Desugar(resolveTemplateSubstitution: false); |
|
|
|
ClassTemplateSpecialization basicString = GetBasicString(type); |
|
|
|
ClassTemplateSpecialization basicString = GetBasicString(type); |
|
|
|
var c_str = basicString.Methods.First(m => m.OriginalName == "c_str"); |
|
|
|
var data = basicString.Methods.First(m => m.OriginalName == "data"); |
|
|
|
var typePrinter = new CSharpTypePrinter(ctx.Context); |
|
|
|
var typePrinter = new CSharpTypePrinter(ctx.Context); |
|
|
|
string qualifiedBasicString = GetQualifiedBasicString(basicString); |
|
|
|
string qualifiedBasicString = GetQualifiedBasicString(basicString); |
|
|
|
string varBasicString = $"__basicStringRet{ctx.ParameterIndex}"; |
|
|
|
string varBasicString = $"__basicStringRet{ctx.ParameterIndex}"; |
|
|
|
|
|
|
|
bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField; |
|
|
|
ctx.Before.WriteLine($@"var {varBasicString} = {
|
|
|
|
ctx.Before.WriteLine($@"var {varBasicString} = {
|
|
|
|
basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({ |
|
|
|
basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({ |
|
|
|
ctx.ReturnVarName});");
|
|
|
|
(usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{ |
|
|
|
if (type.IsAddress()) |
|
|
|
ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});");
|
|
|
|
{ |
|
|
|
ctx.Return.Write($@"{qualifiedBasicString}Extensions.{data.Name}({
|
|
|
|
ctx.Return.Write($@"{qualifiedBasicString}Extensions.{c_str.Name}({
|
|
|
|
varBasicString})");
|
|
|
|
varBasicString})");
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string varString = $"__stringRet{ctx.ParameterIndex}"; |
|
|
|
|
|
|
|
ctx.Before.WriteLine($@"var {varString} = {
|
|
|
|
|
|
|
|
qualifiedBasicString}Extensions.{c_str.Name}({varBasicString});");
|
|
|
|
|
|
|
|
ctx.Before.WriteLine($@"{varBasicString}.Dispose({
|
|
|
|
|
|
|
|
(ctx.MarshalKind == MarshalKind.NativeField ? "false" : string.Empty)});");
|
|
|
|
|
|
|
|
ctx.Return.Write(varString); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString) |
|
|
|
private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString) |
|
|
|