summaryrefslogtreecommitdiff
path: root/src/shared/tools.cpp
diff options
context:
space:
mode:
authorxolatile2025-08-06 22:54:55 +0200
committerxolatile2025-08-06 22:54:55 +0200
commit0a1172b75f571685c264a8b9d8ee224bbf11381f (patch)
treed041fdc68a60f0ebb48a3852bbcce6d9432f83d5 /src/shared/tools.cpp
parentaffde05dc07a94643f1fd2751b2b441f57f73d7d (diff)
downloadxolatile-badassbug-0a1172b75f571685c264a8b9d8ee224bbf11381f.tar.xz
xolatile-badassbug-0a1172b75f571685c264a8b9d8ee224bbf11381f.tar.zst
Please do not hate me, it makes sense...
Diffstat (limited to 'src/shared/tools.cpp')
-rw-r--r--src/shared/tools.cpp90
1 files changed, 30 insertions, 60 deletions
diff --git a/src/shared/tools.cpp b/src/shared/tools.cpp
index 1b49a8c..7eae44a 100644
--- a/src/shared/tools.cpp
+++ b/src/shared/tools.cpp
@@ -2,15 +2,13 @@
#include "cube.h"
-void *operator new(size_t size)
-{
+void *operator new(size_t size) {
void *p = malloc(size);
if(!p) abort();
return p;
}
-void *operator new[](size_t size)
-{
+void *operator new[](size_t size) {
void *p = malloc(size);
if(!p) abort();
return p;
@@ -22,15 +20,13 @@ void operator delete[](void *p) { if(p) free(p); }
void operator delete(void *p, size_t n) { (void) n; if(p) free(p); }
void operator delete[](void *p, size_t n) { (void) n; if(p) free(p); }
-void *operator new(size_t size, bool err)
-{
+void *operator new(size_t size, bool err) {
void *p = malloc(size);
if(!p && err) abort();
return p;
}
-void *operator new[](size_t size, bool err)
-{
+void *operator new[](size_t size, bool err) {
void *p = malloc(size);
if(!p && err) abort();
return p;
@@ -45,19 +41,16 @@ void *operator new[](size_t size, bool err)
static uint state[N];
static int next = N;
-void seedMT(uint seed)
-{
+void seedMT(uint seed) {
state[0] = seed;
for(uint i = 1; i < N; i++)
state[i] = seed = 1812433253U * (seed ^ (seed >> 30)) + i;
next = 0;
}
-uint randomMT()
-{
+uint randomMT() {
int cur = next;
- if(++next >= N)
- {
+ if(++next >= N) {
if(next > N) { seedMT(5489U + time(NULL)); cur = next++; }
else next = 0;
}
@@ -75,8 +68,7 @@ uint randomMT()
// all network traffic is in 32bit ints, which are then compressed using the following simple scheme (assumes that most values are small).
template<class T>
-static inline void putint_(T &p, int n)
-{
+static inline void putint_(T &p, int n) {
if(n<128 && n>-127) p.put(n);
else if(n<0x8000 && n>=-0x8000) { p.put(0x80); p.put(n); p.put(n>>8); }
else { p.put(0x81); p.put(n); p.put(n>>8); p.put(n>>16); p.put(n>>24); }
@@ -85,8 +77,7 @@ void putint(ucharbuf &p, int n) { putint_(p, n); }
void putint(packetbuf &p, int n) { putint_(p, n); }
void putint(vector<uchar> &p, int n) { putint_(p, n); }
-int getint(ucharbuf &p)
-{
+int getint(ucharbuf &p) {
int c = (schar)p.get();
if(c==-128) { int n = p.get(); n |= ((schar)p.get())<<8; return n; }
else if(c==-127) { int n = p.get(); n |= p.get()<<8; n |= p.get()<<16; return n|(p.get()<<24); }
@@ -95,23 +86,19 @@ int getint(ucharbuf &p)
// much smaller encoding for unsigned integers up to 28 bits, but can handle signed
template<class T>
-static inline void putuint_(T &p, int n)
-{
- if(n < 0 || n >= (1<<21))
- {
+static inline void putuint_(T &p, int n) {
+ if(n < 0 || n >= (1<<21)) {
p.put(0x80 | (n & 0x7F));
p.put(0x80 | ((n >> 7) & 0x7F));
p.put(0x80 | ((n >> 14) & 0x7F));
p.put(n >> 21);
}
else if(n < (1<<7)) p.put(n);
- else if(n < (1<<14))
- {
+ else if(n < (1<<14)) {
p.put(0x80 | (n & 0x7F));
p.put(n >> 7);
}
- else
- {
+ else {
p.put(0x80 | (n & 0x7F));
p.put(0x80 | ((n >> 7) & 0x7F));
p.put(n >> 14);
@@ -121,11 +108,9 @@ void putuint(ucharbuf &p, int n) { putuint_(p, n); }
void putuint(packetbuf &p, int n) { putuint_(p, n); }
void putuint(vector<uchar> &p, int n) { putuint_(p, n); }
-int getuint(ucharbuf &p)
-{
+int getuint(ucharbuf &p) {
int n = p.get();
- if(n & 0x80)
- {
+ if(n & 0x80) {
n += (p.get() << 7) - 0x80;
if(n & (1<<14)) n += (p.get() << 14) - (1<<14);
if(n & (1<<21)) n += (p.get() << 21) - (1<<21);
@@ -135,8 +120,7 @@ int getuint(ucharbuf &p)
}
template<class T>
-static inline void putfloat_(T &p, float f)
-{
+static inline void putfloat_(T &p, float f) {
lilswap(&f, 1);
p.put((uchar *)&f, sizeof(float));
}
@@ -144,16 +128,14 @@ void putfloat(ucharbuf &p, float f) { putfloat_(p, f); }
void putfloat(packetbuf &p, float f) { putfloat_(p, f); }
void putfloat(vector<uchar> &p, float f) { putfloat_(p, f); }
-float getfloat(ucharbuf &p)
-{
+float getfloat(ucharbuf &p) {
float f;
p.get((uchar *)&f, sizeof(float));
return lilswap(f);
}
template<class T>
-static inline void sendstring_(const char *t, T &p)
-{
+static inline void sendstring_(const char *t, T &p) {
while(*t) putint(p, *t++);
putint(p, 0);
}
@@ -161,11 +143,9 @@ void sendstring(const char *t, ucharbuf &p) { sendstring_(t, p); }
void sendstring(const char *t, packetbuf &p) { sendstring_(t, p); }
void sendstring(const char *t, vector<uchar> &p) { sendstring_(t, p); }
-void getstring(char *text, ucharbuf &p, size_t len)
-{
+void getstring(char *text, ucharbuf &p, size_t len) {
char *t = text;
- do
- {
+ do {
if(t>=&text[len]) { text[len-1] = 0; return; }
if(!p.remaining()) { *t = 0; return; }
*t = getint(p);
@@ -173,17 +153,13 @@ void getstring(char *text, ucharbuf &p, size_t len)
while(*t++);
}
-void filtertext(char *dst, const char *src, bool whitespace, bool forcespace, size_t len)
-{
- for(int c = uchar(*src); c; c = uchar(*++src))
- {
- if(c == '\f')
- {
+void filtertext(char *dst, const char *src, bool whitespace, bool forcespace, size_t len) {
+ for(int c = uchar(*src); c; c = uchar(*++src)) {
+ if(c == '\f') {
if(!*++src) break;
continue;
}
- if(!iscubeprint(c))
- {
+ if(!iscubeprint(c)) {
if(!iscubespace(c) || !whitespace) continue;
if(forcespace) c = ' ';
}
@@ -193,24 +169,20 @@ void filtertext(char *dst, const char *src, bool whitespace, bool forcespace, si
*dst = '\0';
}
-void ipmask::parse(const char *name)
-{
+void ipmask::parse(const char *name) {
union { uchar b[sizeof(enet_uint32)]; enet_uint32 i; } ipconv, maskconv;
ipconv.i = 0;
maskconv.i = 0;
- loopi(4)
- {
+ loopi(4) {
char *end = NULL;
int n = strtol(name, &end, 10);
if(!end) break;
if(end > name) { ipconv.b[i] = n; maskconv.b[i] = 0xFF; }
name = end;
- while(int c = *name)
- {
+ while(int c = *name) {
++name;
if(c == '.') break;
- if(c == '/')
- {
+ if(c == '/') {
int range = clamp(int(strtol(name, NULL, 10)), 0, 32);
mask = range ? ENET_HOST_TO_NET_32(0xFFffFFff << (32 - range)) : maskconv.i;
ip = ipconv.i & mask;
@@ -222,15 +194,13 @@ void ipmask::parse(const char *name)
mask = maskconv.i;
}
-int ipmask::print(char *buf) const
-{
+int ipmask::print(char *buf) const {
char *start = buf;
union { uchar b[sizeof(enet_uint32)]; enet_uint32 i; } ipconv, maskconv;
ipconv.i = ip;
maskconv.i = mask;
int lastdigit = -1;
- loopi(4) if(maskconv.b[i])
- {
+ loopi(4) if(maskconv.b[i]) {
if(lastdigit >= 0) *buf++ = '.';
loopj(i - lastdigit - 1) { *buf++ = '*'; *buf++ = '.'; }
buf += sprintf(buf, "%d", ipconv.b[i]);