/* ----------------------------------------------------------------------------- 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 { bool initialized; public: /// Initialize platform. virtual void Initialize(); AutoPtr job_manager; AutoPtr io; AutoPtr billing; AutoPtr analytics; AutoPtr licensing; AutoPtr input_system; // Platform signals. struct Signals { Signal 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__