#@ template language="C#" debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Linq.Expressions" #>
<#
var binaryOperators = new[]
{
new
{
Type = ExpressionType.Add,
DocSummary = "Calcule la somme de deux valeurs",
DocReturn = "La somme des deux valeurs"
},
new
{
Type = ExpressionType.Subtract,
DocSummary = "Calcule la différence de deux valeurs",
DocReturn = "La différence entre les deux valeurs"
},
new
{
Type = ExpressionType.Multiply,
DocSummary = "Calcule le produit de deux valeurs",
DocReturn = "Le produit des deux valeurs"
},
new
{
Type = ExpressionType.Divide,
DocSummary = "Calcule le quotient de deux valeurs",
DocReturn = "Le quotient des deux valeurs"
},
new
{
Type = ExpressionType.Modulo,
DocSummary = "Calcule le reste de la division entre deux valeurs",
DocReturn = "Le reste de la division de x par y"
}
};
#>
using System;
using System.Linq.Expressions;
namespace Developpez.Dotnet
{
///
/// Fournit des opérateurs arithmétiques génériques.
///
public static partial class GenericOperators
{
<# foreach(var op in binaryOperators) { #>
///
/// <#= op.DocSummary #>
///
/// Premier opérande
/// Premier opérande
/// <#= op.DocReturn #>
public static T <#= op.Type #>(T x, T y)
{
return OperatorCache.<#= op.Type #>Operator(x, y);
}
<# } #>
private static class OperatorCache
{
<# foreach(var op in binaryOperators) { #>
public static readonly Func <#= op.Type #>Operator = MakeBinaryOperator(ExpressionType.<#= op.Type #>);
<# } #>
}
}
}