GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
boot_mode_selector.cpp
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
9
10#include <format>
11#include <magic_enum.hpp>
12#include <string>
13
14#include "cmdio_util.h"
15#include "string_util.h"
16
17namespace designlab {
18
20 : kBootModeNum(static_cast<int>(magic_enum::enum_count<BootMode>())),
21 default_mode_(BootMode::kSimulation) {}
22
24 // kSystem にすると、設定にかかわらず必ず表示される.
25 const OutputDetail output_detail = OutputDetail::kSystem;
26
27 cmdio::Output("Select the mode to run.", output_detail);
28
29 // 起動モードの名前を表示する.
30 for (int i = 0; i < kBootModeNum; i++) {
31 const BootMode boot_mode = static_cast<BootMode>(i);
32
33 const std::string boot_mode_name =
35
36 cmdio::OutputF(output_detail, "{} : {}", i, boot_mode_name);
37 }
38
39 const std::string default_mode_name =
41
42 cmdio::OutputF(output_detail, "other : default mode ( {} )",
43 default_mode_name);
44
45 cmdio::OutputNewLine(1, output_detail);
46
47 // 0 から BootMode の数までの整数を入力させる.
48 int default_mode_num = static_cast<int>(default_mode_);
49
50 const int input = cmdio::InputInt(0, kBootModeNum - 1, default_mode_num);
51
52 // 受け取った値を magic_enum の enum_cast で BootMode に変換する.
53 if (magic_enum::enum_cast<BootMode>(input).has_value()) {
54 return magic_enum::enum_cast<BootMode>(input).value();
55 } else {
56 // 入力が不正な場合はデフォルトのモードを返す.
57
58 cmdio::Output("Input value is invalid. Run default mode.", output_detail);
59
60 return default_mode_;
61 }
62}
63
64} // namespace designlab
BootMode SelectBootMode()
起動モードを選択する. BootModeが int 型をもとにしているかつ, 0から始まることを前提にしているので, うまく動作しない場合は,BootModeの定義を見直すこと.
void OutputF(OutputDetail detail, const std::format_string< Args... > str, Args &&... args)
コマンドラインに文字を出力する関数, format した文字列を出力する. SetOutputLimit() で設定した出力の許可範囲内であれば出力される.
Definition cmdio_util.h:91
int InputInt(int min, int max, int default_num, const std::string &str="Please enter an integer.")
整数を入力させる関数. 出力される文字列は, 必ず OutputDetail::kSystem で出力される.
void OutputNewLine(int num, OutputDetail detail)
コマンドラインで改行をする関数.
void Output(const std::string &str, OutputDetail detail)
コマンドラインに文字を出力する関数. SetOutputLimit 関数で設定した出力の許可範囲内であれば出力される.
std::string EnumToStringRemoveTopK(const T &enum_value)
enumを文字列に変換する関数. Google C++ coding style だと enumの要素は 先頭にkをつけてキャメルケースで書くことが推奨されている....
Definition string_util.h:52
BootMode
起動モードを表す列挙型.
Definition boot_mode.h:16
@ kSimulation
シミュレーションモード.
OutputDetail
コマンドラインに文字を出力する際に,その詳細を指定するための列挙体.
@ kSystem
システムメッセージ,常に出力する.