mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-26 22:48:20 +01:00
Implement BuildSubProjection where N=3
This commit is contained in:
@@ -123,7 +123,6 @@ namespace Tgstation.Server.Host.Models
|
||||
notNullExpression1,
|
||||
subOutput1Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput1)));
|
||||
|
||||
var conditionalSubOutput2Expression = global::System.Linq.Expressions.Expression.Condition(
|
||||
notNullExpression2,
|
||||
subOutput2Expression,
|
||||
@@ -172,7 +171,54 @@ namespace Tgstation.Server.Host.Models
|
||||
where TTransformer2 : ITransformer<TSubInput2, TSubOutput2>, new()
|
||||
where TTransformer3 : ITransformer<TSubInput3, TSubOutput3>, new()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var subTransformer1 = new TTransformer1();
|
||||
var subTransformer2 = new TTransformer2();
|
||||
var subTransformer3 = new TTransformer3();
|
||||
|
||||
var primaryInput = global::System.Linq.Expressions.Expression.Parameter(typeof(TInput), "input");
|
||||
|
||||
var subInput1Expression = global::System.Linq.Expressions.Expression.Invoke(subInput1SelectionExpression, primaryInput);
|
||||
var subInput2Expression = global::System.Linq.Expressions.Expression.Invoke(subInput2SelectionExpression, primaryInput);
|
||||
var subInput3Expression = global::System.Linq.Expressions.Expression.Invoke(subInput3SelectionExpression, primaryInput);
|
||||
|
||||
var notNullExpression1 = global::System.Linq.Expressions.Expression.MakeBinary(
|
||||
ExpressionType.NotEqual,
|
||||
subInput1Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubInput1)));
|
||||
var notNullExpression2 = global::System.Linq.Expressions.Expression.MakeBinary(
|
||||
ExpressionType.NotEqual,
|
||||
subInput2Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubInput2)));
|
||||
var notNullExpression3 = global::System.Linq.Expressions.Expression.MakeBinary(
|
||||
ExpressionType.NotEqual,
|
||||
subInput3Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubInput3)));
|
||||
|
||||
var subOutput1Expression = global::System.Linq.Expressions.Expression.Invoke(subTransformer1.Expression, subInput1Expression);
|
||||
var subOutput2Expression = global::System.Linq.Expressions.Expression.Invoke(subTransformer2.Expression, subInput2Expression);
|
||||
var subOutput3Expression = global::System.Linq.Expressions.Expression.Invoke(subTransformer3.Expression, subInput3Expression);
|
||||
|
||||
var conditionalSubOutput1Expression = global::System.Linq.Expressions.Expression.Condition(
|
||||
notNullExpression1,
|
||||
subOutput1Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput1)));
|
||||
var conditionalSubOutput2Expression = global::System.Linq.Expressions.Expression.Condition(
|
||||
notNullExpression2,
|
||||
subOutput2Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput2)));
|
||||
var conditionalSubOutput3Expression = global::System.Linq.Expressions.Expression.Condition(
|
||||
notNullExpression3,
|
||||
subOutput3Expression,
|
||||
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput3)));
|
||||
|
||||
var outputExpression = global::System.Linq.Expressions.Expression.Invoke(
|
||||
transformerExpression,
|
||||
primaryInput,
|
||||
conditionalSubOutput1Expression,
|
||||
conditionalSubOutput2Expression,
|
||||
conditionalSubOutput3Expression);
|
||||
|
||||
return global::System.Linq.Expressions.Expression.Lambda<Func<TInput, TOutput>>(outputExpression, primaryInput);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user