StormByte-Config 2.0.0
C++26 configuration-document module of the StormByte suite
 
Loading...
Searching...
No Matches
hook.hxx
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024-2026 David C. Manuelda (StormBytePP)
3 *
4 * This file is part of StormByte-Config.
5 *
6 * StormByte-Config original source is dual-licensed:
7 *
8 * 1. GNU Lesser General Public License v3.0 (or later)
9 * You may redistribute and/or modify this file under the terms of the
10 * GNU Lesser General Public License as published by the Free Software
11 * Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * 2. Commercial license
15 * Alternatively, this file may be used under the terms of a commercial
16 * license agreement with the copyright holder
17 * (David C. Manuelda <StormByte@gmail.com>).
18 *
19 * Both licenses apply only to original StormByte-Config source in this
20 * repository. They do not cover other StormByte modules or any third-party
21 * material shipped with this repository (including everything under
22 * thirdparty/, and in particular the bundled StormByte-String tree and
23 * the StormByte Base tree it vendors), which remains under its own license.
24 *
25 * Neither license grants any patent rights. Any patent licenses required
26 * to use this software or third-party components must be obtained separately
27 * from the patent holders.
28 *
29 * StormByte-Config is distributed in the hope that it will be useful,
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 * GNU Lesser General Public License for more details.
33 *
34 * You should have received a copy of the GNU Lesser General Public License
35 * version 3 along with StormByte-Config. If not, see
36 * <https://www.gnu.org/licenses/lgpl-3.0.html>.
37 *
38 * SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-StormByte-Commercial
39 */
40
41#pragma once
42
45
49namespace StormByte::Config {
50 namespace Item {
51 class Group;
52 }
53
61 class STORMBYTE_CONFIG_PUBLIC ReadHook: public Clonable<ReadHook, StormByte::Shared<ReadHook>> {
62 public:
66 ReadHook() noexcept = default;
67
72 ReadHook(const ReadHook& hook) noexcept = default;
73
78 ReadHook(ReadHook&& hook) noexcept = default;
79
85 ReadHook& operator=(const ReadHook& hook) noexcept = default;
86
92 ReadHook& operator=(ReadHook&& hook) noexcept = default;
93
97 ~ReadHook() noexcept override;
98
103 PointerType Clone() const override = 0;
104
109 PointerType Move() override = 0;
110
115 virtual void operator()(Item::Group& root) = 0;
116 };
117
125 public:
129 FailureHook() noexcept = default;
130
135 FailureHook(const FailureHook& hook) noexcept = default;
136
141 FailureHook(FailureHook&& hook) noexcept = default;
142
148 FailureHook& operator=(const FailureHook& hook) noexcept = default;
149
155 FailureHook& operator=(FailureHook&& hook) noexcept = default;
156
160 ~FailureHook() noexcept override;
161
166 PointerType Clone() const override = 0;
167
172 PointerType Move() override = 0;
173
179 virtual bool operator()(const Item::Group& root) = 0;
180 };
181
185 using ReadHookFunction = void (*)(Item::Group&);
186
190 using FailureHookFunction = bool (*)(const Item::Group&);
191
198
205}
Stateful hook run when text parse fails.
Definition hook.hxx:124
FailureHook() noexcept=default
Constructor.
Named container ({ ... }).
Definition group.hxx:57
Stateful hook run before/after a successful text read.
Definition hook.hxx:61
ReadHook() noexcept=default
Constructor.
All the classes for item configuration.
Config module of the StormByte suite.
Definition alias.hxx:50
void(*)(Item::Group &) ReadHookFunction
Function pointer for a stateless read hook.
Definition hook.hxx:185
bool(*)(const Item::Group &) FailureHookFunction
Function pointer for a stateless failure hook.
Definition hook.hxx:190
#define STORMBYTE_CONFIG_PUBLIC
Definition visibility.h:53