7 #if defined(_MSC_VER) && !defined(NOMINMAX)
13 #include <fmt/printf.h>
20 #define __attribute(x)
27 #define RETURN_ZERO_NONGNU_ONLY return 0;
29 #define RETURN_ZERO_NONGNU_ONLY
33 #define ALIGN(x, a) __ALIGN_MASK(x, (a - 1))
34 #define __ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
40 template <
typename... Args>
41 inline void Output(
const char *message, Args... args)
46 template <
typename... Args>
47 inline void Warning(
const char *message, Args... args)
52 template <
typename... Args>
53 [[noreturn]]
inline void Error(
const char *message, Args... args)
58 template <
typename... Args>
59 inline void DebugMsg(
const char *message, Args... args)
64 std::string
string_join(std::vector<std::string> &v, std::string sep);
68 std::string
format_money(
double cents,
bool showCents =
true);
71 static inline Sint64 isqrt(Sint64 a)
74 return static_cast<int64_t
>(sqrt(
static_cast<double>(a)));
77 static inline Sint64 isqrt(
fixed v)
81 Sint64 ret_sq = -v.
v - 1;
82 for (s = 62; s >= 0; s -= 2) {
85 b = ret_sq + ((2 * ret + 1) << s);
95 const char *
pi_strcasestr(
const char *haystack,
const char *needle);
97 inline bool starts_with(
const std::string_view s,
const std::string_view t)
99 if (s.size() < t.size())
101 return memcmp(s.data(), t.data(), t.size()) == 0;
104 inline bool ends_with(
const std::string_view s,
const std::string_view t)
106 if (s.size() < t.size())
109 return memcmp(s.data() + (s.size() - t.size()), t.data(), t.size()) == 0;
114 if (s.size() < t.size())
117 for (
size_t i = 0; i < t.size(); i++)
118 if (tolower(s.data()[i]) != tolower(t.data()[i]))
124 inline bool ends_with_ci(
const std::string_view s,
const std::string_view t)
126 if (s.size() < t.size())
129 for (int64_t i = t.size(); i > 0; i--)
130 if (tolower(s.data()[s.size() - i]) != tolower(t.data()[t.size() - i]))
136 static inline size_t SplitSpec(
const std::string &spec, std::vector<int> &output)
138 static const std::string delim(
",");
140 size_t i = 0, start = 0, end = 0;
141 while (end != std::string::npos) {
143 start = spec.find_first_not_of(delim, end);
146 if (start == std::string::npos)
150 end = spec.find_first_of(delim, start);
153 output[i++] = atoi(spec.substr(start, (end == std::string::npos) ? std::string::npos : end - start).c_str());
159 static inline size_t SplitSpec(
const std::string &spec, std::vector<float> &output)
161 static const std::string delim(
",");
163 size_t i = 0, start = 0, end = 0;
164 while (end != std::string::npos) {
166 start = spec.find_first_not_of(delim, end);
169 if (start == std::string::npos)
173 end = spec.find_first_of(delim, start);
176 output[i++] = atof(spec.substr(start, (end == std::string::npos) ? std::string::npos : end - start).c_str());
182 std::vector<std::string>
SplitString(
const std::string &source,
const std::string &delim);
204 void StrToAuto(Sint32 *pVal,
const std::string &str);
205 void StrToAuto(Sint64 *pVal,
const std::string &str);
206 void StrToAuto(
float *pVal,
const std::string &str);
207 void StrToAuto(
double *pVal,
const std::string &str);
220 #if defined(_MSC_VER) && (_MSC_VER < 1800)
223 static inline double round(
double x)
225 return x >= 0.0 ? floor(x + 0.5) : ceil(x - 0.5);
228 static inline float roundf(
float x)
230 return x >= 0.0f ? floorf(x + 0.5f) : ceilf(x - 0.5f);
234 static inline Uint32 ceil_pow2(Uint32 v)
251 template <
typename T>
272 template <
typename T>
275 void hexdump(
const unsigned char *buf,
int bufsz);
double val
Definition: PrecalcPath.cpp:40
Sint64 v
Definition: fixed.h:239
void LogOld(Severity sv, std::string message)
Definition: Log.cpp:144
void LogFatalOld(std::string message)
Definition: Log.cpp:152
reverse_container_t(value_type &ref)
Definition: utils.h:258
iterator end()
Definition: utils.h:264
typename T::reverse_iterator iterator
Definition: utils.h:253
const_iterator end() const
Definition: utils.h:265
typename std::remove_reference< T >::type value_type
Definition: utils.h:256
const_iterator begin() const
Definition: utils.h:262
iterator begin()
Definition: utils.h:261
typename T::const_reverse_iterator const_iterator
Definition: utils.h:254
float StrToFloat(const std::string &str)
Definition: utils.cpp:449
std::string format_date_only(double time)
Definition: utils.cpp:84
std::vector< std::string > SplitString(const std::string &source, const std::string &delim)
Definition: utils.cpp:191
bool ends_with(const std::string_view s, const std::string_view t)
Definition: utils.h:104
void Vector3fToStr(const vector3f &val, char *out, size_t size)
Definition: utils.cpp:275
void Vector3dToStr(const vector3d &val, char *out, size_t size)
Definition: utils.cpp:293
void Matrix4x4fToStr(const matrix4x4f &val, char *out, size_t size)
Definition: utils.cpp:359
void Matrix3x3dToStr(const matrix3x3d &val, char *out, size_t size)
Definition: utils.cpp:335
void StrToAuto(Sint32 *pVal, const std::string &str)
Definition: utils.cpp:486
void Output(const char *message, Args... args)
Definition: utils.h:41
void StrToVector3f(const char *str, vector3f &val)
Definition: utils.cpp:506
void Matrix4x4dToStr(const matrix4x4d &val, char *out, size_t size)
Definition: utils.cpp:385
bool starts_with(const std::string_view s, const std::string_view t)
Definition: utils.h:97
void Matrix3x3fToStr(const matrix3x3f &val, char *out, size_t size)
Definition: utils.cpp:311
bool ends_with_ci(const std::string_view s, const std::string_view t)
Definition: utils.h:124
Uint64 StrToUInt64(const std::string &str)
Definition: utils.cpp:442
reverse_container_t< T > reverse_container(T &ref)
Definition: utils.h:273
std::string format_money(double cents, bool showCents=true)
Definition: utils.cpp:18
std::string FloatToStr(float val)
Definition: utils.cpp:241
void DebugMsg(const char *message, Args... args)
Definition: utils.h:59
void StrToMatrix3x3f(const char *str, matrix3x3f &val)
Definition: utils.cpp:542
std::string string_join(std::vector< std::string > &v, std::string sep)
Definition: utils.cpp:95
bool starts_with_ci(const std::string_view s, const std::string_view t)
Definition: utils.h:112
void StrToMatrix4x4d(const char *str, matrix4x4d &val)
Definition: utils.cpp:602
void Warning(const char *message, Args... args)
Definition: utils.h:47
void hexdump(const unsigned char *buf, int bufsz)
Definition: utils.cpp:636
std::string format_date(double time)
Definition: utils.cpp:71
std::string format_duration(double seconds)
Definition: utils.cpp:108
void StrToMatrix4x4f(const char *str, matrix4x4f &val)
Definition: utils.cpp:582
std::string AutoToStr(Sint32 val)
Definition: utils.cpp:411
void StrToMatrix3x3d(const char *str, matrix3x3d &val)
Definition: utils.cpp:562
std::string format_distance(double dist, int precision=2)
Definition: utils.cpp:132
const char * pi_strcasestr(const char *haystack, const char *needle)
Definition: utils.cpp:160
double StrToDouble(const std::string &str)
Definition: utils.cpp:467
std::string DoubleToStr(double val)
Definition: utils.cpp:258
void Error(const char *message, Args... args)
Definition: utils.h:53
Sint64 StrToSInt64(const std::string &str)
Definition: utils.cpp:435
std::string DecimalToDegMinSec(float dec)
Definition: utils.cpp:626
void StrToVector3d(const char *str, vector3d &val)
Definition: utils.cpp:524