IceShard 1
A personal game engine project, with development focused on 2D/2.5D games.
Loading...
Searching...
No Matches
params.hxx
Go to the documentation of this file.
1
3
4#pragma once
5#include <ice/array.hxx>
7#include <ice/path_utils.hxx>
8
9namespace ice
10{
11
13 enum class ParamFlags : ice::u32
14 {
15 None = 0x00'00,
16 IsRequired = 0x00'01,
17
18 AllowExtraArgs = 0x00'02,
19 NoExtraArgs = 0x00'04,
20
21 TakeFirst = 0x01'00,
22 TakeLast = 0x02'00,
23 TakeAll = 0x04'00,
24
25 ValidateFile = 0x10'00,
28
33 };
34
67
68 [[nodiscard]]
71 ice::String name,
72 ice::String version,
73 ice::String description
74 ) noexcept -> ice::Params;
75
76 [[nodiscard]]
77 auto params_process(ice::Params& params, int argc, char const* const* argv) noexcept -> ice::i32;
78
79 template<typename T>
80 bool params_define(ice::Params& params, ice::ParamDefinition const& definition, T& out_value) noexcept = delete;
81
82 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, bool& out_value) noexcept;
83 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, char& out_value) noexcept;
84 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::f32& out_value) noexcept;
85 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::f64& out_value) noexcept;
86 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::u8& out_value) noexcept;
87 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::u16& out_value) noexcept;
88 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::u32& out_value) noexcept;
89 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::u64& out_value) noexcept;
90 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::i8& out_value) noexcept;
91 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::i16& out_value) noexcept;
92 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::i32& out_value) noexcept;
93 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::i64& out_value) noexcept;
94 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::String& out_value) noexcept;
95 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::HeapString<>& out_value) noexcept;
96 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::Path& out_value) noexcept;
97 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::HeapPath& out_value) noexcept;
98
99 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::Array<ice::String>& out_values) noexcept;
100 template<> bool params_define(ice::Params& params, ice::ParamDefinition const& definition, ice::Array<ice::HeapString<>>& out_values) noexcept;
101
103 ice::Params& params,
104 ice::ParamDefinition const& definition,
105 void* userdata,
107 ) noexcept;
108
109 void params_register_globals(ice::Params& params) noexcept;
110
111
114 {
117
118 ParamInstanceBase(ice::String category, ice::String name, ice::String description = {}) noexcept;
120
121 virtual bool on_register(ice::Params& params) noexcept = 0;
122 };
123
125 template<typename T> requires(std::is_trivial_v<T>)
126 class ParamInstance final : public ice::ParamInstanceBase
127 {
128 public:
130
131 bool on_register(ice::Params& params) noexcept override
132 {
133 return params_define(params, definition, value);
134 }
135
136 inline operator T() const noexcept { return value; }
137
138 T value{};
139 };
140
142 template<typename T> requires ice::concepts::ParamCustomType<T>
144 {
145 public:
147
148 static bool param_parse_results_wrapper(void* ud, ice::Span<ice::String const> results) noexcept
149 {
150 return T::param_parse_results(*reinterpret_cast<T*>(ud), results);
151 }
152
153 bool on_register(ice::Params& params) noexcept override
154 {
156 }
157
158 inline operator T() const noexcept { return value; }
159
160 T value{};
161 };
162
163} // namespace ice
Class for global defined parameter instances of custom parameter types.
Definition params.hxx:144
static bool param_parse_results_wrapper(void *ud, ice::Span< ice::String const > results) noexcept
Definition params.hxx:148
bool on_register(ice::Params &params) noexcept override
Definition params.hxx:153
T value
Definition params.hxx:160
Class for global defined parameter instances of simple native types.
Definition params.hxx:127
ParamInstanceBase(ice::String category, ice::String name, ice::String description={}) noexcept
T value
Definition params.hxx:138
bool on_register(ice::Params &params) noexcept override
Definition params.hxx:131
Definition params_types.hxx:24
arr< 2, i32 > arr2i
Definition array.hxx:186
SPDX-License-Identifier: MIT.
Definition array.hxx:12
bool params_define_custom(ice::Params &params, ice::ParamDefinition const &definition, void *userdata, ice::ParamsCustomCallback callback) noexcept
ice::BasicString< char > String
Definition string.hxx:82
@ None
Definition log_severity.hxx:21
@ All
Definition log_severity.hxx:22
std::int8_t i8
Definition types.hxx:19
ParamFlags
Additional flags altering command line parameter behaviors.
Definition params.hxx:14
@ IsRequired
Definition params.hxx:16
@ ValidateDirectory
Definition params.hxx:26
@ TakeAll
Definition params.hxx:23
@ TakeFirst
Definition params.hxx:21
@ None
Definition params.hxx:15
@ TakeLast
Definition params.hxx:22
@ ValidateFile
Definition params.hxx:25
@ ValidatePath
Definition params.hxx:27
@ AllowExtraArgs
Definition params.hxx:18
@ NoExtraArgs
Definition params.hxx:19
auto alloc(ice::usize size) noexcept -> ice::AllocResult
std::uint64_t u64
Definition types.hxx:27
std::int32_t i32
Definition types.hxx:21
constexpr ice::i32 const i32_max
Definition constants.hxx:33
auto params_process(ice::Params &params, int argc, char const *const *argv) noexcept -> ice::i32
ice::BasicPath< char > Path
Definition path_utils.hxx:170
double f64
Definition types.hxx:17
std::uint16_t u16
Definition types.hxx:25
auto create_params(ice::Allocator &alloc, ice::String name, ice::String version, ice::String description) noexcept -> ice::Params
bool params_define(ice::Params &params, ice::ParamDefinition const &definition, T &out_value) noexcept=delete
std::int64_t i64
Definition types.hxx:22
std::uint32_t u32
Definition types.hxx:26
ice::AllocatorBase< ice::build::is_debug||ice::build::is_develop > Allocator
Definition mem_types.hxx:25
ice::UniquePtr< ParamsInternal > const Params
Definition params_types.hxx:17
float f32
Definition types.hxx:16
std::int16_t i16
Definition types.hxx:20
ice::BasicHeapPath< char > HeapPath
Definition path_utils.hxx:171
std::uint8_t u8
Definition types.hxx:24
bool(*)(void *userdata, ice::Span< ice::String const > results) noexcept ParamsCustomCallback
Definition params_types.hxx:18
void params_register_globals(ice::Params &params) noexcept
A simple container storing items in continuous memory.
Definition array.hxx:24
Definition heap_string.hxx:15
Basic information for each command line parameter.
Definition params.hxx:37
ice::String type_name
Special name for the parameter accepted type hint. Defaults to parameter native type,...
Definition params.hxx:50
ice::String description
The description shown in the '–help' output.
Definition params.hxx:44
ice::i32 min
Minimum number of arguments required to be considered valid usage.
Definition params.hxx:54
ice::String name
Name(s) for the parameter to be accessible through.
Definition params.hxx:41
ice::i32 max
Maximum number of arguments required to be considered valid usage.
Definition params.hxx:58
ice::ParamFlags flags
Flags additionally altering parsing behavior of the parameter.
Definition params.hxx:65
ice::arr2i typesize
The number of arguments expected fot this type size.
Definition params.hxx:62
ice::String group
A group this parameter will be shown part in the '–help' output.
Definition params.hxx:47
Base class for global defined parameter instances.
Definition params.hxx:114
ParamInstanceBase(ice::String category, ice::String name, ice::String description={}) noexcept
ice::ParamDefinition const definition
Definition params.hxx:116
virtual bool on_register(ice::Params &params) noexcept=0
ice::ParamInstanceBase *const _next
Definition params.hxx:115
ParamInstanceBase(ice::ParamDefinition const &definition) noexcept
A view into an array of objects laid out in contiguous memory.
Definition span.hxx:17