129 lines
3.0 KiB
C++
129 lines
3.0 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __PLATFORM__
|
|
#define __PLATFORM__
|
|
|
|
|
|
#include "memory/nauto_ptr.h"
|
|
#include "memory/singleton.h"
|
|
#include "filesystem/filesystem.h"
|
|
#include "input/input_system.h"
|
|
#include "async/job.h"
|
|
#include "signal/signal.h"
|
|
#include "licensing/licensing.h"
|
|
#include "analytics/analytics.h"
|
|
#include "billing/billing.h"
|
|
#include "time/ntime.h"
|
|
|
|
|
|
namespace GS {
|
|
struct ISharedLib;
|
|
|
|
/*!
|
|
@short Platform interface.
|
|
@author Emmanuel Julien (ejulien@owloh.com)
|
|
*/
|
|
class Platform : public Singleton <Platform>
|
|
{
|
|
bool initialized;
|
|
|
|
public:
|
|
|
|
/// Initialize platform.
|
|
virtual void Initialize();
|
|
|
|
AutoPtr <ASync::JobManager> job_manager;
|
|
AutoPtr <IO::Filesystem> io;
|
|
AutoPtr <IBilling> billing;
|
|
AutoPtr <IAnalytics> analytics;
|
|
AutoPtr <ILicensing> licensing;
|
|
AutoPtr <Input::System> input_system;
|
|
|
|
// Platform signals.
|
|
struct Signals
|
|
{
|
|
Signal <void> renderer_output_closed;
|
|
};
|
|
|
|
Signals signal;
|
|
|
|
/// Return the platform name.
|
|
virtual String GetName() const = 0;
|
|
/// Return the device name the platform is running on.
|
|
virtual String GetDeviceName() const = 0;
|
|
|
|
/// Get the platform locale as an ISO3166 code.
|
|
virtual String GetLocale() = 0;
|
|
|
|
/// Return the number of logical thread available.
|
|
virtual int GetSystemThreadCount() { return 1; }
|
|
/// Return the number of physical processor core available.
|
|
virtual int GetSystemCoreCount() { return 1; }
|
|
|
|
/// Open a given URL using the platform integrated browser.
|
|
virtual bool OpenURL(const char *) { return false; }
|
|
/// Open the application page.
|
|
virtual bool OpenAppPage() { return false; }
|
|
|
|
/// Send to background.
|
|
virtual bool SendToBackground(bool kill = false) { return false; }
|
|
|
|
/// Return the current user directory.
|
|
virtual bool GetUserDir(String &, const char *user = 0) { return false; }
|
|
|
|
/// Output a program trace to the platform log.
|
|
virtual void Trace(const char *trace, const char *source, int line);
|
|
|
|
/*!
|
|
@name Application
|
|
@{
|
|
*/
|
|
static String app_dir;
|
|
|
|
virtual String GetAppPluginPath(const char *) const;
|
|
/// @}
|
|
|
|
/*!
|
|
@name Timer subsystem.
|
|
@{
|
|
*/
|
|
/// Get the platform clock.
|
|
virtual Time GetTime() = 0;
|
|
|
|
/// Return the system clock frequency.
|
|
virtual int GetClockFrequency() = 0;
|
|
/// Return the current clock.
|
|
virtual int GetClock() = 0;
|
|
/// Sleep platform for 'n' milliseconds.
|
|
virtual void Sleep(uint ms) = 0;
|
|
|
|
int GetStartClock() const;
|
|
Time GetStartTime() const;
|
|
|
|
/// System clock unit macros.
|
|
int GetSecond(int t) { return t * GetClockFrequency(); }
|
|
int GetMinute(int t) { return t * 60 * GetClockFrequency(); }
|
|
/// @}
|
|
|
|
/// Load a shared library.
|
|
virtual ISharedLib *LoadSharedLibrary(const char *) { return 0; }
|
|
|
|
Platform();
|
|
virtual ~Platform() {}
|
|
};
|
|
|
|
} // GS
|
|
|
|
#ifdef _DEBUG
|
|
#define __NTRACE(T) { GS::Platform::Get().Trace(T, __FILE__, __LINE__); }
|
|
#else
|
|
#define __NTRACE(T) ;
|
|
#endif
|
|
|
|
|
|
#endif // __PLATFORM__
|