StormByte-Config 2.0.0
C++26 configuration-document module of the StormByte suite
 
Loading...
Searching...
No Matches
type.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
46
47#include <string_view>
48
57 enum class Type: char {
58 Bool,
59 Comment,
60 Container,
61 Double,
62 Integer,
63 String,
64 Binary,
65 Value
66 };
67
73 static constexpr std::string_view TypeToString(const Type& t) noexcept {
74 switch(t) {
75 case Type::String: return "String";
76 case Type::Integer: return "Integer";
77 case Type::Double: return "Double";
78 case Type::Comment: return "Comment";
79 case Type::Bool: return "Bool";
80 case Type::Container: return "Container";
81 case Type::Binary: return "Binary";
82 case Type::Value: return "Value";
83 default: return "Unknown";
84 }
85 }
86
92 SingleLineBash = 2,
93 SingleLineC = 5,
94 MultiLineC = 8
95 };
96
102 constexpr STORMBYTE_CONFIG_PUBLIC std::string_view TypeToString(const CommentType& t) noexcept {
103 switch(t) {
104 case CommentType::SingleLineBash: return "Bash like single line comment";
105 case CommentType::SingleLineC: return "C++ like single line comment";
106 case CommentType::MultiLineC: return "C/C++ like multi line comment";
107 default: return "Unknown";
108 }
109 }
110
116 Group,
117 List
118 };
119
125 constexpr STORMBYTE_CONFIG_PUBLIC std::string_view TypeToString(const ContainerType& t) noexcept {
126 switch(t) {
127 case ContainerType::Group: return "Group";
128 case ContainerType::List: return "List";
129 default: return "Unknown";
130 }
131 }
132
140 switch(start) {
141 case '{': return ContainerType::Group;
142 case '[': return ContainerType::List;
143 default: throw Exception("Unknown start character {} for container", start);
144 }
145 }
146
147 struct Integer {};
148 struct Double {};
149 struct Bool {};
150 struct Text {};
151 struct Binary {};
152}
Root exception for Config.
Definition exception.hxx:58
Comment item (#, // or /* *\/).
Definition comment.hxx:60
Holds child items.
Definition container.hxx:62
Named container ({ ... }).
Definition group.hxx:57
Unnamed container ([ ... ]).
Definition list.hxx:57
Scalar configuration item.
Definition value.hxx:59
Configuration items (values, comments, groups, lists).
Definition hook.hxx:50
Type
Node kind in the document tree.
Definition type.hxx:57
@ String
Text leaf (StormByte::String::String).
@ Value
Any leaf (Value node). Not used on the wire.
@ Binary
Binary leaf (StormByte::BinaryData).
constexpr ContainerType TypeFromStartCharacter(const char &start)
Resolves a container type from its opening character.
Definition type.hxx:139
static constexpr std::string_view TypeToString(const Type &t) noexcept
Converts a Type to its string representation.
Definition type.hxx:73
CommentType
Comment syntax used in the text document.
Definition type.hxx:91
@ SingleLineC
// until end of line
@ SingleLineBash
# until end of line
ContainerType
Group ({}) or list ([]).
Definition type.hxx:115
Tag for As<Binary>() → StormByte::BinaryData.
Definition type.hxx:151
Tag for As<Bool>() → bool.
Definition type.hxx:149
Tag for As<Double>() → double (Integer promotes).
Definition type.hxx:148
Tag for As<Integer>() → int.
Definition type.hxx:147
Tag for As<Text>() → StormByte::String::String.
Definition type.hxx:150
#define STORMBYTE_CONFIG_PUBLIC
Definition visibility.h:53