/* Pcsx2 - Pc Ps2 Emulator * Copyright (C) 2002-2009 Pcsx2 Team * * This program 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. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #pragma once ////////////////////////////////////////////////////////////////////////////////////////// // DeclareNoncopyableObject // This macro provides an easy and clean method for ensuring objects are not copyable. // Simply add the macro to the head or tail of your class declaration, and attempts to // copy the class will give you a moderately obtuse compiler error that will have you // scratching your head for 20 mintes. // // (... but that's probably better than having a weird invalid object copy having you // scratch your head for a day). // // Programmer's notes: // * We intentionally do NOT provide implementations for these methods, which should // never be referenced anyway. // * I've opted for macro form over multi-inherited class form (Boost style), because // the errors generated by the macro are considerably less voodoo. The Boost-style // The macro reports the exact class that causes the copy failure, while Boost's class // approach just reports an error in whatever "NoncopyableObject" is inherited. // // * This macro is the same as wxWidgets' DECLARE_NO_COPY_CLASS macro. This one is free // of wx dependencies though, and has a nicer typeset. :) // #ifndef DeclareNoncopyableObject # define DeclareNoncopyableObject(classname) \ private: \ explicit classname(const classname&); \ classname& operator=(const classname&); #endif ////////////////////////////////////////////////////////////////////////////////////////// // __BaseSealed // Base class used to implement type-safe sealed classes. // This class should never be used directly. Use the Sealed macro instead, which ensures // all sealed classes derive from a unique BaseSealed (preventing them from accidentally // circumventing sealing by inheriting from multiple sealed classes. // template < int T > class __BaseSealed { protected: __BaseSealed() { } }; // Use this macro/class as a base to seal a class from being derived from. // This macro works by providing a unique base class with a protected constructor // for every class that derives from it. #define Sealed private virtual __BaseSealed<__COUNTER__> ////////////////////////////////////////////////////////////////////////////////////////// // macro provided for tagging translation strings, without actually running them through the // translator (which the _() does automatically, and sometimes we don't want that). This is // a shorthand replacement for wxTRANSLATE. // #define wxLt(a) (a) #ifndef wxASSERT_MSG_A # define wxASSERT_MSG_A( cond, msg ) wxASSERT_MSG( cond, wxString::FromAscii( msg ).c_str() ) #endif // must include wx/setup.h first, otherwise we get warnings/errors regarding __LINUX__ #include #include "Pcsx2Defs.h" #include #include #include // for wxPoint/wxRect stuff #include #include #include #include #include #include // string.h under c++ #include // stdio.h under c++ #include