public static bool TryDecrementClampLower <T>(this IAtomicValue <T> variable, T minimumValue)
        where T : IComparable <T>
    {
        Contracts.Requires.That(variable != null);

        T unused;

        return(variable.TryDecrementClampLower(minimumValue, out unused));
    }
    public static bool TryIncrementClampUpper <T>(this IAtomicValue <T> variable, T maximumValue, out T result)
        where T : IComparable <T>
    {
        Contracts.Requires.That(variable != null);

        result = variable.Increment();
        if (result.IsLessThanOrEqual(maximumValue))
        {
            return(true);
        }
        else
        {
            result = variable.Decrement();
            return(false);
        }
    }