Mercurial > molko
annotate libmlk-core/mlk/core/util.h @ 646:7e1eb7f6c049 default tip @
misc: remove .clang
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 04 Feb 2024 15:24:37 +0100 |
parents | b826e80c53cd |
children |
rev | line source |
---|---|
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
2 * util.h -- libmlk-core utilities |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
445
773a082f0b91
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
431
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
19 #ifndef MLK_CORE_UTIL_H |
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
20 #define MLK_CORE_UTIL_H |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
22 /** |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
23 * \file mlk/core/util.h |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
24 * \brief libmlk-core utilities |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
25 */ |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
26 |
629
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
27 #include <stddef.h> |
618 | 28 #include <stdint.h> |
29 | |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
30 /** |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
31 * Compute the length of an fixed size array. |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
32 * |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
33 * \param x the fixed size array |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
34 * \return the length |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
35 */ |
474
ca30ff96bbe0
core: util -> mlk_util
David Demelier <markand@malikania.fr>
parents:
462
diff
changeset
|
36 #define MLK_UTIL_SIZE(x) (sizeof ((x)) / sizeof ((x)[0])) |
47
f053a9f38c0e
core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
37 |
629
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
38 /** |
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
39 * Obtain parent container from a member field. |
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
40 */ |
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
41 #define MLK_CONTAINER_OF(ptr, type, member) \ |
636 | 42 ((type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member))) |
629
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
43 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
474
diff
changeset
|
44 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
474
diff
changeset
|
45 extern "C" { |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
474
diff
changeset
|
46 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
47 |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
48 /** |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
49 * Suspend the calling thread for the specific duration. |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
50 * |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
51 * \param duration time to sleep in milliseconds |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
52 */ |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 void |
585 | 54 mlk_util_sleep(unsigned int duration); |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
56 /** |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
57 * Convenient function to create an return a string to a filesystem path using |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
58 * a printf format string. |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
59 * |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
60 * \pre fmt != NULL |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
61 * \param fmt the format string |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
62 * \note The returned string is static thread-local and will be modified on |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
63 * subsequent calls. |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
64 */ |
236
4896bb07a8db
core: add pprintf function
David Demelier <markand@malikania.fr>
parents:
234
diff
changeset
|
65 const char * |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
66 mlk_util_pathf(const char *fmt, ...); |
236
4896bb07a8db
core: add pprintf function
David Demelier <markand@malikania.fr>
parents:
234
diff
changeset
|
67 |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
68 /** |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
69 * Compute a random number between [min-max). |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
70 * |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
71 * \param min the minimum range (included) |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
72 * \param max the maximum range (excluded) |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
73 * \return a random number |
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
74 */ |
185
7103d6574062
core: add nrand function
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
75 unsigned int |
567
90302d95cd33
core: doxygenize util
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
76 mlk_util_nrand(unsigned int min, unsigned int max); |
185
7103d6574062
core: add nrand function
David Demelier <markand@malikania.fr>
parents:
182
diff
changeset
|
77 |
632
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
78 /** |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
79 * Clamp a value between limits. |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
80 * |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
81 * \return v clamped to min or max depending on the current v value |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
82 */ |
618 | 83 intmax_t |
84 mlk_clampi(intmax_t v, intmax_t min, intmax_t max); | |
85 | |
632
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
86 /** |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
87 * Clamp a value between limits. |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
88 * |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
89 * \return v clamped to min or max depending on the current v value |
3d238b43a9aa
core: document clampi/clampu
David Demelier <markand@malikania.fr>
parents:
629
diff
changeset
|
90 */ |
618 | 91 uintmax_t |
92 mlk_clampu(uintmax_t v, uintmax_t min, uintmax_t max); | |
93 | |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
474
diff
changeset
|
94 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
474
diff
changeset
|
95 } |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
474
diff
changeset
|
96 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
97 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
98 #endif /* !MLK_CORE_UTIL_H */ |