cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

blargg_source.h (3252B)


      1/* Included at the beginning of library source files, AFTER all other #include lines.
      2Sets up helpful macros and services used in my source code. Since this is only "active"
      3in my source code, I don't have to worry about polluting the global namespace with
      4unprefixed names. */
      5
      6// Gb_Snd_Emu 0.2.0
      7#ifndef BLARGG_SOURCE_H
      8#define BLARGG_SOURCE_H
      9
     10// The following four macros are for debugging only. Some or all might be defined
     11// to do nothing, depending on the circumstances. Described is what happens when
     12// a particular macro is defined to do something. When defined to do nothing, the
     13// macros do NOT evaluate their argument(s).
     14
     15// If expr is false, prints file and line number, then aborts program. Meant for
     16// checking internal state and consistency. A failed assertion indicates a bug
     17// in MY code.
     18//
     19// void assert( bool expr );
     20#include <assert.h>
     21
     22// If expr is false, prints file and line number, then aborts program. Meant for
     23// checking caller-supplied parameters and operations that are outside the control
     24// of the module. A failed requirement probably indicates a bug in YOUR code.
     25//
     26// void require( bool expr );
     27#undef  require
     28#define require( expr ) assert( expr )
     29
     30// Like printf() except output goes to debugging console/file.
     31//
     32// void dprintf( const char* format, ... );
     33static inline void blargg_dprintf_( const char*, ... ) { }
     34#undef  dprintf
     35#define dprintf (1) ? (void) 0 : blargg_dprintf_
     36
     37// If expr is false, prints file and line number to debug console/log, then
     38// continues execution normally. Meant for flagging potential problems or things
     39// that should be looked into, but that aren't serious problems.
     40//
     41// void check( bool expr );
     42#undef  check
     43#define check( expr ) ((void) 0)
     44
     45// If expr yields non-NULL error string, returns it from current function,
     46// otherwise continues normally.
     47#undef  RETURN_ERR
     48#define RETURN_ERR( expr ) do {                         \
     49		blargg_err_t blargg_return_err_ = (expr);               \
     50		if ( blargg_return_err_ ) return blargg_return_err_;    \
     51	} while ( 0 )
     52
     53// If ptr is NULL, returns "Out of memory" error string, otherwise continues normally.
     54#undef  CHECK_ALLOC
     55#define CHECK_ALLOC( ptr ) do { if ( (ptr) == 0 ) return "Out of memory"; } while ( 0 )
     56
     57// The usual min/max functions for built-in types.
     58//
     59// template<typename T> T min( T x, T y ) { return x < y ? x : y; }
     60// template<typename T> T max( T x, T y ) { return x > y ? x : y; }
     61#define BLARGG_DEF_MIN_MAX( type ) \
     62	static inline type blargg_min( type x, type y ) { if ( y < x ) x = y; return x; }\
     63	static inline type blargg_max( type x, type y ) { if ( x < y ) x = y; return x; }
     64
     65BLARGG_DEF_MIN_MAX( int )
     66BLARGG_DEF_MIN_MAX( unsigned )
     67BLARGG_DEF_MIN_MAX( long )
     68BLARGG_DEF_MIN_MAX( unsigned long )
     69BLARGG_DEF_MIN_MAX( float )
     70BLARGG_DEF_MIN_MAX( double )
     71
     72#undef  min
     73#define min blargg_min
     74
     75#undef  max
     76#define max blargg_max
     77
     78// typedef unsigned char byte;
     79typedef unsigned char blargg_byte;
     80#undef  byte
     81#define byte blargg_byte
     82
     83// deprecated
     84#define BLARGG_CHECK_ALLOC CHECK_ALLOC
     85#define BLARGG_RETURN_ERR RETURN_ERR
     86
     87// BLARGG_SOURCE_BEGIN: If defined, #included, allowing redefition of dprintf and check
     88#ifdef BLARGG_SOURCE_BEGIN
     89	#include BLARGG_SOURCE_BEGIN
     90#endif
     91
     92#endif