-#ifndef STRING_H
-#define STRING_H
+#pragma once
#include "nil.qh"
#include "sort.qh"
}
#endif
-// TODO: macro
string seconds_tostring(float sec)
{
float minutes = floor(sec / 60);
return strcasecmp(substring(haystack, 0, strlen(needle)), needle) == 0;
}
+noref string _endsWith_suffix;
+#define endsWith(this, suffix) (_endsWith_suffix = suffix, substring(this, -strlen(_endsWith_suffix), -1) == _endsWith_suffix)
+
/** unzone the string, and return it as tempstring. Safe to be called on string_null */
string fstrunzone(string s)
{
/**
* converts a number to a string with the indicated number of decimals
- * works for up to 10 decimals!
*/
string ftos_decimals(float number, int decimals)
{
// inhibit stupid negative zero
if (number == 0) number = 0;
- // we have sprintf...
return sprintf("%.*f", decimals, number);
}
+/**
+ * converts a number to a string with the minimum number of decimals
+ */
+string ftos_mindecimals(float number)
+{
+ // inhibit stupid negative zero
+ if (number == 0) number = 0;
+ return sprintf("%.7g", number);
+}
+
int vercmp_recursive(string v1, string v2)
{
int dot1 = strstrofs(v1, ".", 0);
#define HEXDIGIT_TO_DEC_RAW(d) (strstrofs(HEXDIGITS, (d), 0))
#define HEXDIGIT_TO_DEC(d) ((HEXDIGIT_TO_DEC_RAW(d) | 0x10) - 0x10)
#define DEC_TO_HEXDIGIT(d) (substring(HEXDIGITS, (d), 1))
-
-#endif