mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-10-05 05:11:51 +02:00
byuu says: Changelog: - int_t<bits> replaced with Integer<bits> - uint_t<bits> replaced with Natural<bits> - fixed "Synchronize Audio" menu option that broke recently - all of sfc/performance ported to "auto function() -> return;" syntax With this WIP, all of higan is finally ported over to the new function declaration syntax. Thank the gods. There's still going to be periodic disruption for diffs from porting over signed->int, unsigned->uint, and whatever we come up with for the new Natural<> and Integer<> classes. But the worst of it's behind us now.
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#ifndef EMULATOR_HPP
|
|
#define EMULATOR_HPP
|
|
|
|
#include <nall/nall.hpp>
|
|
#include <nall/dsp.hpp>
|
|
using namespace nall;
|
|
|
|
namespace Emulator {
|
|
static const string Name = "higan";
|
|
static const string Version = "095.10";
|
|
static const string Author = "byuu";
|
|
static const string License = "GPLv3";
|
|
static const string Website = "http://byuu.org/";
|
|
|
|
#if defined(PROFILE_ACCURACY)
|
|
static const string Profile = "Accuracy";
|
|
#elif defined(PROFILE_BALANCED)
|
|
static const string Profile = "Balanced";
|
|
#elif defined(PROFILE_PERFORMANCE)
|
|
static const string Profile = "Performance";
|
|
#endif
|
|
}
|
|
|
|
#include "interface.hpp"
|
|
|
|
//debugging function hook:
|
|
//no overhead (and no debugger invocation) if not compiled with -DDEBUGGER
|
|
//wraps testing of function to allow invocation without a defined callback
|
|
template<typename T> struct hook;
|
|
template<typename R, typename... P> struct hook<R (P...)> {
|
|
function<R (P...)> callback;
|
|
|
|
auto operator()(P... p) const -> R {
|
|
#if defined(DEBUGGER)
|
|
if(callback) return callback(forward<P>(p)...);
|
|
#endif
|
|
return R();
|
|
}
|
|
|
|
hook() {}
|
|
hook(const hook& hook) { callback = hook.callback; }
|
|
hook(void* function) { callback = function; }
|
|
hook(auto (*function)(P...) -> R) { callback = function; }
|
|
template<typename C> hook(auto (C::*function)(P...) -> R, C* object) { callback = {function, object}; }
|
|
template<typename C> hook(auto (C::*function)(P...) const -> R, C* object) { callback = {function, object}; }
|
|
template<typename L> hook(const L& function) { callback = function; }
|
|
|
|
auto operator=(const hook& source) -> hook& { callback = source.callback; return *this; }
|
|
};
|
|
|
|
#if defined(DEBUGGER)
|
|
#define privileged public
|
|
#else
|
|
#define privileged private
|
|
#endif
|
|
|
|
using varuint = varuint_t<uint>;
|
|
|
|
#endif
|