// RuntimeForStatic base library | C+- (SysRoutine) | Author: Sergei Y.Kitáev
#include "Precompiled.h"
#include "SharedIncludes.h"
namespace RuntimeForStatic {
//==================================================================================================

void $FatalError::RaiseIncorrectArguments($CI_REF) $not_returns
{
   Raise($$CI, $TEXT(
      L"Incorrect arguments.",
      L"Некорректные аргументы." ));
}
void $FatalError::RaiseIncorrectArgumentsWithMessage($CI_REF,PCWSTR message) $not_returns
{
   if ( !message )
      Raise($$CI, message );
   RaiseFmt($$CI, $TEXT(
      L"Incorrect arguments.\r\n%s",
      L"Некорректные аргументы.\r\n%s" ),
      message );
}
void $FatalError::RaiseIncorrectArgumentsWithMessageFmt( $CI_REF, PCWSTR messageFmt, ... )
                                                                  $not_returns
{
   $$VERIFY_POINTER_ARG( messageFmt );
   va_list argList;
   RaiseIncorrectArgumentsWithMessageVA($$CI, $VA_COMPLEMENT( messageFmt, argList ) );
   $DEAD_CODE_BRANCH();
}
void $FatalError::RaiseIncorrectArgumentsWithMessageVA( $CI_REF,
                                                        PCWSTR messageFmt, va_list argList )
                                                        $not_returns
{
   $$VERIFY_POINTER_ARG( messageFmt );
   $$VERIFY_POINTER_ARG( argList );
   PWSTR pMessage = HelpersRT::FormatAllocVA($ci,$, messageFmt, argList );
   if ( !pMessage )
      RaiseIncorrectArguments($$CI);
   RaiseIncorrectArgumentsWithMessage($$CI, pMessage );
   $DEAD_CODE_BRANCH();
}

//--------------------------------------------------------------------------------------------------

void $FatalError::RaiseIncorrectArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseFmt($ci, $TEXT(
      L"Incorrect argument: “%s”.",
      L"Некорректный аргумент: “%s”." ),
      $_(argumentVarName,L"???") );
}
void $FatalError::RaiseIncorrectArgumentWithMessage( $CI_REF,
                                                     PCWSTR argumentVarName, PCWSTR message )
                                                     $not_returns
{
   if ( !message )
      RaiseIncorrectArgument($ci, argumentVarName );
   RaiseFmt($$CI, $TEXT(
      L"Incorrect argument: “%s”.\r\n%s",
      L"Некорректный аргумент: “%s”.\r\n%s" ),
      $_(argumentVarName,L"???"), message );
}
void $FatalError::RaiseIncorrectArgumentWithMessageFmt( $CI_REF,
                                                        PCWSTR argumentVarName,
                                                        PCWSTR messageFmt, ... ) $not_returns
{
   $$VERIFY_POINTER_ARG( messageFmt );
   va_list argList;
   RaiseIncorrectArgumentWithMessageVA($$CI, argumentVarName,
                                             $VA_COMPLEMENT( messageFmt, argList ) );
   $DEAD_CODE_BRANCH();
}
void $FatalError::RaiseIncorrectArgumentWithMessageVA( $CI_REF, PCWSTR argumentVarName,
                                                                PCWSTR messageFmt,
                                                                va_list argList ) $not_returns
{
   $$VERIFY_POINTER_ARG( messageFmt );
   $$VERIFY_POINTER_ARG( argList );
   PWSTR pMessage = HelpersRT::FormatAllocVA($ci,$, messageFmt, argList );
   if ( !pMessage )
      RaiseIncorrectArgument($$CI, argumentVarName );
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, pMessage );
   $DEAD_CODE_BRANCH();
}

//--------------------------------------------------------------------------------------------------

void $FatalError::RaiseZeroValueArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Zero value is inadmissible.",
      L"Нулевое значение недопустимо." ));
}
void $FatalError::RaiseNegativeValueArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Negative value is inadmissible.",
      L"Отрицательное значение недопустимо." ));
}
void $FatalError::RaiseNotPozitiveValueArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Only positive value is admissible (>0).",
      L"Допустимо лишь положительное значение (>0)." ));
}

//--------------------------------------------------------------------------------------------------

void $FatalError::RaiseNullPointerArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Pointer value must not be null.",
      L"Значение указателя не должно быть нул-ом." ));
}
void $FatalError::RaiseNullTargetOfArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Target value must not be null.",
      L"Значение цели не должно быть нул-ом." ));
}
void $FatalError::RaiseNullHandleArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Handle value must not be null.",
      L"Значение дескриптора не должен быть нул-ом." ));
}

//--------------------------------------------------------------------------------------------------

void $FatalError::RaiseInvalidHandleValueArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessageFmt($$CI, argumentVarName, $TEXT(
      L"Handle value must not be invalid.\r\n%s",
      L"Значение дескриптора не должен быть недействительным.\r\n%s" ),
      L"( INVALID_HANDLE_VALUE = (HANDLE)-1 )" );
}

void $FatalError::RaiseInvalidDisposableArgument($CI_REF,PCWSTR argumentVarName) $not_returns
{
   RaiseIncorrectArgumentWithMessage($$CI, argumentVarName, $TEXT(
      L"Invalid state of disposable object ($Disposable class).",
      L"Недействительное состояние объёкта диспозиции ($Disposable class)." ));
}

//==================================================================================================
} // RuntimeForStatic
