Mercurial > molko
annotate libcore/core/rbuf.h @ 136:30b68089ae70
core: rework actions and a bit of drawables, closes #2492
In the effort of having as less as possible memory allocation in libcore, the
usage of actions and drawable no longer copy the original source parameter to
let user pass a heap allocated variable or a static storage one.
Update predefined drawable and actions to match these new needs.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 13 Oct 2020 09:38:44 +0200 |
parents | 789b23e01f52 |
children | b386d25832c8 |
rev | line source |
---|---|
120
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * rbuf.h -- basic utility for reading input buffers |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef MOLKO_RBUF_H |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define MOLKO_RBUF_H |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 /** |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * \file rbuf.h |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * \brief Basic utility for reading input buffers. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <stdbool.h> |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <stddef.h> |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 /** |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 * \brief Input object to store progression. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 struct rbuf { |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 const char *s; /*!< (RO) Pointer to current character. */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 const char *e; /*!< (RO) Pointer to end of array. */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 }; |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 /** |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 * Open this input buffer. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 * \pre rb != NULL |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * \pre data != NULL |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * \param rb the input object |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 * \param data the data to read |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 * \param datasz the size of buffer |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 void |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 rbuf_open(struct rbuf *rb, const void *data, size_t datasz); |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 /** |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 * Read the next line from the input. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 * This function writes at most outputsz - 1 and is always NULL terminated |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 * unless the function returns false which indicates either end of buffer or |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 * too small output size. |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * Example of use (`some_data` is assumed to be a buffer). |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * \code |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * struct rbuf rb; |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * char line[1024]; |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * rbuf_open(&rb, some_data, sizeof (some_data)); |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * while (rbuf_readline(&rb, line, sizeof (line))) { |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * printf("line contents: >[%s]<\n", line); |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * } |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * \endcode |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 * \pre rb != NULL |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * \pre output != NULL |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * \pre outputsz > 0 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * \param rb the input object |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 * \param output the output buffer |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * \param outputsz the output buffer size |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * \return true if a line was read correctly |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 */ |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 bool |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 rbuf_readline(struct rbuf *rb, char *output, size_t outputsz); |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
b3429b26d60d
core: add rbuf utility, closes #2488 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 #endif /* !MOLKO_RBUF_H */ |