www.pudn.com > Nestopia137src.zip > NstApiConfig.hpp


//////////////////////////////////////////////////////////////////////////////////////// 
// 
// Nestopia - NES/Famicom emulator written in C++ 
// 
// Copyright (C) 2003-2007 Martin Freij 
// 
// This file is part of Nestopia. 
// 
// Nestopia is free software; you can redistribute it and/or modify 
// it under the terms of the GNU General Public License as published by 
// the Free Software Foundation; either version 2 of the License, or 
// (at your option) any later version. 
// 
// Nestopia is distributed in the hope that it will be useful, 
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
// GNU General Public License for more details. 
// 
// You should have received a copy of the GNU General Public License 
// along with Nestopia; if not, write to the Free Software 
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
// 
//////////////////////////////////////////////////////////////////////////////////////// 
 
#ifndef NST_BASE_H 
#error Do not include NstApConfig.hpp directly! 
#endif 
 
//////////////////////////////////////////////////////////////////////////////////////// 
// 
// Important: For non-debug builds, the C/C++ standard NDEBUG macro must be defined 
//            somewhere (optionally here) for the emulation core to see. Otherwise, 
//            run-time checks will be performed by the emulator which degrades 
//            performance. 
// 
//////////////////////////////////////////////////////////////////////////////////////// 
 
//////////////////////////////////////////////////////////////////////////////////////// 
// 
// Compiler Configuration: 
// ----------------------- 
// 
// NST_PRAGMA_ONCE           - Define if #pragma once is supported. Auto-defined if 
//                             compiler is MCW or MSVC. 
// 
// NST_U64             - For native 64bit (or greater) integer support. May not 
//                             be needed if compiler is BC, GCC, ICC, MSVC or supports 
//                             the C99 long long integer type. 
// 
//                             Example: #define NST_U64 unsigned long long 
// 
//                             If no suitable type is available, a default class based 
//                             implementation will be used which may generate slower code. 
// 
// NST_CALL       - Compiler/platform specific calling convention for non-member 
//                             functions. Placed between return type and function name, e.g 
//                             void NST_CALL DoSomething(). 
// 
//                             Example usage on a Win32 platform: #define NST_CALL __fastcall 
// 
// NST_CALLBACK   - Same as above but for user-callback functions only. If 
//                             defined, you're responsible for decorating your own 
//                             callback functions with it. 
// 
// NST_LINEBREAK     - Character sequence for line breaks. Default is "\n", or "\r\n" 
//                             if target platform is Win32. 
// 
//                             Example usage in Nestopia: 
// 
//                              Print( "Hey!" NST_LINE_BREAK "get off my lawn!" NST_LINE_BREAK ); 
// 
// NST_NO_INLINE  - To prevent automatic inline expansion of certain functions 
//                             that won't benefit from it. Auto-defined if compiler is 
//                             GCC, ICC or MSVC. 
// 
// NST_RESTRICT   - C99 restrict qualifier support. Used on pointer types to 
//                             inform the compiler that they're are not aliased which may 
//                             enable it to generate faster code. Auto-defined if compiler 
//                             is GCC, ICC or MSVC. 
// 
// NST_ASSUME(x) y(x)        - Optimization hint for the compiler. Informs that the condition 
//                             will always evaluate to true. Should not be used if the condition 
//                             checking imposes a performance penalty as it's not intended for 
//                             debugging use. Auto-defined if compiler is MSVC. 
// 
//                             Example usage in Nestopia: 
// 
//                             #ifdef NDEBUG 
//                              NST_ASSUME( miss_july == hot ); 
//                             #else 
//                              assert( miss_july == hot ); 
//                             #endif 
// 
// NST_FASTDELEGATE          - Define this if your compiler can handle casts between member 
//                             function pointers of different types and calls through them. 
// 
//                             If the size required to store a non-virtual member function 
//                             pointer is deemed too large, as in 
// 
//                             sizeof( void (Class::*)() ) > sizeof( void (*)() ) 
// 
//                             this option is not worth using and Nestopia will force a 
//                             compile time error. Auto-defined if compiler is MSVC. 
// 
// NST_TAILCALL_OPTIMIZE     - Define this if your compiler can do tail-call optimizations, 
//                             i.e it will convert a CALL+RET into a JMP. Compiling with 
//                             this macro defined could result in a huge performance boost. 
//                             However, if the compiler does *not* perform this optimization 
//                             it could cause the opposite, possibly leading to a stack 
//                             overflow crash. 
//                             Auto-defined if compiler is MSVC. Although GCC is generally 
//                             known to have this optimization feature, it's not auto-defined 
//                             for safety reasons as not all brands of GCC may do it. This 
//                             macro has no effect on debug builds (NDEBUG not defined). 
// 
// Abbrevations: 
// 
// BC - Borland C++ 
// GCC - GNU Compiler Collection 
// ICC - Intel C/C++ Compiler 
// MCW - Metrowerks CodeWarrior 
// MSVC - Microsoft Visual C++ 
// 
//////////////////////////////////////////////////////////////////////////////////////// 
 
//////////////////////////////////////////////////////////////////////////////////////// 
// 
// Define to disable a particular feature. 
// 
// NST_NO_ZLIB    - ZLib compression library. Not recommended to disable 
//                  unless it's unavailable on the target platform. The core 
//                  uses it internally for save states and the rewinder 
//                  feature. Although they'll still work without them, memory 
//                  footprint will increase drastically. 
// 
// NST_NO_SCALEX  - Scale2x and Scale3x video filters 
// 
// NST_NO_HQ2X    - hq2x and hq3x video filters 
// 
////////////////////////////////////////////////////////////////////////////////////////