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
43
#include <
StormByte/config/exception.hxx
>
44
#include <
StormByte/config/visibility.h
>
45
#include <
StormByte/string/string.hxx
>
46
47
#include <string_view>
48
52
namespace
StormByte::Config::Item
{
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
91
enum class
STORMBYTE_CONFIG_PUBLIC
CommentType
:
char
{
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
115
enum class
STORMBYTE_CONFIG_PUBLIC
ContainerType
:
char
{
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
139
constexpr
STORMBYTE_CONFIG_PUBLIC
ContainerType
TypeFromStartCharacter
(
const
char
& start) {
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
}
StormByte::Config::Exception
Root exception for Config.
Definition
exception.hxx:58
StormByte::Config::Item::Comment
Comment item (#, // or /* *\/).
Definition
comment.hxx:60
StormByte::Config::Item::Container
Holds child items.
Definition
container.hxx:62
StormByte::Config::Item::Group
Named container ({ ... }).
Definition
group.hxx:57
StormByte::Config::Item::List
Unnamed container ([ ... ]).
Definition
list.hxx:57
StormByte::Config::Item::Value
Scalar configuration item.
Definition
value.hxx:59
exception.hxx
StormByte::Config::Item
Configuration items (values, comments, groups, lists).
Definition
hook.hxx:50
StormByte::Config::Item::Type
Type
Node kind in the document tree.
Definition
type.hxx:57
StormByte::Config::Item::Type::Comment
@ Comment
Comment node.
StormByte::Config::Item::Type::Container
@ Container
Group or list.
StormByte::Config::Item::Type::String
@ String
Text leaf (StormByte::String::String).
StormByte::Config::Item::Type::Value
@ Value
Any leaf (Value node). Not used on the wire.
StormByte::Config::Item::Type::Binary
@ Binary
Binary leaf (StormByte::BinaryData).
StormByte::Config::Item::Type::Integer
@ Integer
Integer leaf.
StormByte::Config::Item::Type::Bool
@ Bool
Boolean leaf.
StormByte::Config::Item::Type::Double
@ Double
Double leaf.
StormByte::Config::Item::TypeFromStartCharacter
constexpr ContainerType TypeFromStartCharacter(const char &start)
Resolves a container type from its opening character.
Definition
type.hxx:139
StormByte::Config::Item::TypeToString
static constexpr std::string_view TypeToString(const Type &t) noexcept
Converts a Type to its string representation.
Definition
type.hxx:73
StormByte::Config::Item::CommentType
CommentType
Comment syntax used in the text document.
Definition
type.hxx:91
StormByte::Config::Item::CommentType::SingleLineC
@ SingleLineC
// until end of line
StormByte::Config::Item::CommentType::MultiLineC
@ MultiLineC
/* … *‍/
StormByte::Config::Item::CommentType::SingleLineBash
@ SingleLineBash
# until end of line
StormByte::Config::Item::ContainerType
ContainerType
Group ({}) or list ([]).
Definition
type.hxx:115
StormByte::Config::Item::ContainerType::Group
@ Group
Group of named items.
StormByte::Config::Item::ContainerType::List
@ List
List of unnamed items.
Type
string.hxx
StormByte::Config::Item::Binary
Tag for As<Binary>() → StormByte::BinaryData.
Definition
type.hxx:151
StormByte::Config::Item::Bool
Tag for As<Bool>() → bool.
Definition
type.hxx:149
StormByte::Config::Item::Double
Tag for As<Double>() → double (Integer promotes).
Definition
type.hxx:148
StormByte::Config::Item::Integer
Tag for As<Integer>() → int.
Definition
type.hxx:147
StormByte::Config::Item::Text
Tag for As<Text>() → StormByte::String::String.
Definition
type.hxx:150
visibility.h
STORMBYTE_CONFIG_PUBLIC
#define STORMBYTE_CONFIG_PUBLIC
Definition
visibility.h:53
lib
public
StormByte
config
item
type.hxx
Generated by
1.9.8