KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
Kisaragi_Lib::SerializableStruct 構造体

SerializableObject内に格納されるインナークラス。 使用者側で直接いじることはないと思いますので、 興味がある場合は見るくらいでいいと思います。 [詳解]

#include <JsonUtility.hpp>

公開型

enum class  ValueType {
  NULLPTR_T , BOOL , INT , FLOAT ,
  STRING , SERIALIZABLE_OBJECT
}
 
using Value
 値を管理する共用体
 

公開メンバ関数

 SerializableStruct ()=delete
 
 SerializableStruct (std::string &_str, std::string _name)
 
 SerializableStruct (bool &_bool, std::string _name)
 
 SerializableStruct (float &_float, std::string _name)
 
 SerializableStruct (int &_int, std::string _name)
 
 SerializableStruct (SerializableObject &_serializableClass, std::string _name)
 
void FormJson (Json _json)
 
void ToJson (std::ostream &os, int indentLevel) const
 

公開変数類

Value value
 
std::string name
 
ValueType type
 

詳解

SerializableObject内に格納されるインナークラス。 使用者側で直接いじることはないと思いますので、 興味がある場合は見るくらいでいいと思います。

から
ver1.0.0 コメント追加

型定義メンバ詳解

◆ Value

初期値:
std::variant
<
std::reference_wrapper<std::nullptr_t>,
std::reference_wrapper<bool>,
std::reference_wrapper<int>,
std::reference_wrapper<float>,
std::reference_wrapper<std::string>,
std::reference_wrapper<SerializableObject>
>

値を管理する共用体

列挙型メンバ詳解

◆ ValueType

列挙値
NULLPTR_T 
BOOL 
INT 
FLOAT 
STRING 
SERIALIZABLE_OBJECT 
32 {
33 NULLPTR_T,
34 BOOL,
35 INT,
36 FLOAT,
37 STRING,
38 SERIALIZABLE_OBJECT,
39
40 //VECTOR,
41 };

構築子と解体子

◆ SerializableStruct() [1/6]

Kisaragi_Lib::SerializableStruct::SerializableStruct ( )
delete

◆ SerializableStruct() [2/6]

Kisaragi_Lib::SerializableStruct::SerializableStruct ( std::string & _str,
std::string _name )
inline
66 : value{ std::ref(_str) }, name{ _name }, type{ ValueType::STRING }
67 {
68
69 }
std::string name
Definition JsonUtility.hpp:60
Value value
Definition JsonUtility.hpp:59
ValueType type
Definition JsonUtility.hpp:61
@ STRING
Definition JsonUtility.hpp:37

◆ SerializableStruct() [3/6]

Kisaragi_Lib::SerializableStruct::SerializableStruct ( bool & _bool,
std::string _name )
inlineexplicit
71 : value{ std::ref(_bool) }, name{ _name }, type{ ValueType::BOOL }
72 {
73
74 }
@ BOOL
Definition JsonUtility.hpp:34

◆ SerializableStruct() [4/6]

Kisaragi_Lib::SerializableStruct::SerializableStruct ( float & _float,
std::string _name )
inlineexplicit
76 : value{ std::ref(_float) }, name{ _name }, type{ ValueType::FLOAT }
77 {
78
79 }
@ FLOAT
Definition JsonUtility.hpp:36

◆ SerializableStruct() [5/6]

Kisaragi_Lib::SerializableStruct::SerializableStruct ( int & _int,
std::string _name )
inlineexplicit
81 : value{ std::ref(_int) }, name{ _name } , type{ ValueType::INT }
82 {
83
84 }
@ INT
Definition JsonUtility.hpp:35

◆ SerializableStruct() [6/6]

Kisaragi_Lib::SerializableStruct::SerializableStruct ( SerializableObject & _serializableClass,
std::string _name )
inlineexplicit
87 : value{ std::ref(_serializableClass) }, name{ _name } , type{ ValueType::SERIALIZABLE_OBJECT }
88 {
89
90 }
@ SERIALIZABLE_OBJECT
Definition JsonUtility.hpp:38

関数詳解

◆ FormJson()

void Kisaragi_Lib::SerializableStruct::FormJson ( Json _json)
6 {
7 switch (type)
8 {
10 // 型に応じた値の取り出し
11 std::get<std::reference_wrapper<int>>(value).get() = _json[name].Get<int>();
12 break;
13
14 case ValueType::BOOL:
15 std::get<std::reference_wrapper<bool>>(value).get() = _json[name].Get<bool>();
16 break;
17
18 //TODO debug
20 if (_json[name].IsType<float>())
21 {
22 std::get<std::reference_wrapper<float>>(value).get() = _json[name].Get<float>();
23 }
24 else if (_json[name].IsType<int>())
25 {
26 std::get<std::reference_wrapper<float>>(value).get() = _json[name].Get<int>();
27 Debug::PrintAssertStatic("float型の代わりとしてint型を読み込みました");
28 }
29 else
30 {
31 Debug::PrintAssertStatic("float型が読み込めませんでした");
32 }
33
34 break;
35
37 std::get<std::reference_wrapper<std::string>>(value).get() = _json[name].Get<std::string>();
38 break;
39
41 // ここは入れ子なので再帰的に処理する必要がある
42 std::get<std::reference_wrapper<SerializableObject>>(value).get().FormJson(_json[name]);
43 break;
44
45 //case ValueType::VECTOR:
46 // // 配列の場合
47 // auto& vecRef = std::get<std::reference_wrapper<std::vector<SerializableStruct>>>(value).get();
48
49 // for (size_t i = 0; i < vecRef.size(); ++i)
50 // {
51 // vecRef[i].FormJson(_json[name][i]); // 再帰的に処理
52 // }
53 // break;
54
55 default:
56 break;
57 }
58 }
static void PrintAssertStatic(const std::string _in)
エラー出力用コンソール出力(文字色しか変わらない)
Definition Debug.cpp:152

◆ ToJson()

void Kisaragi_Lib::SerializableStruct::ToJson ( std::ostream & os,
int indentLevel ) const
60 {
61 os << "\"" << name << "\": ";
62
63 std::visit([&](auto&& val) {
64 using T = std::decay_t<decltype(val)>;
65
66 if constexpr (std::is_same_v<T, std::reference_wrapper<int>>)
67 os << val.get();
68 else if constexpr (std::is_same_v<T, std::reference_wrapper<bool>>)
69 os << (val.get() ? "true" : "false");
70 else if constexpr (std::is_same_v<T, std::reference_wrapper<float>>)
71 os << val.get() << "f";
72 else if constexpr (std::is_same_v<T, std::reference_wrapper<std::string>>)
73 os << "\"" << val.get() << "\"";
74 else if constexpr (std::is_same_v<T, std::reference_wrapper<SerializableObject>>)
75 val.get().ToJson(os, indentLevel);
76 else
77 os << "null";
78 }, value);
79 }

参照元 Kisaragi_Lib::operator<<().

メンバ詳解

◆ value

◆ name

◆ type


この構造体詳解は次のファイルから抽出されました: