using System;
using System.Collections.Generic;
namespace Developpez.Dotnet.Collections
{
///
/// Fournit des méthodes d'extension pour travailler avec des et des
///
public static class CompareExtensions
{
///
/// Obtient un à partir de la comparaison spécifiée
///
/// Type des éléments à comparer
/// La comparaison à utiliser
/// Un qui utilise la comparaison spécifiée
public static IComparer ToComparer(this Comparison comparison)
{
comparison.CheckArgumentNull("comparison");
return new ComparisonComparer(comparison);
}
///
/// Obtient une à partir du spécifié
///
/// Type des éléments à comparer
/// Comparateur à utiliser
/// La comparaison équivalente au spécifié
public static Comparison ToComparison(this IComparer comparer)
{
comparer.CheckArgumentNull("comparer");
return comparer.Compare;
}
///
/// Inverse le spécifié
///
/// Le type des éléments à comparer
/// Le comparateur à inverser
/// Un comparateur avec une logique inversée
public static IComparer Reverse(this IComparer comparer)
{
comparer.CheckArgumentNull("comparer");
return new ReverseComparer(comparer);
}
///
/// Inverse la spécifiée
///
/// Le type des éléments à comparer
/// La comparaison à inverser
/// Une comparaison avec une logique inversée
public static Comparison Reverse(this Comparison comparison)
{
comparison.CheckArgumentNull("comparison");
return (x, y) => comparison(y, x);
}
///
/// Renvoie le maximum des deux arguments
///
/// Type des objets à comparer
/// Comparateur à utiliser
/// Premier objet à comparer
/// Second objet à comparer
/// x si x >= y selon le comparateur spécifié, sinon y
public static T Max(this IComparer comparer, T x, T y)
{
comparer.CheckArgumentNull("comparer");
if (comparer.Compare(x, y) >= 0)
return x;
return y;
}
///
/// Renvoie le minimum des deux arguments
///
/// Type des objets à comparer
/// Comparateur à utiliser
/// Premier objet à comparer
/// Second objet à comparer
/// x si x <= y selon le comparateur spécifié, sinon y
public static T Min(this IComparer comparer, T x, T y)
{
comparer.CheckArgumentNull("comparer");
if (comparer.Compare(x, y) <= 0)
return x;
return y;
}
}
}