
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_Platform_Assert.h
// Author : Andy Tate
// Date   : 20-Jun-2005
//
// Copyright (C) 2005 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif   // ifdef ASURA_USE_PRAGMA_ONCE

#ifndef __ASURA_PLATFORM_ASSERT_H__
#define __ASURA_PLATFORM_ASSERT_H__

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Forward class declarations...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Macro definitions...
////////////////////////////////////////////////////////////////////////////////

#if defined(ASURA_ASSERT)
	#ifdef __SNC__
		#define ASURA_PLATFORM_DEBUGBREAK() __builtin_snpause()
	#else
		#define ASURA_PLATFORM_DEBUGBREAK() asm("tw 31,1,1")
	#endif

	// Internal functions
	const char* Asura_Platform_Assert_GetLogFileName();
#else
	#define ASURA_PLATFORM_DEBUGBREAK()
#endif	//defined(ASURA_ASSERT)

// KJFL - 22 March 2006 - Static, i.e. compile-time, assertions
// For documentation see http://asurawiki.rebellion.co.uk/twiki/bin/viewauth/Programming/AsuraStaticAssert

#define ASURA_STATIC_ASSERT_COMBINE_LITERALS( a, b ) a ## b
#define ASURA_STATIC_ASSERT_MAKE_UNIQUE_NAME( a ) ASURA_STATIC_ASSERT_COMBINE_LITERALS( ASURA_STATIC_ASSERT_FAILED_AT_LINE_, a )

template<bool b> struct ASURA_STATIC_ASSERTION_FAILURE;
template<> struct ASURA_STATIC_ASSERTION_FAILURE<false> { enum { VALUE = -1 }; };
template<> struct ASURA_STATIC_ASSERTION_FAILURE<true> { enum { VALUE = 1 }; };

#define ASURA_STATIC_ASSERT( bCondition ) \
	typedef char ASURA_STATIC_ASSERT_MAKE_UNIQUE_NAME(__LINE__) [ ASURA_STATIC_ASSERTION_FAILURE<((bCondition) != 0)>::VALUE ] 

#endif   // ifndef __ASURA_PLATFORM_ASSERT_H__


/// End of file. ///
