File: Contracts.cs
Web Access
Project: src\src\Microsoft.ML.DataView\Microsoft.ML.DataView.csproj (Microsoft.ML.DataView)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
// We want the conditional code in this file to always be available to
// client assemblies that might be DEBUG versions. That is, if someone uses
// the release build of this assembly to build a DEBUG version of their code,
// we want Contracts.Assert to be fully functional for that client.
 
using System;
using System.Diagnostics;
using System.Globalization;
 
namespace Microsoft.ML.Internal.DataView
{
    internal static class Contracts
    {
        private static string GetMsg(string msg, params object[] args)
        {
            try
            {
                msg = string.Format(CultureInfo.InvariantCulture, msg, args);
            }
            catch (FormatException ex)
            {
                Debug.Fail("Format string arg mismatch: " + ex.Message);
                throw;
            }
            return msg;
        }
 
        public static Exception Except(string msg)
            => new InvalidOperationException(msg);
 
        public static Exception ExceptParam(string paramName)
            => new ArgumentOutOfRangeException(paramName);
        public static Exception ExceptParam(string paramName, string msg)
            => new ArgumentOutOfRangeException(paramName, msg);
        public static Exception ExceptParam(string paramName, string msg, params object[] args)
            => new ArgumentOutOfRangeException(paramName, GetMsg(msg, args));
 
        public static Exception ExceptValue(string paramName)
            => new ArgumentNullException(paramName);
 
        public static void Check(bool f, string msg)
        {
            if (!f)
                throw Except(msg);
        }
 
        public static void CheckParam(bool f, string paramName)
        {
            if (!f)
                throw ExceptParam(paramName);
        }
        public static void CheckParam(bool f, string paramName, string msg)
        {
            if (!f)
                throw ExceptParam(paramName, msg);
        }
        public static void CheckParam(bool f, string paramName, string msg, params object[] args)
        {
            if (!f)
                throw ExceptParam(paramName, msg, args);
        }
 
        public static void CheckValue<T>(T val, string paramName) where T : class
        {
            if (object.ReferenceEquals(val, null))
                throw ExceptValue(paramName);
        }
    }
}