Prepare for zero-copy sending

This commit is contained in:
2025-08-16 19:51:35 +03:00
parent 46d741a287
commit dfad8b9141
10 changed files with 76 additions and 26 deletions
+1
View File
@@ -23,6 +23,7 @@ namespace mROA.Codegen
ReturnType = typeof(<!L returnType>),
ParameterTypes = new Type[] { <!L parametersType> },
SuitableType = typeof(<!L suitableType>),
RequireCancellation = <!L cancellation>,
Invoking = (i, parameters, special, post) => <!L funcInvoking>,
}<!T>
<!T syncInvoker>
@@ -9,6 +9,7 @@ namespace mROA.Codegen.Templates
private const string ParametersTypeTag = "parametersType";
private const string SuitableTypeTag = "suitableType";
private const string FuncInvokingTag = "funcInvoking";
private const string CancellationTag = "cancellation";
private const string IsTrustedTag = "isTrusted";
public InvokerTemplate(TemplateDocument template) : base(template) { }
@@ -42,5 +43,10 @@ namespace mROA.Codegen.Templates
{
Define(IsTrustedTag, value);
}
public void DefineCancellation(string value)
{
Define(CancellationTag, value);
}
}
}
+5
View File
@@ -316,11 +316,14 @@ namespace mROA.Codegen
var parametersInsertList = new List<string>();
var useCancellationToken = false;
foreach (var parameter in method.Parameters)
switch (parameter.Type.Name)
{
case "CancellationToken":
parametersInsertList.Add("(CancellationToken)special[1]");
useCancellationToken = true;
break;
case "RequestContext":
parametersInsertList.Add("(RequestContext)special[0]");
@@ -359,6 +362,7 @@ namespace mROA.Codegen
invokerTemplate.DefineSuitableType(baseInterface.ToUnityString());
invokerTemplate.DefineFuncInvoking(funcInvoking);
invokerTemplate.DefineIsTrusted((!isUntrusted).ToString().ToLower());
invokerTemplate.DefineCancellation(useCancellationToken.ToString().ToLower());
backend = invokerTemplate.Compile();
}
else
@@ -370,6 +374,7 @@ namespace mROA.Codegen
invokerTemplate.DefineSuitableType(baseInterface.ToUnityString());
invokerTemplate.DefineFuncInvoking(funcInvoking);
invokerTemplate.DefineIsTrusted((!isUntrusted).ToString().ToLower());
backend = invokerTemplate.Compile();
}