tools.h: Some cleanups

FossilOrigin-Name: 9e3f7517ee9d4fe290eb8b0eba53bb9c077e3be3a952fd970469d4c94cc11f4e
This commit is contained in:
Jonathan Schleifer 2025-03-04 01:05:07 +00:00
parent 7259232e13
commit 0e59beaf43

View file

@ -68,29 +68,33 @@ strn0cpy(char *d, const char *s, size_t m)
{ {
strncpy(d, s, m); strncpy(d, s, m);
d[(m)-1] = 0; d[(m)-1] = 0;
}; }
inline void inline void
strcpy_s(char *d, const char *s) strcpy_s(char *d, const char *s)
{ {
strn0cpy(d, s, _MAXDEFSTR); strn0cpy(d, s, _MAXDEFSTR);
}; }
inline void inline void
strcat_s(char *d, const char *s) strcat_s(char *d, const char *s)
{ {
size_t n = strlen(d); size_t n = strlen(d);
strn0cpy(d + n, s, _MAXDEFSTR - n); strn0cpy(d + n, s, _MAXDEFSTR - n);
}; }
inline void inline void
formatstring(char *d, const char *fmt, va_list v) formatstring(char *d, const char *fmt, va_list v)
{ {
_vsnprintf(d, _MAXDEFSTR, fmt, v); _vsnprintf(d, _MAXDEFSTR, fmt, v);
d[_MAXDEFSTR - 1] = 0; d[_MAXDEFSTR - 1] = 0;
}; }
struct sprintf_s_f { struct sprintf_s_f {
char *d; char *d;
sprintf_s_f(char *str) : d(str) {}; sprintf_s_f(char *str) : d(str) {};
void void
operator()(const char *fmt, ...) operator()(const char *fmt, ...)
{ {
@ -99,7 +103,7 @@ struct sprintf_s_f {
_vsnprintf(d, _MAXDEFSTR, fmt, v); _vsnprintf(d, _MAXDEFSTR, fmt, v);
va_end(v); va_end(v);
d[_MAXDEFSTR - 1] = 0; d[_MAXDEFSTR - 1] = 0;
}; }
}; };
#define sprintf_s(d) sprintf_s_f((char *)d) #define sprintf_s(d) sprintf_s_f((char *)d)
@ -116,22 +120,7 @@ struct sprintf_s_f {
} }
#define sprintf_sdv(d, fmt) sprintf_sdlv(d, fmt, fmt) #define sprintf_sdv(d, fmt) sprintf_sdlv(d, fmt, fmt)
// fast pentium f2i #define fast_f2nat(val) ((int)(val))
#ifdef _MSC_VER
inline int
fast_f2nat(float a)
{ // only for positive floats
static const float fhalf = 0.5f;
int retval;
__asm fld a __asm fsub fhalf __asm fistp retval // perf regalloc?
return retval;
};
#else
# define fast_f2nat(val) ((int)(val))
#endif
extern char *path(char *s); extern char *path(char *s);
extern char *loadfile(char *fn, int *size); extern char *loadfile(char *fn, int *size);
@ -147,11 +136,13 @@ struct pool {
MAXBUCKETS = 65 MAXBUCKETS = 65
}; // meaning up to size 256 on 32bit pointer systems }; // meaning up to size 256 on 32bit pointer systems
enum { MAXREUSESIZE = MAXBUCKETS * PTRSIZE - PTRSIZE }; enum { MAXREUSESIZE = MAXBUCKETS * PTRSIZE - PTRSIZE };
inline size_t inline size_t
bucket(size_t s) bucket(size_t s)
{ {
return (s + PTRSIZE - 1) >> PTRBITS; return (s + PTRSIZE - 1) >> PTRBITS;
}; }
enum { PTRBITS = PTRSIZE == 2 ? 1 : PTRSIZE == 4 ? 2 : 3 }; enum { PTRBITS = PTRSIZE == 2 ? 1 : PTRSIZE == 4 ? 2 : 3 };
char *p; char *p;
@ -204,13 +195,13 @@ template <class T> struct vector {
alen = 8; alen = 8;
buf = (T *)p->alloc(alen * sizeof(T)); buf = (T *)p->alloc(alen * sizeof(T));
ulen = 0; ulen = 0;
}; }
~vector() ~vector()
{ {
setsize(0); setsize(0);
p->dealloc(buf, alen * sizeof(T)); p->dealloc(buf, alen * sizeof(T));
}; }
vector(vector<T> &v); vector(vector<T> &v);
void operator=(vector<T> &v); void operator=(vector<T> &v);
@ -222,7 +213,7 @@ template <class T> struct vector {
realloc(); realloc();
new (&buf[ulen]) T(x); new (&buf[ulen]) T(x);
return buf[ulen++]; return buf[ulen++];
}; }
T & T &
add() add()
@ -231,53 +222,58 @@ template <class T> struct vector {
realloc(); realloc();
new (&buf[ulen]) T; new (&buf[ulen]) T;
return buf[ulen++]; return buf[ulen++];
}; }
T & T &
pop() pop()
{ {
return buf[--ulen]; return buf[--ulen];
}; }
T & T &
last() last()
{ {
return buf[ulen - 1]; return buf[ulen - 1];
}; }
bool bool
empty() empty()
{ {
return ulen == 0; return ulen == 0;
}; }
int int
length() length()
{ {
return ulen; return ulen;
}; }
T & T &
operator[](int i) operator[](int i)
{ {
assert(i >= 0 && i < ulen); assert(i >= 0 && i < ulen);
return buf[i]; return buf[i];
}; }
void void
setsize(int i) setsize(int i)
{ {
for (; ulen > i; ulen--) for (; ulen > i; ulen--)
buf[ulen - 1].~T(); buf[ulen - 1].~T();
}; }
T * T *
getbuf() getbuf()
{ {
return buf; return buf;
}; }
void void
sort(void *cf) sort(void *cf)
{ {
qsort(buf, ulen, sizeof(T), qsort(buf, ulen, sizeof(T),
(int(__cdecl *)(const void *, const void *))cf); (int(__cdecl *)(const void *, const void *))cf);
}; }
void void
realloc() realloc()
@ -285,7 +281,7 @@ template <class T> struct vector {
int olen = alen; int olen = alen;
buf = (T *)p->realloc( buf = (T *)p->realloc(
buf, olen * sizeof(T), (alen *= 2) * sizeof(T)); buf, olen * sizeof(T), (alen *= 2) * sizeof(T));
}; }
T T
remove(int i) remove(int i)
@ -295,7 +291,7 @@ template <class T> struct vector {
buf[p - 1] = buf[p]; buf[p - 1] = buf[p];
ulen--; ulen--;
return e; return e;
}; }
T & T &
insert(int i, const T &e) insert(int i, const T &e)
@ -305,7 +301,7 @@ template <class T> struct vector {
buf[p] = buf[p - 1]; buf[p] = buf[p - 1];
buf[i] = e; buf[i] = e;
return buf[i]; return buf[i];
}; }
}; };
#define loopv(v) \ #define loopv(v) \