//**************************************************************************************************
//
// GENERAL CHECKING OPERATIONS:
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// RuntimeForStatic base library | C+- (SysRoutine) | Author: Sergei Y.Kitáev
#pragma once
#include "include_restrictions.h"
namespace RuntimeForStatic {

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//
// "$ArgChecking" STATIC CLASS:
//
//==================================================================================================
class $ArgChecking
{
$STATIC_CLASS( $ArgChecking )
public:
   static int VerifyNotZero( $CI_REF, PCWSTR argumentVarName, int value );
   static unsigned int VerifyNotZero( $CI_REF, PCWSTR argumentVarName, unsigned int value );
   static DWORD VerifyNotZero( $CI_REF, PCWSTR argumentVarName, DWORD value );
   static SIZE_T VerifyNotZero_Size( $CI_REF, PCWSTR argumentVarName, SIZE_T value );
   static int VerifyNotNegative( $CI_REF, PCWSTR argumentVarName, int value );
   static int VerifyPositive( $CI_REF, PCWSTR argumentVarName, int value );

   static $PCVoid VerifyPointer( $CI_REF, PCWSTR argumentVarName, $PCVoid pointer );

   static HANDLE VerifyHandle( $CI_REF, PCWSTR argumentVarName, HANDLE handle );
   static HANDLE VerifyHandle( $CI_REF, PCWSTR argumentVarName, HANDLE handle,
                                        BOOL isOfInvalidHandleValueCategory );

   static void VerifyDisposable( $CI_REF, PCWSTR argumentVarName, const $Disposable& disposable );
}; // $ArgChecking
//==================================================================================================

} // RuntimeForStatic
