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

$Completer::$Completer($A, const $SuccessFunc& function )
{
   if ( !function )
      $FatalError::RaiseNullTargetOfArgument($$CI, $NAME_OF( function ) );
   _FunctionPtr_ = &function;
   ValidateDisposable($$);
}

//==================================================================================================

void $Completer::DoDispose($CI_REF)
{
   Complete();
}

void $Completer::ResetSuperstructure()
{
   _FunctionPtr_ = nullptr;
}

//==================================================================================================

bool $Completer::Complete()
{
   if ( !IsValidDisposable )
      return true;
   auto functionPtr = *_FunctionPtr_;
   ResetSuperstructure();
   InvalidateDisposable();
   return $BOOL( functionPtr() );
}

void $Completer::Neutralize()
{
   InvalidateDisposable();
}

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