From 659cbe700f46d85777595a94d4ef4a0b2f2190f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Thu, 14 Jan 2021 17:37:20 +0100 Subject: [PATCH] code: update deps + fixes --- code/apps/server/source/blocks.c | 2 +- code/apps/server/source/world.c | 40 +++--- code/apps/server/source/world_gen.c | 37 ++--- code/vendors/librg.h | 208 ++++++++++------------------ code/vendors/zpl.h | 141 +++++++++---------- 5 files changed, 184 insertions(+), 244 deletions(-) diff --git a/code/apps/server/source/blocks.c b/code/apps/server/source/blocks.c index 25609bf..6b5fabe 100644 --- a/code/apps/server/source/blocks.c +++ b/code/apps/server/source/blocks.c @@ -7,7 +7,7 @@ typedef struct { uint8_t tex_id; - const char *name; + char *name; uint32_t flags; uint32_t kind; uint32_t biome; diff --git a/code/apps/server/source/world.c b/code/apps/server/source/world.c index 822725b..f13e042 100644 --- a/code/apps/server/source/world.c +++ b/code/apps/server/source/world.c @@ -1,42 +1,46 @@ #include "world.h" #include "zpl.h" -static uint8_t *world = NULL; -static uint32_t world_seed = 0; -static uint32_t world_size = 0; -static uint32_t world_width = 0; -static uint32_t world_height = 0; +typedef struct { + uint8_t *data; + uint32_t seed; + uint32_t size; + uint32_t width; + uint32_t height; +} world_data; + +static world_data world = {0}; int32_t world_gen(); int32_t world_init(int32_t seed, uint32_t width, uint32_t height) { - if (world) { + if (world.data) { world_destroy(); } - world_seed = seed; - world_width = width; - world_height = height; - world_size = width*height; - world = zpl_malloc(sizeof(uint8_t)*world_size); + world.seed = seed; + world.width = width; + world.height = height; + world.size = width*height; + world.data = zpl_malloc(sizeof(uint8_t)*world.size); - if (!world) { + if (!world.data) { return WORLD_ERROR_OUTOFMEM; } return world_gen(); } int32_t world_destroy(void) { - zpl_mfree(world); - world = NULL; + zpl_mfree(world.data); + zpl_memset(&world, 0, sizeof(world)); return WORLD_ERROR_NONE; } uint32_t world_buf(uint8_t const **ptr, uint32_t *width) { - ZPL_ASSERT_NOT_NULL(world); + ZPL_ASSERT_NOT_NULL(world.data); ZPL_ASSERT_NOT_NULL(ptr); - *ptr = world; - if (width) *width = world_width; - return world_size; + *ptr = world.data; + if (width) *width = world.width; + return world.size; } #include "world_gen.c" diff --git a/code/apps/server/source/world_gen.c b/code/apps/server/source/world_gen.c index c74a828..c2ed8bb 100644 --- a/code/apps/server/source/world_gen.c +++ b/code/apps/server/source/world_gen.c @@ -4,6 +4,7 @@ #include "zpl.h" #include +#include #define WORLD_BLOCK_OBSERVER(name) uint32_t name(uint32_t id, uint32_t block_idx) typedef WORLD_BLOCK_OBSERVER(world_block_observer_proc); @@ -14,9 +15,9 @@ typedef WORLD_BLOCK_OBSERVER(world_block_observer_proc); static void world_fill_rect(uint32_t id, uint32_t x, uint32_t y, uint32_t w, uint32_t h, world_block_observer_proc *proc) { for (uint32_t cy=y; cy= world_width) continue; - if (cy < 0 || cy >= world_height) continue; - uint32_t i = (cy*world_width) + cx; + if (cx < 0 || cx >= world.width) continue; + if (cy < 0 || cy >= world.height) continue; + uint32_t i = (cy*world.width) + cx; if (proc) { uint32_t new_id = (*proc)(id, i); @@ -26,7 +27,7 @@ static void world_fill_rect(uint32_t id, uint32_t x, uint32_t y, uint32_t w, uin else continue; } - world[i] = id; + world.data[i] = id; } } } @@ -34,9 +35,9 @@ static void world_fill_rect(uint32_t id, uint32_t x, uint32_t y, uint32_t w, uin static void world_fill_circle(uint32_t id, uint32_t x, uint32_t y, uint32_t w, uint32_t h, world_block_observer_proc *proc) { for (uint32_t cy=y; cy= world_width) continue; - if (cy < 0 || cy >= world_height) continue; - uint32_t i = (cy*world_width) + cx; + if (cx < 0 || cx >= world.width) continue; + if (cy < 0 || cy >= world.height) continue; + uint32_t i = (cy*world.width) + cx; if (proc) { uint32_t new_id = (*proc)(id, i); @@ -46,7 +47,7 @@ static void world_fill_circle(uint32_t id, uint32_t x, uint32_t y, uint32_t w, u else continue; } - world[i] = id; + world.data[i] = id; } } } @@ -60,8 +61,8 @@ static void world_fill_rect_anchor(uint32_t id, uint32_t x, uint32_t y, uint32_t static WORLD_BLOCK_OBSERVER(shaper) { uint32_t biome = blocks_get_biome(id); uint32_t kind = blocks_get_kind(id); - uint32_t old_biome = blocks_get_biome(world[block_idx]); - uint32_t old_kind = blocks_get_kind(world[block_idx]); + uint32_t old_biome = blocks_get_biome(world.data[block_idx]); + uint32_t old_kind = blocks_get_kind(world.data[block_idx]); if (biome == old_biome) { if (kind == BLOCK_KIND_WALL && kind == old_kind) { @@ -76,10 +77,10 @@ static WORLD_BLOCK_OBSERVER(shaper) { } static uint8_t world_perlin_cond(uint32_t block_idx, double chance) { - uint32_t x = block_idx % world_width; - uint32_t y = block_idx / world_width; + uint32_t x = block_idx % world.width; + uint32_t y = block_idx / world.width; - return perlin_fbm(world_seed, x, y, WORLD_PERLIN_FREQ, WORLD_PERLIN_OCTAVES) < chance; + return perlin_fbm(world.seed, x, y, WORLD_PERLIN_FREQ, WORLD_PERLIN_OCTAVES) < chance; } static WORLD_BLOCK_OBSERVER(shaper_noise80) { @@ -107,24 +108,24 @@ int32_t world_gen() { uint32_t grnd_id = blocks_find(BLOCK_BIOME_DEV, BLOCK_KIND_GROUND); uint32_t watr_id = blocks_find(BLOCK_BIOME_DEV, BLOCK_KIND_WATER); - srand(world_seed); + srand(world.seed); // walls - world_fill_rect(wall_id, 0, 0, world_width, world_height, NULL); + world_fill_rect(wall_id, 0, 0, world.width, world.height, NULL); // ground - world_fill_rect(grnd_id, 1, 1, world_width-2, world_height-2, NULL); + world_fill_rect(grnd_id, 1, 1, world.width-2, world.height-2, NULL); // water for (int i=0; i> 4]; - if (str_len < zpl_size_of(sz)) goto invalid_codepoint; + if (str_len < sz) goto invalid_codepoint; b1 = str[1]; if (b1 < accept.lo || accept.hi < b1) goto invalid_codepoint; @@ -12181,13 +12185,13 @@ LIBRG_END_C_DECLS ZPL_NOT_IMPLEMENTED; return 0; #else - zpl_isize size; int existing_fd = open(existing_filename, O_RDONLY, 0); - int new_fd = open(new_filename, O_WRONLY | O_CREAT, 0666); - struct stat stat_existing; fstat(existing_fd, &stat_existing); + zpl_isize size; + int new_fd = open(new_filename, O_WRONLY | O_CREAT, stat_existing.st_mode); + #if defined(ZPL_SYSTEM_FREEBSD) size = sendfile(new_fd, existing_fd, 0, stat_existing.st_size, NULL, 0, 0); #else @@ -13156,7 +13160,7 @@ LIBRG_END_C_DECLS #else clock_gettime(0 /*CLOCK_REALTIME*/, &t); #endif - return (t.tv_sec * 1000 + t.tv_nsec * 1e-6 + ZPL__UNIX_TO_WIN32_EPOCH); + return ((zpl_u64)t.tv_sec * 1000 + t.tv_nsec * 1e-6 + ZPL__UNIX_TO_WIN32_EPOCH); } void zpl_sleep_ms(zpl_u32 ms) { @@ -13814,7 +13818,7 @@ LIBRG_END_C_DECLS return (b << 16) | a; } - zpl_global zpl_u32 const ZPL__CRC32_TABLE[256] = { + zpl_global zpl_u32 const zpl__crc32_table[256] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, @@ -13846,14 +13850,68 @@ LIBRG_END_C_DECLS 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; + zpl_global zpl_u64 const zpl__crc64_table[256] = { + 0x0000000000000000ull, 0x7ad870c830358979ull, 0xf5b0e190606b12f2ull, 0x8f689158505e9b8bull, 0xc038e5739841b68full, 0xbae095bba8743ff6ull, + 0x358804e3f82aa47dull, 0x4f50742bc81f2d04ull, 0xab28ecb46814fe75ull, 0xd1f09c7c5821770cull, 0x5e980d24087fec87ull, 0x24407dec384a65feull, + 0x6b1009c7f05548faull, 0x11c8790fc060c183ull, 0x9ea0e857903e5a08ull, 0xe478989fa00bd371ull, 0x7d08ff3b88be6f81ull, 0x07d08ff3b88be6f8ull, + 0x88b81eabe8d57d73ull, 0xf2606e63d8e0f40aull, 0xbd301a4810ffd90eull, 0xc7e86a8020ca5077ull, 0x4880fbd87094cbfcull, 0x32588b1040a14285ull, + 0xd620138fe0aa91f4ull, 0xacf86347d09f188dull, 0x2390f21f80c18306ull, 0x594882d7b0f40a7full, 0x1618f6fc78eb277bull, 0x6cc0863448deae02ull, + 0xe3a8176c18803589ull, 0x997067a428b5bcf0ull, 0xfa11fe77117cdf02ull, 0x80c98ebf2149567bull, + 0x0fa11fe77117cdf0ull, 0x75796f2f41224489ull, 0x3a291b04893d698dull, 0x40f16bccb908e0f4ull, 0xcf99fa94e9567b7full, 0xb5418a5cd963f206ull, + 0x513912c379682177ull, 0x2be1620b495da80eull, 0xa489f35319033385ull, 0xde51839b2936bafcull, 0x9101f7b0e12997f8ull, 0xebd98778d11c1e81ull, + 0x64b116208142850aull, 0x1e6966e8b1770c73ull, 0x8719014c99c2b083ull, 0xfdc17184a9f739faull, 0x72a9e0dcf9a9a271ull, 0x08719014c99c2b08ull, + 0x4721e43f0183060cull, 0x3df994f731b68f75ull, 0xb29105af61e814feull, 0xc849756751dd9d87ull, 0x2c31edf8f1d64ef6ull, 0x56e99d30c1e3c78full, + 0xd9810c6891bd5c04ull, 0xa3597ca0a188d57dull, 0xec09088b6997f879ull, 0x96d1784359a27100ull, 0x19b9e91b09fcea8bull, 0x636199d339c963f2ull, + 0xdf7adabd7a6e2d6full, 0xa5a2aa754a5ba416ull, 0x2aca3b2d1a053f9dull, 0x50124be52a30b6e4ull, 0x1f423fcee22f9be0ull, 0x659a4f06d21a1299ull, + 0xeaf2de5e82448912ull, 0x902aae96b271006bull, 0x74523609127ad31aull, 0x0e8a46c1224f5a63ull, 0x81e2d7997211c1e8ull, 0xfb3aa75142244891ull, + 0xb46ad37a8a3b6595ull, 0xceb2a3b2ba0eececull, 0x41da32eaea507767ull, 0x3b024222da65fe1eull, 0xa2722586f2d042eeull, 0xd8aa554ec2e5cb97ull, + 0x57c2c41692bb501cull, 0x2d1ab4dea28ed965ull, 0x624ac0f56a91f461ull, 0x1892b03d5aa47d18ull, 0x97fa21650afae693ull, 0xed2251ad3acf6feaull, + 0x095ac9329ac4bc9bull, 0x7382b9faaaf135e2ull, 0xfcea28a2faafae69ull, 0x8632586aca9a2710ull, 0xc9622c4102850a14ull, 0xb3ba5c8932b0836dull, + 0x3cd2cdd162ee18e6ull, 0x460abd1952db919full, 0x256b24ca6b12f26dull, 0x5fb354025b277b14ull, 0xd0dbc55a0b79e09full, 0xaa03b5923b4c69e6ull, + 0xe553c1b9f35344e2ull, 0x9f8bb171c366cd9bull, 0x10e3202993385610ull, 0x6a3b50e1a30ddf69ull, 0x8e43c87e03060c18ull, 0xf49bb8b633338561ull, + 0x7bf329ee636d1eeaull, 0x012b592653589793ull, 0x4e7b2d0d9b47ba97ull, 0x34a35dc5ab7233eeull, 0xbbcbcc9dfb2ca865ull, 0xc113bc55cb19211cull, + 0x5863dbf1e3ac9decull, 0x22bbab39d3991495ull, 0xadd33a6183c78f1eull, 0xd70b4aa9b3f20667ull, 0x985b3e827bed2b63ull, 0xe2834e4a4bd8a21aull, + 0x6debdf121b863991ull, 0x1733afda2bb3b0e8ull, 0xf34b37458bb86399ull, 0x8993478dbb8deae0ull, 0x06fbd6d5ebd3716bull, 0x7c23a61ddbe6f812ull, + 0x3373d23613f9d516ull, 0x49aba2fe23cc5c6full, 0xc6c333a67392c7e4ull, 0xbc1b436e43a74e9dull, 0x95ac9329ac4bc9b5ull, 0xef74e3e19c7e40ccull, + 0x601c72b9cc20db47ull, 0x1ac40271fc15523eull, 0x5594765a340a7f3aull, 0x2f4c0692043ff643ull, 0xa02497ca54616dc8ull, 0xdafce7026454e4b1ull, + 0x3e847f9dc45f37c0ull, 0x445c0f55f46abeb9ull, 0xcb349e0da4342532ull, 0xb1eceec59401ac4bull, 0xfebc9aee5c1e814full, 0x8464ea266c2b0836ull, + 0x0b0c7b7e3c7593bdull, 0x71d40bb60c401ac4ull, 0xe8a46c1224f5a634ull, 0x927c1cda14c02f4dull, 0x1d148d82449eb4c6ull, 0x67ccfd4a74ab3dbfull, + 0x289c8961bcb410bbull, 0x5244f9a98c8199c2ull, 0xdd2c68f1dcdf0249ull, 0xa7f41839ecea8b30ull, 0x438c80a64ce15841ull, 0x3954f06e7cd4d138ull, + 0xb63c61362c8a4ab3ull, 0xcce411fe1cbfc3caull, 0x83b465d5d4a0eeceull, 0xf96c151de49567b7ull, 0x76048445b4cbfc3cull, 0x0cdcf48d84fe7545ull, + 0x6fbd6d5ebd3716b7ull, 0x15651d968d029fceull, 0x9a0d8ccedd5c0445ull, 0xe0d5fc06ed698d3cull, 0xaf85882d2576a038ull, 0xd55df8e515432941ull, + 0x5a3569bd451db2caull, 0x20ed197575283bb3ull, 0xc49581ead523e8c2ull, 0xbe4df122e51661bbull, 0x3125607ab548fa30ull, 0x4bfd10b2857d7349ull, + 0x04ad64994d625e4dull, 0x7e7514517d57d734ull, 0xf11d85092d094cbfull, 0x8bc5f5c11d3cc5c6ull, 0x12b5926535897936ull, 0x686de2ad05bcf04full, + 0xe70573f555e26bc4ull, 0x9ddd033d65d7e2bdull, 0xd28d7716adc8cfb9ull, 0xa85507de9dfd46c0ull, 0x273d9686cda3dd4bull, 0x5de5e64efd965432ull, + 0xb99d7ed15d9d8743ull, 0xc3450e196da80e3aull, 0x4c2d9f413df695b1ull, 0x36f5ef890dc31cc8ull, 0x79a59ba2c5dc31ccull, 0x037deb6af5e9b8b5ull, + 0x8c157a32a5b7233eull, 0xf6cd0afa9582aa47ull, 0x4ad64994d625e4daull, 0x300e395ce6106da3ull, 0xbf66a804b64ef628ull, 0xc5bed8cc867b7f51ull, + 0x8aeeace74e645255ull, 0xf036dc2f7e51db2cull, 0x7f5e4d772e0f40a7ull, 0x05863dbf1e3ac9deull, 0xe1fea520be311aafull, 0x9b26d5e88e0493d6ull, + 0x144e44b0de5a085dull, 0x6e963478ee6f8124ull, 0x21c640532670ac20ull, 0x5b1e309b16452559ull, 0xd476a1c3461bbed2ull, 0xaeaed10b762e37abull, + 0x37deb6af5e9b8b5bull, 0x4d06c6676eae0222ull, 0xc26e573f3ef099a9ull, 0xb8b627f70ec510d0ull, 0xf7e653dcc6da3dd4ull, 0x8d3e2314f6efb4adull, + 0x0256b24ca6b12f26ull, 0x788ec2849684a65full, 0x9cf65a1b368f752eull, 0xe62e2ad306bafc57ull, 0x6946bb8b56e467dcull, 0x139ecb4366d1eea5ull, + 0x5ccebf68aecec3a1ull, 0x2616cfa09efb4ad8ull, 0xa97e5ef8cea5d153ull, 0xd3a62e30fe90582aull, 0xb0c7b7e3c7593bd8ull, 0xca1fc72bf76cb2a1ull, + 0x45775673a732292aull, 0x3faf26bb9707a053ull, 0x70ff52905f188d57ull, 0x0a2722586f2d042eull, 0x854fb3003f739fa5ull, 0xff97c3c80f4616dcull, + 0x1bef5b57af4dc5adull, 0x61372b9f9f784cd4ull, 0xee5fbac7cf26d75full, 0x9487ca0fff135e26ull, 0xdbd7be24370c7322ull, 0xa10fceec0739fa5bull, + 0x2e675fb4576761d0ull, 0x54bf2f7c6752e8a9ull, 0xcdcf48d84fe75459ull, 0xb71738107fd2dd20ull, 0x387fa9482f8c46abull, 0x42a7d9801fb9cfd2ull, + 0x0df7adabd7a6e2d6ull, 0x772fdd63e7936bafull, 0xf8474c3bb7cdf024ull, 0x829f3cf387f8795dull, 0x66e7a46c27f3aa2cull, 0x1c3fd4a417c62355ull, + 0x935745fc4798b8deull, 0xe98f353477ad31a7ull, 0xa6df411fbfb21ca3ull, 0xdc0731d78f8795daull, 0x536fa08fdfd90e51ull, 0x29b7d047efec8728ull, + }; + zpl_u32 zpl_crc32(void const *data, zpl_isize len) { zpl_isize remaining; zpl_u32 result = ~(cast(zpl_u32) 0); zpl_u8 const *c = cast(zpl_u8 const *) data; - for (remaining = len; remaining--; c++) result = (result >> 8) ^ (ZPL__CRC32_TABLE[(result ^ *c) & 0xff]); + for (remaining = len; remaining--; c++) result = (result >> 8) ^ (zpl__crc32_table[(result ^ *c) & 0xff]); return ~result; } + zpl_u64 zpl_crc64(void const *data, zpl_isize len) { + zpl_isize remaining; + zpl_u64 result = (cast(zpl_u64)0); + zpl_u8 const *c = cast(zpl_u8 const *) data; + for (remaining = len; remaining--; c++) result = (result >> 8) ^ (zpl__crc64_table[(result ^ *c) & 0xff]); + return result; + } + zpl_u32 zpl_fnv32(void const *data, zpl_isize len) { zpl_isize i; zpl_u32 h = 0x811c9dc5; @@ -14090,7 +14148,6 @@ LIBRG_END_C_DECLS } zpl_u64 zpl_murmur64_seed(void const *data_, zpl_isize len, zpl_u64 seed) { - #if defined(ZPL_ARCH_64_BIT) zpl_u64 const m = 0xc6a4a7935bd1e995ULL; zpl_i32 const r = 47; @@ -14127,65 +14184,6 @@ LIBRG_END_C_DECLS h ^= h >> r; return h; - #else - zpl_u64 h; - zpl_u32 const m = 0x5bd1e995; - zpl_i32 const r = 24; - - zpl_u32 h1 = cast(zpl_u32)(seed) ^ cast(zpl_u32)(len); - zpl_u32 h2 = cast(zpl_u32)(seed >> 32); - - zpl_u32 const *data = cast(zpl_u32 const *) data_; - - while (len >= 8) { - zpl_u32 k1, k2; - k1 = *data++; - k1 *= m; - k1 ^= k1 >> r; - k1 *= m; - h1 *= m; - h1 ^= k1; - len -= 4; - - k2 = *data++; - k2 *= m; - k2 ^= k2 >> r; - k2 *= m; - h2 *= m; - h2 ^= k2; - len -= 4; - } - - if (len >= 4) { - zpl_u32 k1 = *data++; - k1 *= m; - k1 ^= k1 >> r; - k1 *= m; - h1 *= m; - h1 ^= k1; - len -= 4; - } - - switch (len) { - case 3: h2 ^= (cast(zpl_u8 const *) data)[2] << 16; - case 2: h2 ^= (cast(zpl_u8 const *) data)[1] << 8; - case 1: h2 ^= (cast(zpl_u8 const *) data)[0] << 0; h2 *= m; - }; - - h1 ^= h2 >> 18; - h1 *= m; - h2 ^= h1 >> 22; - h2 *= m; - h1 ^= h2 >> 17; - h1 *= m; - h2 ^= h1 >> 19; - h2 *= m; - - h = h1; - h = (h << 32) | h2; - - return h; - #endif } ZPL_END_C_DECLS @@ -14813,8 +14811,6 @@ LIBRG_END_C_DECLS if ((offset < len) && (pattern[offset] == '?')) { quantifier = ZPL_RE_OP_ONE_OR_MORE_SHORTEST; - if (quantifier == ZPL_RE_OP_ZERO_OR_MORE) - quantifier = ZPL_RE_OP_ZERO_OR_MORE_SHORTEST; offset++; } @@ -17195,7 +17191,6 @@ LIBRG_END_C_DECLS ZPL_BEGIN_C_DECLS - static ZPL_ALWAYS_INLINE zpl_b32 zpl__json_is_special_char(char c) { return !!zpl_strchr("<>:/", c); } static ZPL_ALWAYS_INLINE zpl_b32 zpl__json_is_assign_char(char c) { return !!zpl_strchr(":=|", c); } static ZPL_ALWAYS_INLINE zpl_b32 zpl__json_is_delim_char(char c) { return !!zpl_strchr(",|\n", c); } @@ -19653,27 +19648,6 @@ typedef struct librg_world_t { void *userdata; } librg_world_t; -/* unsued */ - -// #define LIBRG_OBSERVE_ALL (-0x01) -// #define LIBRG_OBSERVE_NONE (+0x00) - -// typedef enum librg_entity_refreshing { -// LIBRG_CONSTANT, /* int argument, update entity every Nth tick */ -// LIBRG_LINEAR, /* float argument, linearly decrease update interval based on distance step (argument) */ -// LIBRG_QUADRATIC, /* float argument, cubicly decrease update inverval based on distance step (argument) */ -// } librg_entity_refreshing; - -// typedef enum { -// LIBRG_ENTITY_DYNAMIC, -// LIBRG_ENTITY_STATIC, -// } librg_behavior_type; - -// typedef enum { -// LIBRG_BEHAVIOR_TYPE, -// LIBRG_BEHAVIOR_STEPBACK, -// } librg_behavior; - LIBRG_END_C_DECLS // file: source/context.c @@ -20329,41 +20303,6 @@ int8_t librg_entity_visibility_owner_get(librg_world *world, int64_t entity_id, return (value ? *value : LIBRG_VISIBLITY_DEFAULT); } -#if 0 -// int8_t librg_entity_type_set(librg_world *world, int64_t entity_id, uint8_t type) { -// LIBRG_ASSERT(world); if (!world) return LIBRG_WORLD_INVALID; -// librg_world_t *wld = (librg_world_t *)world; - -// librg_entity_t *entity = librg_table_ent_get(&wld->entity_map, entity_id); -// if (entity == NULL) return LIBRG_ENTITY_UNTRACKED; - -// entity->type = type; -// return LIBRG_OK; -// } - -// int16_t librg_entity_type_get(librg_world *world, int64_t entity_id) { -// LIBRG_ASSERT(world); if (!world) return LIBRG_WORLD_INVALID; -// librg_world_t *wld = (librg_world_t *)world; - -// librg_entity_t *entity = librg_table_ent_get(&wld->entity_map, entity_id); -// if (entity == NULL) return LIBRG_ENTITY_UNTRACKED; - -// return entity->type; -// } - - - -int librg_entity_refresh_set(librg_world *, int64_t entity_id, int type, float value); // ? { - return LIBRG_OK -} - -int librg_entity_refresh_get(librg_world *, int64_t entity_id, int *type, float *value) { - return LIBRG_OK -} -// TODO: entity visibility - -#endif - LIBRG_END_C_DECLS // file: source/world.c @@ -20865,9 +20804,10 @@ int32_t librg_world_read(librg_world *world, int64_t owner_id, const char *buffe else if (seg->type == LIBRG_WRITE_UPDATE) { /* try to check if entity exists, and if it is foreign OR owner and token are correct */ action_id = (librg_entity_tracked(world, val->id) == LIBRG_TRUE - && (entity_blob->flag_foreign - || (entity_blob->owner_id == owner_id - && entity_blob->ownership_token == val->token))) + && entity_blob + && (entity_blob->flag_foreign || (entity_blob->owner_id == owner_id + && entity_blob->ownership_token == val->token) + )) ? LIBRG_READ_UPDATE : LIBRG_ERROR_UPDATE; } diff --git a/code/vendors/zpl.h b/code/vendors/zpl.h index f6b54d6..41479d2 100644 --- a/code/vendors/zpl.h +++ b/code/vendors/zpl.h @@ -27,6 +27,9 @@ GitHub: https://github.com/zpl-c/zpl Version History: + 10.12.1 - Fix missing zpL_alloc_str + 10.12.0 - Add zpl_crc64 + 10.11.1 - Fix zpl_time_utc_ms on 32-bit OSes 10.11.0 - Added zpl_file_stream_buf 10.10.3 - Math type-punning fixes 10.10.1 - Fix memory writing issue + new write-only in-situ flag @@ -294,8 +297,8 @@ Version History: #define ZPL_H #define ZPL_VERSION_MAJOR 10 -#define ZPL_VERSION_MINOR 11 -#define ZPL_VERSION_PATCH 0 +#define ZPL_VERSION_MINOR 12 +#define ZPL_VERSION_PATCH 1 #define ZPL_VERSION_PRE "" // file: zpl_hedley.h @@ -3314,7 +3317,7 @@ ZPL_END_C_DECLS ZPL_DEF_INLINE void *zpl_alloc_copy_align(zpl_allocator a, void const *src, zpl_isize size, zpl_isize alignment); //! Allocate memory for null-terminated C-String. - ZPL_DEF_INLINE char *zpl_alloc_str(zpl_allocator a, char const *str); + ZPL_DEF char *zpl_alloc_str(zpl_allocator a, char const *str); //! Allocate memory for C-String with specified size. ZPL_DEF_INLINE char *zpl_alloc_str_len(zpl_allocator a, char const *str, zpl_isize len); @@ -5828,6 +5831,7 @@ ZPL_END_C_DECLS ZPL_DEF zpl_u32 zpl_adler32(void const *data, zpl_isize len); ZPL_DEF zpl_u32 zpl_crc32(void const *data, zpl_isize len); + ZPL_DEF zpl_u64 zpl_crc64(void const *data, zpl_isize len); // These use FNV-1 algorithm ZPL_DEF zpl_u32 zpl_fnv32(void const *data, zpl_isize len); @@ -8787,7 +8791,7 @@ ZPL_END_C_DECLS sz = x & 7; accept = zpl__utf8_accept_ranges[x >> 4]; - if (str_len < zpl_size_of(sz)) goto invalid_codepoint; + if (str_len < sz) goto invalid_codepoint; b1 = str[1]; if (b1 < accept.lo || accept.hi < b1) goto invalid_codepoint; @@ -9834,13 +9838,13 @@ ZPL_END_C_DECLS ZPL_NOT_IMPLEMENTED; return 0; #else - zpl_isize size; int existing_fd = open(existing_filename, O_RDONLY, 0); - int new_fd = open(new_filename, O_WRONLY | O_CREAT, 0666); - struct stat stat_existing; fstat(existing_fd, &stat_existing); + zpl_isize size; + int new_fd = open(new_filename, O_WRONLY | O_CREAT, stat_existing.st_mode); + #if defined(ZPL_SYSTEM_FREEBSD) size = sendfile(new_fd, existing_fd, 0, stat_existing.st_size, NULL, 0, 0); #else @@ -10809,7 +10813,7 @@ ZPL_END_C_DECLS #else clock_gettime(0 /*CLOCK_REALTIME*/, &t); #endif - return (t.tv_sec * 1000 + t.tv_nsec * 1e-6 + ZPL__UNIX_TO_WIN32_EPOCH); + return ((zpl_u64)t.tv_sec * 1000 + t.tv_nsec * 1e-6 + ZPL__UNIX_TO_WIN32_EPOCH); } void zpl_sleep_ms(zpl_u32 ms) { @@ -11467,7 +11471,7 @@ ZPL_END_C_DECLS return (b << 16) | a; } - zpl_global zpl_u32 const ZPL__CRC32_TABLE[256] = { + zpl_global zpl_u32 const zpl__crc32_table[256] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, @@ -11499,14 +11503,68 @@ ZPL_END_C_DECLS 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; + zpl_global zpl_u64 const zpl__crc64_table[256] = { + 0x0000000000000000ull, 0x7ad870c830358979ull, 0xf5b0e190606b12f2ull, 0x8f689158505e9b8bull, 0xc038e5739841b68full, 0xbae095bba8743ff6ull, + 0x358804e3f82aa47dull, 0x4f50742bc81f2d04ull, 0xab28ecb46814fe75ull, 0xd1f09c7c5821770cull, 0x5e980d24087fec87ull, 0x24407dec384a65feull, + 0x6b1009c7f05548faull, 0x11c8790fc060c183ull, 0x9ea0e857903e5a08ull, 0xe478989fa00bd371ull, 0x7d08ff3b88be6f81ull, 0x07d08ff3b88be6f8ull, + 0x88b81eabe8d57d73ull, 0xf2606e63d8e0f40aull, 0xbd301a4810ffd90eull, 0xc7e86a8020ca5077ull, 0x4880fbd87094cbfcull, 0x32588b1040a14285ull, + 0xd620138fe0aa91f4ull, 0xacf86347d09f188dull, 0x2390f21f80c18306ull, 0x594882d7b0f40a7full, 0x1618f6fc78eb277bull, 0x6cc0863448deae02ull, + 0xe3a8176c18803589ull, 0x997067a428b5bcf0ull, 0xfa11fe77117cdf02ull, 0x80c98ebf2149567bull, + 0x0fa11fe77117cdf0ull, 0x75796f2f41224489ull, 0x3a291b04893d698dull, 0x40f16bccb908e0f4ull, 0xcf99fa94e9567b7full, 0xb5418a5cd963f206ull, + 0x513912c379682177ull, 0x2be1620b495da80eull, 0xa489f35319033385ull, 0xde51839b2936bafcull, 0x9101f7b0e12997f8ull, 0xebd98778d11c1e81ull, + 0x64b116208142850aull, 0x1e6966e8b1770c73ull, 0x8719014c99c2b083ull, 0xfdc17184a9f739faull, 0x72a9e0dcf9a9a271ull, 0x08719014c99c2b08ull, + 0x4721e43f0183060cull, 0x3df994f731b68f75ull, 0xb29105af61e814feull, 0xc849756751dd9d87ull, 0x2c31edf8f1d64ef6ull, 0x56e99d30c1e3c78full, + 0xd9810c6891bd5c04ull, 0xa3597ca0a188d57dull, 0xec09088b6997f879ull, 0x96d1784359a27100ull, 0x19b9e91b09fcea8bull, 0x636199d339c963f2ull, + 0xdf7adabd7a6e2d6full, 0xa5a2aa754a5ba416ull, 0x2aca3b2d1a053f9dull, 0x50124be52a30b6e4ull, 0x1f423fcee22f9be0ull, 0x659a4f06d21a1299ull, + 0xeaf2de5e82448912ull, 0x902aae96b271006bull, 0x74523609127ad31aull, 0x0e8a46c1224f5a63ull, 0x81e2d7997211c1e8ull, 0xfb3aa75142244891ull, + 0xb46ad37a8a3b6595ull, 0xceb2a3b2ba0eececull, 0x41da32eaea507767ull, 0x3b024222da65fe1eull, 0xa2722586f2d042eeull, 0xd8aa554ec2e5cb97ull, + 0x57c2c41692bb501cull, 0x2d1ab4dea28ed965ull, 0x624ac0f56a91f461ull, 0x1892b03d5aa47d18ull, 0x97fa21650afae693ull, 0xed2251ad3acf6feaull, + 0x095ac9329ac4bc9bull, 0x7382b9faaaf135e2ull, 0xfcea28a2faafae69ull, 0x8632586aca9a2710ull, 0xc9622c4102850a14ull, 0xb3ba5c8932b0836dull, + 0x3cd2cdd162ee18e6ull, 0x460abd1952db919full, 0x256b24ca6b12f26dull, 0x5fb354025b277b14ull, 0xd0dbc55a0b79e09full, 0xaa03b5923b4c69e6ull, + 0xe553c1b9f35344e2ull, 0x9f8bb171c366cd9bull, 0x10e3202993385610ull, 0x6a3b50e1a30ddf69ull, 0x8e43c87e03060c18ull, 0xf49bb8b633338561ull, + 0x7bf329ee636d1eeaull, 0x012b592653589793ull, 0x4e7b2d0d9b47ba97ull, 0x34a35dc5ab7233eeull, 0xbbcbcc9dfb2ca865ull, 0xc113bc55cb19211cull, + 0x5863dbf1e3ac9decull, 0x22bbab39d3991495ull, 0xadd33a6183c78f1eull, 0xd70b4aa9b3f20667ull, 0x985b3e827bed2b63ull, 0xe2834e4a4bd8a21aull, + 0x6debdf121b863991ull, 0x1733afda2bb3b0e8ull, 0xf34b37458bb86399ull, 0x8993478dbb8deae0ull, 0x06fbd6d5ebd3716bull, 0x7c23a61ddbe6f812ull, + 0x3373d23613f9d516ull, 0x49aba2fe23cc5c6full, 0xc6c333a67392c7e4ull, 0xbc1b436e43a74e9dull, 0x95ac9329ac4bc9b5ull, 0xef74e3e19c7e40ccull, + 0x601c72b9cc20db47ull, 0x1ac40271fc15523eull, 0x5594765a340a7f3aull, 0x2f4c0692043ff643ull, 0xa02497ca54616dc8ull, 0xdafce7026454e4b1ull, + 0x3e847f9dc45f37c0ull, 0x445c0f55f46abeb9ull, 0xcb349e0da4342532ull, 0xb1eceec59401ac4bull, 0xfebc9aee5c1e814full, 0x8464ea266c2b0836ull, + 0x0b0c7b7e3c7593bdull, 0x71d40bb60c401ac4ull, 0xe8a46c1224f5a634ull, 0x927c1cda14c02f4dull, 0x1d148d82449eb4c6ull, 0x67ccfd4a74ab3dbfull, + 0x289c8961bcb410bbull, 0x5244f9a98c8199c2ull, 0xdd2c68f1dcdf0249ull, 0xa7f41839ecea8b30ull, 0x438c80a64ce15841ull, 0x3954f06e7cd4d138ull, + 0xb63c61362c8a4ab3ull, 0xcce411fe1cbfc3caull, 0x83b465d5d4a0eeceull, 0xf96c151de49567b7ull, 0x76048445b4cbfc3cull, 0x0cdcf48d84fe7545ull, + 0x6fbd6d5ebd3716b7ull, 0x15651d968d029fceull, 0x9a0d8ccedd5c0445ull, 0xe0d5fc06ed698d3cull, 0xaf85882d2576a038ull, 0xd55df8e515432941ull, + 0x5a3569bd451db2caull, 0x20ed197575283bb3ull, 0xc49581ead523e8c2ull, 0xbe4df122e51661bbull, 0x3125607ab548fa30ull, 0x4bfd10b2857d7349ull, + 0x04ad64994d625e4dull, 0x7e7514517d57d734ull, 0xf11d85092d094cbfull, 0x8bc5f5c11d3cc5c6ull, 0x12b5926535897936ull, 0x686de2ad05bcf04full, + 0xe70573f555e26bc4ull, 0x9ddd033d65d7e2bdull, 0xd28d7716adc8cfb9ull, 0xa85507de9dfd46c0ull, 0x273d9686cda3dd4bull, 0x5de5e64efd965432ull, + 0xb99d7ed15d9d8743ull, 0xc3450e196da80e3aull, 0x4c2d9f413df695b1ull, 0x36f5ef890dc31cc8ull, 0x79a59ba2c5dc31ccull, 0x037deb6af5e9b8b5ull, + 0x8c157a32a5b7233eull, 0xf6cd0afa9582aa47ull, 0x4ad64994d625e4daull, 0x300e395ce6106da3ull, 0xbf66a804b64ef628ull, 0xc5bed8cc867b7f51ull, + 0x8aeeace74e645255ull, 0xf036dc2f7e51db2cull, 0x7f5e4d772e0f40a7ull, 0x05863dbf1e3ac9deull, 0xe1fea520be311aafull, 0x9b26d5e88e0493d6ull, + 0x144e44b0de5a085dull, 0x6e963478ee6f8124ull, 0x21c640532670ac20ull, 0x5b1e309b16452559ull, 0xd476a1c3461bbed2ull, 0xaeaed10b762e37abull, + 0x37deb6af5e9b8b5bull, 0x4d06c6676eae0222ull, 0xc26e573f3ef099a9ull, 0xb8b627f70ec510d0ull, 0xf7e653dcc6da3dd4ull, 0x8d3e2314f6efb4adull, + 0x0256b24ca6b12f26ull, 0x788ec2849684a65full, 0x9cf65a1b368f752eull, 0xe62e2ad306bafc57ull, 0x6946bb8b56e467dcull, 0x139ecb4366d1eea5ull, + 0x5ccebf68aecec3a1ull, 0x2616cfa09efb4ad8ull, 0xa97e5ef8cea5d153ull, 0xd3a62e30fe90582aull, 0xb0c7b7e3c7593bd8ull, 0xca1fc72bf76cb2a1ull, + 0x45775673a732292aull, 0x3faf26bb9707a053ull, 0x70ff52905f188d57ull, 0x0a2722586f2d042eull, 0x854fb3003f739fa5ull, 0xff97c3c80f4616dcull, + 0x1bef5b57af4dc5adull, 0x61372b9f9f784cd4ull, 0xee5fbac7cf26d75full, 0x9487ca0fff135e26ull, 0xdbd7be24370c7322ull, 0xa10fceec0739fa5bull, + 0x2e675fb4576761d0ull, 0x54bf2f7c6752e8a9ull, 0xcdcf48d84fe75459ull, 0xb71738107fd2dd20ull, 0x387fa9482f8c46abull, 0x42a7d9801fb9cfd2ull, + 0x0df7adabd7a6e2d6ull, 0x772fdd63e7936bafull, 0xf8474c3bb7cdf024ull, 0x829f3cf387f8795dull, 0x66e7a46c27f3aa2cull, 0x1c3fd4a417c62355ull, + 0x935745fc4798b8deull, 0xe98f353477ad31a7ull, 0xa6df411fbfb21ca3ull, 0xdc0731d78f8795daull, 0x536fa08fdfd90e51ull, 0x29b7d047efec8728ull, + }; + zpl_u32 zpl_crc32(void const *data, zpl_isize len) { zpl_isize remaining; zpl_u32 result = ~(cast(zpl_u32) 0); zpl_u8 const *c = cast(zpl_u8 const *) data; - for (remaining = len; remaining--; c++) result = (result >> 8) ^ (ZPL__CRC32_TABLE[(result ^ *c) & 0xff]); + for (remaining = len; remaining--; c++) result = (result >> 8) ^ (zpl__crc32_table[(result ^ *c) & 0xff]); return ~result; } + zpl_u64 zpl_crc64(void const *data, zpl_isize len) { + zpl_isize remaining; + zpl_u64 result = (cast(zpl_u64)0); + zpl_u8 const *c = cast(zpl_u8 const *) data; + for (remaining = len; remaining--; c++) result = (result >> 8) ^ (zpl__crc64_table[(result ^ *c) & 0xff]); + return result; + } + zpl_u32 zpl_fnv32(void const *data, zpl_isize len) { zpl_isize i; zpl_u32 h = 0x811c9dc5; @@ -11743,7 +11801,6 @@ ZPL_END_C_DECLS } zpl_u64 zpl_murmur64_seed(void const *data_, zpl_isize len, zpl_u64 seed) { - #if defined(ZPL_ARCH_64_BIT) zpl_u64 const m = 0xc6a4a7935bd1e995ULL; zpl_i32 const r = 47; @@ -11780,65 +11837,6 @@ ZPL_END_C_DECLS h ^= h >> r; return h; - #else - zpl_u64 h; - zpl_u32 const m = 0x5bd1e995; - zpl_i32 const r = 24; - - zpl_u32 h1 = cast(zpl_u32)(seed) ^ cast(zpl_u32)(len); - zpl_u32 h2 = cast(zpl_u32)(seed >> 32); - - zpl_u32 const *data = cast(zpl_u32 const *) data_; - - while (len >= 8) { - zpl_u32 k1, k2; - k1 = *data++; - k1 *= m; - k1 ^= k1 >> r; - k1 *= m; - h1 *= m; - h1 ^= k1; - len -= 4; - - k2 = *data++; - k2 *= m; - k2 ^= k2 >> r; - k2 *= m; - h2 *= m; - h2 ^= k2; - len -= 4; - } - - if (len >= 4) { - zpl_u32 k1 = *data++; - k1 *= m; - k1 ^= k1 >> r; - k1 *= m; - h1 *= m; - h1 ^= k1; - len -= 4; - } - - switch (len) { - case 3: h2 ^= (cast(zpl_u8 const *) data)[2] << 16; - case 2: h2 ^= (cast(zpl_u8 const *) data)[1] << 8; - case 1: h2 ^= (cast(zpl_u8 const *) data)[0] << 0; h2 *= m; - }; - - h1 ^= h2 >> 18; - h1 *= m; - h2 ^= h1 >> 22; - h2 *= m; - h1 ^= h2 >> 17; - h1 *= m; - h2 ^= h1 >> 19; - h2 *= m; - - h = h1; - h = (h << 32) | h2; - - return h; - #endif } ZPL_END_C_DECLS @@ -12466,8 +12464,6 @@ ZPL_END_C_DECLS if ((offset < len) && (pattern[offset] == '?')) { quantifier = ZPL_RE_OP_ONE_OR_MORE_SHORTEST; - if (quantifier == ZPL_RE_OP_ZERO_OR_MORE) - quantifier = ZPL_RE_OP_ZERO_OR_MORE_SHORTEST; offset++; } @@ -14848,7 +14844,6 @@ ZPL_END_C_DECLS ZPL_BEGIN_C_DECLS - static ZPL_ALWAYS_INLINE zpl_b32 zpl__json_is_special_char(char c) { return !!zpl_strchr("<>:/", c); } static ZPL_ALWAYS_INLINE zpl_b32 zpl__json_is_assign_char(char c) { return !!zpl_strchr(":=|", c); } static ZPL_ALWAYS_INLINE zpl_b32 zpl__json_is_delim_char(char c) { return !!zpl_strchr(",|\n", c); }