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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */