zeichensystem
1c7a620ae9
Add README and LICENSE
2025-12-23 14:22:50 +01:00
zeichensystem
2f50db1858
Fix more GCC warnings
2025-12-21 19:51:42 +01:00
zeichensystem
a964466c8b
Fix GCC errors
2025-12-21 18:17:22 +01:00
zeichensystem
45f07986c3
Add string functions
2025-12-21 17:30:13 +01:00
jun
ae83ee66e1
Make guf_utf8_char 4 bytes instead of 5
...
(Null-termination was superfluous here.)
2025-05-25 16:04:26 +02:00
jun
c54fc75221
Use least vs fast int types
2025-05-19 09:50:05 +02:00
jun
2355feaa70
Use portable guf_math_ckdint functions in guf_rand
2025-05-19 00:48:38 +02:00
jun
096b83638b
Fix guf_id_pool integer portability
2025-05-19 00:42:27 +02:00
jun
4217ef6e0b
Fix guf_str uninit
2025-05-19 00:12:27 +02:00
jun
57f0e47efc
Refactor to use portable minimum-width integers.
...
The signed and unsigned fixed-width integers (int32_t, uint32_t etc.) are optional
in C99 (and above). Use the non-optional minimum-width integers (int_fast32_t, uint_fast32_t and int_least32_t, uint_least32_t etc.) instead.
To simulate unsigned wrap-around, use the GUF_UWRAP macros in guf_common.h
cf. https://en.cppreference.com/w/c/types/integer (last-retrieved: 2025-05-18)
2025-05-18 22:03:03 +02:00
jun
7ec2af0c33
Add unsigned integer wrapping functions
2025-05-16 13:44:27 +02:00
jun
8b78803ad8
Add more dbuf_str tests
2025-05-16 10:12:04 +02:00
jun
614a9716cc
Fix failed assertion in guf_str_copy
...
An assertion GUF_ASSERT(str_is_valid(dst)) failed in guf_str_copy when it called guf_str_cstr(dst)
since guf_str_cstr assumes an already valid string, which was not the case when src was a short string.
Therefore, we get the dst's c_str now without calling guf_str_cstr(dst)
(Found by writing DbufStrTest.)
2025-05-15 20:53:50 +02:00
jun
7585848ac9
Prevent more potential int promotion bugs
2025-05-15 13:24:29 +02:00
jun
9b64b22806
Make signed guf_wrapping_mul more general
...
Don't fail on mod == 0 (in weird cases where the given UNSIGNED_TYPE_MAX == SIGNED_TYPE_MAX)
but
res = mod > 0 ? (1u * res % mod) : res;
2025-05-15 09:21:30 +02:00
jun
466982ffcb
Use better terminology for overflow and integer 'underflow'
2025-05-15 09:11:31 +02:00
jun
ec074d5753
Fix potential int-promotion bugs in ckdint
...
Expressions like
(uin16_t)a * (uint16_t)b * (uint16_t)c
might be promoted to (signed) int (in that example, on platforms where sizeof(int) > sizeof(uint16_t)),
and therefore lead to undefined behaviour on overflow.
The above expression can be fixed as
1u * (uint16_t)a * (uint16_t)b * (uint16_t)c
(The 1u makes sure a, b, and c would be promoted to unsigned int (instead of int) on platforms where sizeof(int) > sizeof(uint16_t))
cf. https://stackoverflow.com/questions/27001604/32-bit-unsigned-multiply-on-64-bit-causing-undefined-behavior
2025-05-15 08:46:54 +02:00
jun
b99434a611
Change C/CXX flags
2025-05-14 18:07:41 +02:00
jun
562dcc532d
Refactor test
2025-05-14 17:37:19 +02:00
jun
776c4a8899
Add static/non-static option for guf_alloc_libc.h
2025-05-14 17:31:24 +02:00
jun
894d9e8fc4
Add name to alloc_tracker
2025-05-14 17:08:15 +02:00
jun
37f9011166
Add guf_alloc_tracker
2025-05-14 14:47:20 +02:00
jun
6ffb79f7a0
Fix implementation defined behaviour in guf_wrapping_mul
2025-05-14 08:51:41 +02:00
jun
1dba7661e6
Add math_ckdint tests
2025-05-13 21:14:20 +02:00
jun
c4f3616b23
Refactor tests
2025-05-13 17:36:08 +02:00
jun
6091eac820
Add guf_math_ckdint IMPL_STATIC etc.
2025-05-13 14:56:21 +02:00
jun
873cdf20b1
Add checked mul arithmetic
2025-05-13 12:45:17 +02:00
jun
9c417d2aa1
Add checked arithmetic
2025-05-11 08:55:03 +02:00
jun
c4b68d5ad2
Add guf_tok test
2025-05-09 15:43:52 +02:00
jun
864bd70ece
Add more guf_str tests
2025-05-08 20:38:25 +02:00
jun
1013616b2d
Re-implement guf_str tokeniser
2025-05-02 21:54:39 +02:00
jun
c6b0aa8d89
Add guf_str hash functions
2025-04-24 02:55:39 +02:00
jun
e98dc3b91e
Fix guf_str bugs and add tests
2025-04-24 01:43:24 +02:00
jun
0910ee4bd8
Minor guf_id_pool changes
2025-04-09 06:27:35 +02:00
jun
f3e184da73
Fix guf_dict_init_with_capacity kv_idx_cap calculation
2025-03-29 17:32:13 +01:00
jun
ae7814fe7c
Comment guf_rand
2025-03-29 16:16:06 +01:00
jun
d062784425
Add separate 32/64 bit versions to guf_rand
2025-03-29 01:55:32 +01:00
jun
05f995e855
Add guf_rand_splitmix32
2025-03-28 22:09:15 +01:00
jun
461006746e
Add guf_str_substr
2025-03-28 20:26:43 +01:00
jun
9e0cd79ca0
Add guf_dict_shrink_capacity
2025-03-28 18:32:07 +01:00
jun
3ff4cd7572
Add more dict functions
2025-03-21 18:57:22 +01:00
jun
3ee07078f0
Add comments
2025-03-21 00:51:29 +01:00
jun
7630ecfdcf
Change directory structure
2025-03-21 00:22:34 +01:00
jun
275f46226d
Add more guf_str functions
2025-03-20 23:30:45 +01:00
jun
21d1b04e6b
Add changeable load factor
2025-03-20 20:29:21 +01:00
jun
534ff261ca
Add move- and copy ctors to dict and guf_str
2025-03-20 15:29:18 +01:00
jun
c039e24996
Use SIZE_MAX instead of SIZE_T_MAX
2025-03-19 23:03:10 +01:00
jun
29014f4c52
Fix dict asserts
2025-03-19 19:16:31 +01:00
jun
48b366d8e9
Fix warnings in release
2025-03-19 18:29:52 +01:00
jun
7e1bbc769e
Replace puts with fputs in guf_err_to_str
2025-03-19 18:14:06 +01:00
jun
1e534731bb
Pass key_hash to guf_dict_find_idx to avoid re-computation
2025-03-19 17:03:12 +01:00
jun
b01e087c85
Fix GUF_DICT_64_BIT_IDX and guf_dict_max_capacity()
2025-03-19 16:16:41 +01:00
jun
6a7bd2bd97
Use single u32/u64 as GUF_DICT_KV_META_T instead of two
2025-03-19 15:23:32 +01:00
jun
e535d39e3d
Fix allocation overflow for guf_dbuf and guf_dict
...
(Implement GUF_ALLOC_MAX_BYTES and GUF_ALLOC_MAX_CAPACITY).
2025-03-18 13:43:36 +01:00
jun
cc0413116d
Improve guf_id_pool
2025-03-17 23:08:30 +01:00
jun
ad884ee1e9
Implement guf_str
2025-03-17 21:17:07 +01:00
jun
9ddea4bb07
Change short-string approach to use 32 instead of 40 bytes
2025-03-11 12:24:44 +01:00
jun
c860a6ccfe
Add 3x3 matrix inversion
2025-03-08 11:25:57 +01:00
jun
ae104919e0
Change linalg mat_inverse.
...
Still not sure whether it's better to calculate
rref[pivot_row][col] * (rref[row][pivot_col] / pivot_val) (option 1)
vs.
rref[pivot_row][col] * rref[row][pivot_col] / pivot_val (option 2)
(i.e. a * b / c vs. "a * (b/c))
in terms of floating point error.
But I think option 1 (current commit) is better, since the scale factor
(rref[row][pivot_col] / pivot_val) is always <= 1 here (I think).
2025-03-07 21:24:53 +01:00
jun
dac1d159b1
Fix linalg bugs
2025-03-07 16:06:45 +01:00
jun
9096a4f9c9
Add guf_nearly_zero/one
2025-03-07 13:42:28 +01:00
jun
7b433cd776
Add matrix inversion
2025-03-07 10:58:08 +01:00
jun
364dd603cf
Fix guf_dict size types
2025-03-06 13:51:32 +01:00
jun
d057d76334
Rename GUF_STATIC_BUF_SIZE
2025-03-06 12:02:18 +01:00
jun
e489dd694b
Add quaternion operations
2025-03-06 11:52:24 +01:00
jun
fc8118c182
Add linear algebra functions
2025-03-04 12:30:02 +01:00
jun
24bc8d5a15
Add guf_str_view functions
2025-03-04 08:18:35 +01:00
jun
301477f5c6
Add GUF_CSTR_TO_VIEW_CPP
2025-03-04 08:01:41 +01:00
jun
9d62df6a83
Add more dict tests
2025-03-04 06:52:42 +01:00
jun
8e6ffcdc70
Add dict_erase tests
2025-03-03 16:14:13 +01:00
jun
a41ff868f2
Fix guf_dict probing
2025-03-03 11:28:40 +01:00
jun
4d97725bba
Fix guf_dict growth bug
2025-03-02 21:41:30 +01:00
jun
cd1c1cd5db
Refactor
2025-03-02 18:25:54 +01:00
jun
8b02eff3b7
Make preserved_delims work (in guf_str_next_tok)
2025-02-27 13:02:28 +01:00
jun
217622d816
Add tokeniser
2025-02-27 10:21:21 +01:00
jun
d450cd8a45
Add utf-8 handling
2025-02-27 07:12:43 +01:00
jun
60e2849b01
Work on utf-8
2025-02-26 03:57:04 +01:00
jun
7a990c810e
Add more tests
2025-02-25 15:12:38 +01:00
jun
6abe12c4c1
Improve tests
2025-02-25 14:01:20 +01:00
jun
c1e125dfcb
Add C++ tests
2025-02-24 00:01:48 +01:00
jun
4c35d180e8
Improve iterator functions
2025-02-23 13:36:09 +01:00
jun
1f16b0e849
Fix dbuf iterator begin for dbuf.size == 0
2025-02-23 09:45:29 +01:00
jun
13abedd2ad
Implement guf_dict
2025-02-23 09:18:50 +01:00
jun
81fc19aa85
Work on guf_dict
2025-02-19 08:18:18 +01:00
jun
22ebd8aa05
Add guf_rand with 32-bit operations (using xoshiro128** 1.1)
2025-02-18 20:06:59 +01:00
jun
f911933588
Fix overflow in guf_rand32range_i32 and guf_randrange_i64
2025-02-15 18:04:53 +01:00
jun
500fd47986
Add guf_rand32
2025-02-15 04:36:58 +01:00
jun
6b222eafc1
Add guf_rand
2025-02-15 03:00:15 +01:00
jun
fd58daa8b5
Change iterator
2025-02-01 13:31:15 +01:00
jun
df9d1c9c10
Add iter index functions
2025-01-30 16:10:10 +01:00
jun
67b5759e03
Change sort function name
2025-01-30 14:07:08 +01:00
jun
8c324c00f7
Major refactor
2025-01-30 13:29:14 +01:00
jun
c9b18a220e
Rewrite dbuf
2025-01-27 10:06:54 +01:00
jun
be2daf72fd
Add better error handling
2025-01-08 23:32:55 +01:00
jun
e668be2612
Add integer functions
2025-01-07 11:40:58 +01:00
jun
ad97de47a6
Add dbuf_sort
2025-01-05 03:48:35 +01:00
jun
73eb83484a
Add cmp_void operators.
2025-01-05 02:36:36 +01:00
jun
9e0da64cb4
Use macro templates instead of void pointers
2025-01-04 19:47:15 +01:00