<?php
namespace Moserware\Skills;

/// <summary>
/// Verifies argument contracts.
/// </summary>
/// <remarks>These are used until .NET 4.0 ships with Contracts. For more information,
/// see http://www.moserware.com/2008/01/borrowing-ideas-from-3-interesting.html</remarks>
class Guard
{
    public static function argumentNotNull($value, $parameterName)
    {
        if ($value == null)
        {
            throw new Exception($parameterName . " can not be null");
        }
    }

    public static function argumentIsValidIndex($index, $count, $parameterName)
    {
        if (($index < 0) || ($index >= $count))
        {
            throw new Exception($parameterName . " is an invalid index");
        }
    }

    public static function argumentInRangeInclusive($value, $min, $max, $parameterName)
    {
        if (($value < $min) || ($value > $max))
        {
            throw new Exception($parameterName . " is not in the valid range [" . $min . ", " . $max . "]");
        }
    }
}
?>