mirror of https://github.com/PCSX2/pcsx2.git
100 lines
3.8 KiB
C++
100 lines
3.8 KiB
C++
/* 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 <wx/setup.h>
|
|
|
|
#include "Pcsx2Defs.h"
|
|
|
|
#include <wx/string.h>
|
|
#include <wx/tokenzr.h>
|
|
#include <wx/gdicmn.h> // for wxPoint/wxRect stuff
|
|
#include <wx/intl.h>
|
|
#include <wx/log.h>
|
|
|
|
#include <stdexcept>
|
|
#include <algorithm>
|
|
#include <string>
|
|
#include <cstring> // string.h under c++
|
|
#include <cstdio> // stdio.h under c++
|
|
#include <cstdlib>
|