23 static constexpr auto MAX_COLUMNS = 100u;
24 static constexpr auto MAX_LEVELS = 10u;
25 static constexpr auto MAX_ROWS = 100u;
26 static constexpr auto DEFAULT_DISTANCES_START = 0;
27 static constexpr auto DEFAULT_DISTANCES_END = -1;
28 static constexpr auto DEFAULT_SEED_VALUE = 1'000'000u;
37 m_rows = std::clamp(
rows, 1u, MAX_ROWS);
48 m_columns = std::clamp(
columns, 1u, MAX_COLUMNS);
61 m_levels = std::clamp(
levels, 1u, MAX_LEVELS);
70 m_algo_id = algorithm;
79 m_block_id = block_id;
106 m_distances_start = start_index;
115 m_distances_end = end_index;
133 m_output_filename = filename.empty() ? std::make_optional(
"out.txt") : std::make_optional(filename);
142 m_mask_filename = filename.empty() ? std::make_optional(
"mask.txt") : std::make_optional(filename);
178 configurator&
seed(
const unsigned int s)
noexcept {
return ensure_seed(s); }
182 [[nodiscard]]
unsigned int rows() const noexcept {
return m_rows.value_or(MAX_ROWS); }
186 [[nodiscard]]
unsigned int columns() const noexcept {
return m_columns.value_or(MAX_COLUMNS); }
190 [[nodiscard]]
unsigned int levels() const noexcept {
return m_levels.value_or(MAX_LEVELS); }
194 [[nodiscard]]
algo algo_id() const noexcept {
return m_algo_id.value_or(
static_cast<algo>(0)); }
198 [[nodiscard]] std::string
mask_filename() const noexcept {
return m_mask_filename.value_or(std::string{}); }
202 [[nodiscard]]
int block_ID() const noexcept {
return m_block_id.value_or(0); }
206 [[nodiscard]]
unsigned int seed() const noexcept {
return m_seed.value_or(DEFAULT_SEED_VALUE); }
210 [[nodiscard]]
bool distances() const noexcept {
return m_distances.value_or(
false); }
216 return m_distances_start.value_or(DEFAULT_DISTANCES_START);
221 [[nodiscard]]
int distances_end() const noexcept {
return m_distances_end.value_or(DEFAULT_DISTANCES_END); }
227 return m_output_format_id.value_or(output_format::STDOUT);
230 [[nodiscard]]
bool help() const noexcept {
return m_help.value_or(
false); };
232 [[nodiscard]]
bool version() const noexcept {
return m_version.value_or(
false); };
234 [[nodiscard]]
bool show_steps() const noexcept {
return m_show_steps.value_or(
false); };
242 if (!m_rows.has_value() || !m_columns.has_value() || !m_levels.has_value())
248 if (m_rows.value() > MAX_ROWS || m_columns.value() > MAX_COLUMNS || m_levels.value() > MAX_LEVELS)
254 if (
constexpr auto max_cells = std::numeric_limits<size_t>::max() /
sizeof(
void*);
255 static_cast<size_t>(m_rows.value()) * m_columns.value() * m_levels.value() > max_cells)
265 std::optional<unsigned int> m_rows;
267 std::optional<unsigned int> m_columns;
269 std::optional<unsigned int> m_levels;
271 std::optional<algo> m_algo_id;
273 std::optional<int> m_block_id;
275 std::optional<unsigned int> m_seed;
277 std::optional<bool> m_distances;
279 std::optional<int> m_distances_start;
281 std::optional<int> m_distances_end;
283 std::optional<output_format> m_output_format_id;
285 std::optional<std::string> m_config_file;
287 std::optional<std::string> m_mask_filename;
289 std::optional<std::string> m_output_filename;
291 std::optional<bool> m_help;
293 std::optional<bool> m_version;
295 std::optional<bool> m_show_steps;
algo
Enumeration of maze generation algorithms.
Definition algos.h:19
Configuration class for arguments.
Definition configurator.h:21
unsigned int seed() const noexcept
Get the random seed.
Definition configurator.h:206
unsigned int rows() const noexcept
Get the number of rows.
Definition configurator.h:182
configurator & ensure_distances_start(const int start_index) noexcept
Set the distance start index.
Definition configurator.h:104
configurator & show_steps(bool show_steps) noexcept
Set whether step snapshots should be shown during generation.
Definition configurator.h:167
bool distances() const noexcept
Check if distances are calculated.
Definition configurator.h:210
configurator & ensure_distances(const bool distances) noexcept
Set the distance calculation flag.
Definition configurator.h:95
configurator & ensure_block_id(const int block_id) noexcept
Set the block ID.
Definition configurator.h:77
configurator & set_help(bool help) noexcept
Set the help flag.
Definition configurator.h:149
configurator & ensure_distances_end(const int end_index) noexcept
Set the distance end index.
Definition configurator.h:113
algo algo_id() const noexcept
Get the maze generation algorithm.
Definition configurator.h:194
configurator & ensure_algo_id(const algo algorithm) noexcept
Set the maze generation algorithm.
Definition configurator.h:68
configurator & ensure_seed(const unsigned int seed) noexcept
Set the random seed.
Definition configurator.h:86
bool has_valid_dimensions() const noexcept
Validate all configuration values are within safe limits.
Definition configurator.h:239
int distances_start() const noexcept
Get the distance start index.
Definition configurator.h:214
unsigned int levels() const noexcept
Get the number of levels.
Definition configurator.h:190
configurator & ensure_mask_filename(const std::string &filename) noexcept
Set the mask filename.
Definition configurator.h:140
configurator & ensure_output_format_filename(const std::string &filename) noexcept
Set the output filename.
Definition configurator.h:131
configurator & ensure_output_format_id(const output_format output_format) noexcept
Set the output_format ID.
Definition configurator.h:122
configurator & ensure_levels(const unsigned int levels) noexcept
Set the number of levels.
Definition configurator.h:57
int distances_end() const noexcept
Get the distance end index.
Definition configurator.h:221
unsigned int columns() const noexcept
Get the number of columns.
Definition configurator.h:186
std::string mask_filename() const noexcept
Get the mask filename.
Definition configurator.h:198
configurator & ensure_rows(const unsigned int rows) noexcept
Set the number of rows.
Definition configurator.h:34
configurator & set_version(bool version) noexcept
Set the version flag.
Definition configurator.h:158
int block_ID() const noexcept
Get the block ID.
Definition configurator.h:202
configurator & ensure_columns(const unsigned int columns) noexcept
Set the number of columns.
Definition configurator.h:45
output_format output_format_id() const noexcept
Get the output_format ID.
Definition configurator.h:225
A class that manages distances associated with cells in a grid.
Definition distances.h:22