X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a94656538f73e5097b5011b02ee825c8480a6d74..34d2ab14c1aba03a83cfddd43659cc49cbc0d2eb:/include/wx/utils.h?ds=inline diff --git a/include/wx/utils.h b/include/wx/utils.h index 32bed656c3..6f7cb56dde 100644 --- a/include/wx/utils.h +++ b/include/wx/utils.h @@ -19,6 +19,8 @@ #include "wx/object.h" #include "wx/list.h" #include "wx/filefn.h" +#include "wx/hashmap.h" +#include "wx/meta/implicitconversion.h" #if wxUSE_GUI #include "wx/gdicmn.h" @@ -54,12 +56,47 @@ class WXDLLIMPEXP_FWD_CORE wxWindow; class WXDLLIMPEXP_FWD_CORE wxWindowList; // ---------------------------------------------------------------------------- -// Macros +// Arithmetic functions // ---------------------------------------------------------------------------- -#define wxMax(a,b) (((a) > (b)) ? (a) : (b)) -#define wxMin(a,b) (((a) < (b)) ? (a) : (b)) -#define wxClip(a,b,c) (((a) < (b)) ? (b) : (((a) > (c)) ? (c) : (a))) +template +inline typename wxImplicitConversionType::value +wxMax(T1 a, T2 b) +{ + typedef typename wxImplicitConversionType::value ResultType; + + // Cast both operands to the same type before comparing them to avoid + // warnings about signed/unsigned comparisons from some compilers: + return static_cast(a) > static_cast(b) ? a : b; +} + +template +inline typename wxImplicitConversionType::value +wxMin(T1 a, T2 b) +{ + typedef typename wxImplicitConversionType::value ResultType; + + return static_cast(a) < static_cast(b) ? a : b; +} + +template +inline typename wxImplicitConversionType3::value +wxClip(T1 a, T2 b, T3 c) +{ + typedef typename wxImplicitConversionType3::value ResultType; + + if ( static_cast(a) < static_cast(b) ) + return b; + + if ( static_cast(a) > static_cast(c) ) + return c; + + return a; +} + +// ---------------------------------------------------------------------------- +// wxMemorySize +// ---------------------------------------------------------------------------- // wxGetFreeMemory can return huge amount of memory on 32-bit platforms as well // so to always use long long for its result type on all platforms which @@ -313,6 +350,17 @@ enum wxEXEC_BLOCK = wxEXEC_SYNC | wxEXEC_NOEVENTS }; +// Map storing environment variables. +typedef wxStringToStringHashMap wxEnvVariableHashMap; + +// Used to pass additional parameters for child process to wxExecute(). Could +// be extended with other fields later. +struct wxExecuteEnv +{ + wxString cwd; // If empty, CWD is not changed. + wxEnvVariableHashMap env; // If empty, environment is unchanged. +}; + // Execute another program. // // If flags contain wxEXEC_SYNC, return -1 on failure and the exit code of the @@ -320,27 +368,32 @@ enum // failure and the PID of the launched process if ok. WXDLLIMPEXP_BASE long wxExecute(const wxString& command, int flags = wxEXEC_ASYNC, - wxProcess *process = NULL); + wxProcess *process = NULL, + const wxExecuteEnv *env = NULL); WXDLLIMPEXP_BASE long wxExecute(char **argv, int flags = wxEXEC_ASYNC, - wxProcess *process = NULL); + wxProcess *process = NULL, + const wxExecuteEnv *env = NULL); #if wxUSE_UNICODE WXDLLIMPEXP_BASE long wxExecute(wchar_t **argv, int flags = wxEXEC_ASYNC, - wxProcess *process = NULL); + wxProcess *process = NULL, + const wxExecuteEnv *env = NULL); #endif // wxUSE_UNICODE // execute the command capturing its output into an array line by line, this is // always synchronous WXDLLIMPEXP_BASE long wxExecute(const wxString& command, wxArrayString& output, - int flags = 0); + int flags = 0, + const wxExecuteEnv *env = NULL); // also capture stderr (also synchronous) WXDLLIMPEXP_BASE long wxExecute(const wxString& command, wxArrayString& output, wxArrayString& error, - int flags = 0); + int flags = 0, + const wxExecuteEnv *env = NULL); #if defined(__WXMSW__) && wxUSE_IPC // ask a DDE server to execute the DDE request with given parameters @@ -479,6 +532,10 @@ inline bool wxSetEnv(const wxString& var, int value) } #endif // WXWIN_COMPATIBILITY_2_8 +// Retrieve the complete environment by filling specified map. +// Returns true on success or false if an error occurred. +WXDLLIMPEXP_BASE bool wxGetEnvMap(wxEnvVariableHashMap *map); + // ---------------------------------------------------------------------------- // Network and username functions. // ----------------------------------------------------------------------------