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 <string>
12
13#include <magic_enum.hpp>
14
15#include "cmdio_util.h"
16#include "string_util.h"
17
18
19namespace designlab
20{
21
23 kBootModeNum(static_cast<int>(magic_enum::enum_count<BootMode>())),
24 default_mode_(BootMode::kSimulation)
25{
26}
27
28
30{
31 // kSystem にすると、設定にかかわらず必ず表示される.
32 const OutputDetail output_detail = OutputDetail::kSystem;
33
34 CmdIOUtil::Output("Select the mode to run.", output_detail);
35
36 // 起動モードの名前を表示する.
37 for (int i = 0; i < kBootModeNum; i++)
38 {
39 const BootMode boot_mode = static_cast<BootMode>(i);
40
41 const std::string boot_mode_name =
43
44 CmdIOUtil::FormatOutput(output_detail, "{} : {}", i, boot_mode_name);
45 }
46
47
48 const std::string default_mode_name =
50
51 CmdIOUtil::FormatOutput(output_detail, "other : default mode ( {} )",
52 default_mode_name);
53
54
55 CmdIOUtil::OutputNewLine(1, output_detail);
56
57 // 0 から BootMode の数までの整数を入力させる.
58 int default_mode_num = static_cast<int>(default_mode_);
59
60 const int input = CmdIOUtil::InputInt(0, kBootModeNum - 1, default_mode_num);
61
62 // 受け取った値を magic_enum の enum_cast で BootMode に変換する.
63 if (magic_enum::enum_cast<BootMode>(input).has_value())
64 {
65 return magic_enum::enum_cast<BootMode>(input).value();
66 }
67 else
68 {
69 // 入力が不正な場合はデフォルトのモードを返す.
70
71 CmdIOUtil::Output("Input value is invalid. Run default mode.",
72 output_detail);
73
74 return default_mode_;
75 }
76}
77
78} // namespace designlab
BootMode SelectBootMode()
起動モードを選択する. BootModeが int 型をもとにしているかつ, 0から始まることを前提にしているので, うまく動作しない場合は,BootModeの定義を見直すこと.
static void Output(const std::string &str, OutputDetail detail)
コマンドラインに文字を出力する関数. SetOutputLimit() で設定した出力の許可範囲内であれば出力される. 必ず SetOutputLimit() を呼び出してから使うこと.
static int InputInt(int min, int max, int default_num, const std::string &str="Please enter an integer.")
整数を入力させる関数. 出力される文字列は,必ず OutputDetail::kSystem で出力される.
static void OutputNewLine(int num, OutputDetail detail)
コマンドラインで改行をする関数.
static void FormatOutput(OutputDetail detail, const std::format_string< Args... > str, Args &&... args)
コマンドラインに文字を出力する関数. SetOutputLimit() で設定した出力の許可範囲内であれば出力される. 必ず SetOutputLimit() を呼び出してから使うこと.
Definition cmdio_util.h:117
std::string EnumToStringRemoveTopK(const T &enum_value)
enumを文字列に変換する関数. Google C++ coding style だと enumの要素は 先頭にkをつけてキャメルケースで書くことが推奨されている. 例えば,
Definition string_util.h:54
BootMode
起動モードを表す列挙型.
Definition boot_mode.h:19
@ kSimulation
シミュレーションモード.
OutputDetail
コマンドラインに文字を出力する際に,その詳細を指定するための列挙体.
@ kSystem
システムメッセージ,常に出力する.