Translated using Weblate (Italian)
[oweals/minetest.git] / src / porting.h
index 4d51c5058cd3c0d1acff734c799d932ac73a29ba..f50f0a950f281d8973a96b8372a44b38d28e0793 100644 (file)
@@ -21,8 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        Random portability stuff
 */
 
-#ifndef PORTING_HEADER
-#define PORTING_HEADER
+#pragma once
 
 #ifdef _WIN32
        #ifdef _WIN32_WINNT
@@ -40,7 +39,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "debug.h"
 #include "constants.h"
 #include "gettime.h"
-#include "threads.h"
 
 #ifdef _MSC_VER
        #define SWPRINTF_CHARSTRING L"%S"
@@ -58,9 +56,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        #define sleep_ms(x) Sleep(x)
 #else
        #include <unistd.h>
-       #include <stdint.h> //for uintptr_t
+       #include <cstdint> //for uintptr_t
 
-       #if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE)
+       // Use standard Posix macro for Linux
+       #if (defined(linux) || defined(__linux)) && !defined(__linux__)
+               #define __linux__
+       #endif
+       #if (defined(__linux__) || defined(__GNU__)) && !defined(_GNU_SOURCE)
                #define _GNU_SOURCE
        #endif
 
@@ -110,8 +112,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #ifndef _WIN32 // Posix
        #include <sys/time.h>
-       #include <time.h>
-       #if defined(__MACH__) && defined(__APPLE__)
+       #include <ctime>
+
+#if defined(__MACH__) && defined(__APPLE__)
                #include <mach/clock.h>
                #include <mach/mach.h>
        #endif
@@ -124,10 +127,10 @@ namespace porting
        Signal handler (grabs Ctrl-C on POSIX systems)
 */
 
-void signal_handler_init(void);
+void signal_handler_init();
 // Returns a pointer to a bool.
 // When the bool is true, program should quit.
-bool * signal_handler_killstatus(void);
+bool * signal_handler_killstatus();
 
 /*
        Path of static data directory.
@@ -175,153 +178,113 @@ void initializePaths();
 */
 std::string get_sysinfo();
 
-void initIrrlicht(irr::IrrlichtDevice * );
 
-/*
-       Resolution is 10-20ms.
-       Remember to check for overflows.
-       Overflow can occur at any value higher than 10000000.
-*/
-#ifdef _WIN32 // Windows
+// Monotonic counter getters.
 
-       inline u32 getTimeS()
-       {
-               return GetTickCount() / 1000;
-       }
+#ifdef _WIN32 // Windows
 
-       inline u32 getTimeMs()
-       {
-               return GetTickCount();
-       }
+extern double perf_freq;
 
-       inline u32 getTimeUs()
-       {
-               LARGE_INTEGER freq, t;
-               QueryPerformanceFrequency(&freq);
-               QueryPerformanceCounter(&t);
-               return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000.0);
-       }
+inline u64 os_get_time(double mult)
+{
+       LARGE_INTEGER t;
+       QueryPerformanceCounter(&t);
+       return static_cast<double>(t.QuadPart) / (perf_freq / mult);
+}
 
-       inline u32 getTimeNs()
-       {
-               LARGE_INTEGER freq, t;
-               QueryPerformanceFrequency(&freq);
-               QueryPerformanceCounter(&t);
-               return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000000.0);
-       }
+// Resolution is <1us.
+inline u64 getTimeS() { return os_get_time(1); }
+inline u64 getTimeMs() { return os_get_time(1000); }
+inline u64 getTimeUs() { return os_get_time(1000*1000); }
+inline u64 getTimeNs() { return os_get_time(1000*1000*1000); }
 
 #else // Posix
-       inline void _os_get_clock(struct timespec *ts)
-       {
+
+inline void os_get_clock(struct timespec *ts)
+{
 #if defined(__MACH__) && defined(__APPLE__)
-       // from http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
-       // OS X does not have clock_gettime, use clock_get_time
-               clock_serv_t cclock;
-               mach_timespec_t mts;
-               host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
-               clock_get_time(cclock, &mts);
-               mach_port_deallocate(mach_task_self(), cclock);
-               ts->tv_sec = mts.tv_sec;
-               ts->tv_nsec = mts.tv_nsec;
+// From http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
+// OS X does not have clock_gettime, use clock_get_time
+       clock_serv_t cclock;
+       mach_timespec_t mts;
+       host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+       clock_get_time(cclock, &mts);
+       mach_port_deallocate(mach_task_self(), cclock);
+       ts->tv_sec = mts.tv_sec;
+       ts->tv_nsec = mts.tv_nsec;
 #elif defined(CLOCK_MONOTONIC_RAW)
-               clock_gettime(CLOCK_MONOTONIC_RAW, ts);
+       clock_gettime(CLOCK_MONOTONIC_RAW, ts);
 #elif defined(_POSIX_MONOTONIC_CLOCK)
-               clock_gettime(CLOCK_MONOTONIC, ts);
+       clock_gettime(CLOCK_MONOTONIC, ts);
 #else
-               struct timeval tv;
-               gettimeofday(&tv, NULL);
-               TIMEVAL_TO_TIMESPEC(&tv, ts);
-#endif // defined(__MACH__) && defined(__APPLE__)
-       }
+       struct timeval tv;
+       gettimeofday(&tv, NULL);
+       TIMEVAL_TO_TIMESPEC(&tv, ts);
+#endif
+}
 
-       // Note: these clock functions do not return wall time, but
-       // generally a clock that starts at 0 when the process starts.
-       inline u32 getTimeS()
-       {
-               struct timespec ts;
-               _os_get_clock(&ts);
-               return ts.tv_sec;
-       }
+inline u64 getTimeS()
+{
+       struct timespec ts;
+       os_get_clock(&ts);
+       return ts.tv_sec;
+}
 
-       inline u32 getTimeMs()
-       {
-               struct timespec ts;
-               _os_get_clock(&ts);
-               return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
-       }
+inline u64 getTimeMs()
+{
+       struct timespec ts;
+       os_get_clock(&ts);
+       return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
+}
 
-       inline u32 getTimeUs()
-       {
-               struct timespec ts;
-               _os_get_clock(&ts);
-               return ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
-       }
+inline u64 getTimeUs()
+{
+       struct timespec ts;
+       os_get_clock(&ts);
+       return ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+}
 
-       inline u32 getTimeNs()
-       {
-               struct timespec ts;
-               _os_get_clock(&ts);
-               return ts.tv_sec * 1000000000 + ts.tv_nsec;
-       }
+inline u64 getTimeNs()
+{
+       struct timespec ts;
+       os_get_clock(&ts);
+       return ts.tv_sec * 1000000000 + ts.tv_nsec;
+}
 
-       /*#include <sys/timeb.h>
-       inline u32 getTimeMs()
-       {
-               struct timeb tb;
-               ftime(&tb);
-               return tb.time * 1000 + tb.millitm;
-       }*/
 #endif
 
-inline u32 getTime(TimePrecision prec)
+inline u64 getTime(TimePrecision prec)
 {
        switch (prec) {
-               case PRECISION_SECONDS:
-                       return getTimeS();
-               case PRECISION_MILLI:
-                       return getTimeMs();
-               case PRECISION_MICRO:
-                       return getTimeUs();
-               case PRECISION_NANO:
-                       return getTimeNs();
+       case PRECISION_SECONDS: return getTimeS();
+       case PRECISION_MILLI:   return getTimeMs();
+       case PRECISION_MICRO:   return getTimeUs();
+       case PRECISION_NANO:    return getTimeNs();
        }
-       return 0;
+       FATAL_ERROR("Called getTime with invalid time precision");
 }
 
 /**
- * Delta calculation function taking two 32bit arguments.
- * @param old_time_ms old time for delta calculation (order is relevant!)
- * @param new_time_ms new time for delta calculation (order is relevant!)
- * @return positive 32bit delta value
+ * Delta calculation function arguments.
+ * @param old_time_ms old time for delta calculation
+ * @param new_time_ms new time for delta calculation
+ * @return positive delta value
  */
-inline u32 getDeltaMs(u32 old_time_ms, u32 new_time_ms)
+inline u64 getDeltaMs(u64 old_time_ms, u64 new_time_ms)
 {
        if (new_time_ms >= old_time_ms) {
                return (new_time_ms - old_time_ms);
-       } else {
-               return (old_time_ms - new_time_ms);
        }
-}
-
 
-#ifndef SERVER
-float getDisplayDensity();
-
-v2u32 getDisplaySize();
-v2u32 getWindowSize();
-
-std::vector<core::vector3d<u32> > getSupportedVideoModes();
-std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();
-const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type);
-const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type);
-#endif
+       return (old_time_ms - new_time_ms);
+}
 
 inline const char *getPlatformName()
 {
        return
 #if defined(ANDROID)
        "Android"
-#elif defined(linux) || defined(__linux) || defined(__linux__)
+#elif defined(__linux__)
        "Linux"
 #elif defined(_WIN32) || defined(_WIN64)
        "Windows"
@@ -360,19 +323,17 @@ inline const char *getPlatformName()
        ;
 }
 
-void setXorgClassHint(const video::SExposedVideoData &video_data,
-       const std::string &name);
+bool secure_rand_fill_buf(void *buf, size_t len);
+
+// This attaches to the parents process console, or creates a new one if it doesnt exist.
+void attachOrCreateConsole();
 
-// This only needs to be called at the start of execution, since all future
-// threads in the process inherit this exception handler
-void setWin32ExceptionHandler();
+int mt_snprintf(char *buf, const size_t buf_size, const char *fmt, ...);
+
+bool openURL(const std::string &url);
 
-bool secure_rand_fill_buf(void *buf, size_t len);
 } // namespace porting
 
 #ifdef __ANDROID__
 #include "porting_android.h"
 #endif
-
-#endif // PORTING_HEADER
-