MMgr v1.0.0
Zero-heap memory manager in C11. One borrowed buffer, carved by asserted offset.
Loading...
Searching...
No Matches
praet_iudex.h
Go to the documentation of this file.
1/* MMgr - Copyright (C) 2026 Douglas Quigg (dstroy0) <dquigg123@gmail.com>
2 * SPDX-License-Identifier: AGPL-3.0-or-later OR LicenseRef-Commercial OR LicenseRef-Educational
3 *
4 * Every use falls under AGPL-3.0-or-later unless you hold explicit permission, which is either a
5 * negotiated commercial licensing contract or an educator's license issued to you personally.
6 */
7/**
8 * @file praet_iudex.h
9 * @brief Read after every knob has reported, and the single place a configuration stops the build.
10 * @author dstroy0 (Douglas Quigg) <dquigg123@gmail.com>
11 * @date 2026-09-01
12 *
13 * @note Included last, after praet_praefinitum.h and praet_horologiorum_custos.h have both had their say. Each of them
14 * gives every unset knob a default, a warning naming it, and a flag. This reads the flags.
15 * @note Why the stop is here and not at each knob: an #error halts its translation unit where it
16 * stands. A build missing four knobs would report the first, get it fixed, then report the
17 * second - four rounds to learn four facts that were all knowable on the first. Warning at each
18 * knob and stopping once at the end hands the whole list over together.
19 * @note There is no list in the message below, and there cannot be. The preprocessor has no way to
20 * assemble one. The warnings above are the list, one line each, and this says to go read them.
21 * @warning Skipped entirely where MMGR_ACCEPT_DEFAULTS is defined. The warnings still stand and are
22 * still the report; what the define changes is whether the build continues past it.
23 */
24#ifndef MMGR_PRAET_IUDEX_H
25#define MMGR_PRAET_IUDEX_H
26
29
30#if !defined(MMGR_ACCEPT_DEFAULTS)
31
32#if defined(PRAET_UNSET_CHANNELS) || defined(PRAET_UNSET_SETTLE_MICROS) || defined(PRAET_UNSET_KEEPALIVE_MICROS) || \
33 defined(PRAET_UNSET_RECOVERY) || defined(PRAET_UNSET_CLOCK_HZ) || defined(PRAET_UNSET_CLOCK_SOURCE) || \
34 defined(PRAET_UNSET_CLOCK_CORE)
35#error \
36 "This build did not declare every knob this module reads. Each one that took a library default is named in a warning above this line, with the value it took and what to set it to. Set them, or define MMGR_ACCEPT_DEFAULTS to build on the defaults and keep the warnings as the record of which ones you took."
37#endif
38
39#endif
40
41#endif
Where the microseconds come from: the caller's clock, or one of ours pinned to a core they name,...
Every knob this module reads, what it takes when the caller did not set it, and the warning that says...