GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
クラス | 名前空間 | マクロ定義 | 関数
toml_serialize_macro.h ファイル
#include <iostream>
#include <map>
#include <sstream>
#include <string>
#include <vector>
#include <magic_enum.hpp>
#include "strconv2.h"
#include "implicit_metafunction_for_toml11.h"
#include "math_euler.h"
#include "math_quaternion.h"
#include "math_vector3.h"
#include "toml11_define.h"

[ソースコード]

クラス

struct  designlab::toml_func::Toml11Description
 tomlファイルに追加する変数の説明を追加するための構造体. [詳解]
 
struct  designlab::toml_func::GetTomlValueImpl< T, typename std::enable_if< impl::is_toml11_available_type< T >::value > ::type >
 tomlファイルから値を取得するための関数を 特殊化するために暗黙的に呼ばれる構造体. [詳解]
 
struct  designlab::toml_func::GetTomlValueImpl< T, typename std::enable_if<!impl::is_toml11_available_type< T >::value &&std::is_enum< T >::value >::type >
 プライマリ テンプレートの特殊化 : enum 型 [詳解]
 
struct  designlab::toml_func::GetTomlValueImpl< T, typename std::enable_if<!impl::is_toml11_available_type< T >::value &&impl::has_input_operator< T >::value >::type >
 プライマリ テンプレートの特殊化 : is_vector3 型と is_euler_xyz 型 [詳解]
 
struct  designlab::toml_func::GetTomlValueImpl< T, typename std::enable_if<!impl::is_toml11_available_type< T >::value &&impl::is_vector_of_has_input_operator< T >::value >::type >
 

名前空間

namespace  designlab::toml_func
 tomlファイルのシリアライズ/デシリアライズを行うための関数群.
 
namespace  designlab
 

マクロ定義

#define DESIGNLAB_SUB_MACRO_FIND_MEMBER_VARIABLE_FROM_VALUE(VAR_NAME)
 DESIGNLAB_DEFINE_CONVERSION_NON_INTRUSIVEの補助マクロ. 他のファイルから呼び出さないこと.
tomlファイルからクラスのメンバ変数を取得する.
 
#define DESIGNLAB_SUB_MACRO_ASSIGN_MEMBER_VARIABLE_TO_VALUE(VAR)
 DESIGNLAB_DEFINE_CONVERSION_NON_INTRUSIVEの補助マクロ. 他のファイルから呼び出さないこと.
クラスのメンバ変数を tomlファイルに追加する.
 
#define DESIGNLAB_SUB_MACRO_ADD_COMMENT(VN)
 DESIGNLAB_DEFINE_CONVERSION_NON_INTRUSIVEの補助マクロ. 他のファイルから呼び出さないこと.
tomlファイルの要素にクラスの説明を追加する. もし,説明の用意がなければ説明を追加しない.
 
#define DESIGNLAB_TOML11_DESCRIPTION_CLASS(CLASS)   struct CLASS##Description final
 tomlファイルに説明を追加するためのクラスの宣言を行うためのマクロ.
 
#define DESIGNLAB_TOML11_FILE_NO_DESCRIPTION()   const ::std::vector<::std::string> file_description_vec{};
 tomlファイルにファイルの説明を追加しないことを示す文字列.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
 
#define DESIGNLAB_TOML11_FILE_ADD_DESCRIPTION(DESCRIPTION)   const ::std::vector<::std::string> file_description_vec{sjis_to_utf8(DESCRIPTION)};
 tomlファイルにファイルの説明を追加するためのマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
 
#define DESIGNLAB_TOML11_FILE_ADD_DESCRIPTION_MULTI_LINE(DESCRIPTION_VEC)
 tomlファイルにファイルの説明を追加するためのマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
 
#define DESIGNLAB_TOML11_TABLE_ADD_DESCRIPTION(...)
 tomlファイルにテーブルの説明を追加するためのマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
 
#define DESIGNLAB_TOML11_TABLE_NO_DESCRIPTION()   const std::vector<std::string> table_name_description_vec = {};
 tomlファイルに追加するテーブルにコメントを追加しないことを示すマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
 
#define DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(VARIABLE, TABLE, DESCRIPTION)
 tomlファイルに変数とファイルの説明を追加するためのマクロ.
 
#define DESIGNLAB_TOML11_VARIABLE_NO_DESCRIPTION(VARIABLE, TABLE)   const ::designlab::toml_func::Toml11Description VARIABLE{TABLE, ""}
 ファイルの説明を追加したくない場合には,このマクロで変数を追加する.
 
#define DESIGNLAB_TOML11_NO_TABLE   ::designlab::toml_func::Toml11Description::kNoTable
 tomlファイルに追加する変数をテーブルに追加しないことを示すためのマクロ.
 
#define DESIGNLAB_TOML11_SERIALIZE(NAME, ...)
 tomlファイルのシリアライズ/デシリアライズを行うためのマクロ.
TOML11_DEFINE_CONVERSION_NON_INTRUSIVEをラッパしたもの.
もともとのほうでは enum型を取り扱うことができなかったが, このマクロでは取り扱うことができる.
また,クラスの説明を追加することができる.
注意点として,このクラスを使用する場合は, 必ずDESIGNLAB_TOML11_DESCRIPTION_CLASSを用意する必要がある.
 

関数

std::vector< std::string > designlab::toml_func::sjis_to_utf8_vec (const std::vector< std::string > &str_vec)
 文字列のベクターをShift-jisからUTF-8に変換する.
 
template<typename T >
std::enable_if< impl::is_toml11_available_type< T >::value >::type designlab::toml_func::SetTomlValue (::toml::basic_value< toml::preserve_comments, std::map > *v, const std::string &str, const T &value)
 tomlファイルに値を追加するための関数.
enum 型と vector3 型と euler_xyz 型以外の型に対応している.
 
template<typename T >
std::enable_if<!impl::is_toml11_available_type< T >::value &&std::is_enum< T >::value >::type designlab::toml_func::SetTomlValue (::toml::basic_value< toml::preserve_comments, std::map > *v, const std::string &str, const T &value)
 tomlファイルに値を追加するための関数.
enum 型に対応している.値を magic_enum で文字列に変換してから追加する.
 
template<typename T >
std::enable_if<!impl::is_toml11_available_type< T >::value &&impl::has_output_operator< T >::value >::type designlab::toml_func::SetTomlValue (::toml::basic_value< toml::preserve_comments, std::map > *v, const std::string &str, const T &value)
 tomlファイルに値を追加するための関数.
出力ストリームを実装している型に対応している. 値をストリームを用いて文字列に変換してから追加する.
 
template<typename T >
std::enable_if<!impl::is_toml11_available_type< T >::value &&impl::is_vector_of_has_output_operator< T >::value >::type designlab::toml_func::SetTomlValue (::toml::basic_value< toml::preserve_comments, std::map > *v, const std::string &str, const T &value)
 
template<typename T >
designlab::toml_func::GetTomlValue (::toml::basic_value< toml::preserve_comments, std::map > v, const std::string &var_str)
 ユーザーが直接呼ぶ関数. GetTomlValueImpl を利用してテンプレートの型を解決し, それに応じたGet関数を呼び出す.
 

マクロ定義詳解

◆ DESIGNLAB_SUB_MACRO_ADD_COMMENT

#define DESIGNLAB_SUB_MACRO_ADD_COMMENT (   VN)
値:
if (desc.VN.description != "") { \
{ \
v[desc.VN.table_name][#VN].comments().push_back(desc.VN.description); \
} \
else \
{ \
v[#VN].comments().push_back(desc.VN.description); \
} \
}
static const char kNoTable[]
テーブルがない場合に指定する文字列.

DESIGNLAB_DEFINE_CONVERSION_NON_INTRUSIVEの補助マクロ. 他のファイルから呼び出さないこと.
tomlファイルの要素にクラスの説明を追加する. もし,説明の用意がなければ説明を追加しない.

引数
VN変数名.

toml_serialize_macro.h270 行目に定義があります。

◆ DESIGNLAB_SUB_MACRO_ASSIGN_MEMBER_VARIABLE_TO_VALUE

#define DESIGNLAB_SUB_MACRO_ASSIGN_MEMBER_VARIABLE_TO_VALUE (   VAR)
値:
if (v.count(desc.VAR.table_name) == 0) \
{ \
v[desc.VAR.table_name] = toml::table{}; \
} \
\
::designlab::toml_func::SetTomlValue(&v[desc.VAR.table_name], \
TOML11_STRINGIZE(VAR), obj.VAR); \
} \
else \
{ \
::designlab::toml_func::SetTomlValue( \
&v, TOML11_STRINGIZE(VAR), obj.VAR); \
}

DESIGNLAB_DEFINE_CONVERSION_NON_INTRUSIVEの補助マクロ. 他のファイルから呼び出さないこと.
クラスのメンバ変数を tomlファイルに追加する.

引数
VAR変数名.

toml_serialize_macro.h247 行目に定義があります。

◆ DESIGNLAB_SUB_MACRO_FIND_MEMBER_VARIABLE_FROM_VALUE

#define DESIGNLAB_SUB_MACRO_FIND_MEMBER_VARIABLE_FROM_VALUE (   VAR_NAME)
値:
{ \
const std::string table_str = desc.VAR_NAME.table_name; \
\
{ \
obj.VAR_NAME = \
::designlab::toml_func::GetTomlValue<decltype(obj.VAR_NAME)>( \
v_, \
TOML11_STRINGIZE(VAR_NAME)); \
} \
else \
{ \
obj.VAR_NAME = \
::designlab::toml_func::GetTomlValue<decltype(obj.VAR_NAME)>( \
v_[table_str], \
TOML11_STRINGIZE(VAR_NAME)); \
} \
}
T GetTomlValue(::toml::basic_value< toml::preserve_comments, std::map > v, const std::string &var_str)
ユーザーが直接呼ぶ関数. GetTomlValueImpl を利用してテンプレートの型を解決し, それに応じたGet関数を呼び出す.

DESIGNLAB_DEFINE_CONVERSION_NON_INTRUSIVEの補助マクロ. 他のファイルから呼び出さないこと.
tomlファイルからクラスのメンバ変数を取得する.

引数
VAR_NAME変数名.

toml_serialize_macro.h220 行目に定義があります。

◆ DESIGNLAB_TOML11_DESCRIPTION_CLASS

#define DESIGNLAB_TOML11_DESCRIPTION_CLASS (   CLASS)    struct CLASS##Description final

tomlファイルに説明を追加するためのクラスの宣言を行うためのマクロ.

引数
CLASSクラス名.

toml_serialize_macro.h286 行目に定義があります。

◆ DESIGNLAB_TOML11_FILE_ADD_DESCRIPTION

#define DESIGNLAB_TOML11_FILE_ADD_DESCRIPTION (   DESCRIPTION)    const ::std::vector<::std::string> file_description_vec{sjis_to_utf8(DESCRIPTION)};

tomlファイルにファイルの説明を追加するためのマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.

引数
DESCRIPTION説明.文字列で指定する.

toml_serialize_macro.h300 行目に定義があります。

◆ DESIGNLAB_TOML11_FILE_ADD_DESCRIPTION_MULTI_LINE

#define DESIGNLAB_TOML11_FILE_ADD_DESCRIPTION_MULTI_LINE (   DESCRIPTION_VEC)
値:
const ::std::vector<::std::string> file_description_vec = \
::designlab::toml_func::sjis_to_utf8_vec(DESCRIPTION_VEC);

tomlファイルにファイルの説明を追加するためのマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.

引数
DESCRIPTION_VEC説明.文字列の vector で指定する.

toml_serialize_macro.h307 行目に定義があります。

◆ DESIGNLAB_TOML11_FILE_NO_DESCRIPTION

#define DESIGNLAB_TOML11_FILE_NO_DESCRIPTION ( )    const ::std::vector<::std::string> file_description_vec{};

tomlファイルにファイルの説明を追加しないことを示す文字列.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.

toml_serialize_macro.h293 行目に定義があります。

◆ DESIGNLAB_TOML11_NO_TABLE

#define DESIGNLAB_TOML11_NO_TABLE   ::designlab::toml_func::Toml11Description::kNoTable

tomlファイルに追加する変数をテーブルに追加しないことを示すためのマクロ.

toml_serialize_macro.h346 行目に定義があります。

◆ DESIGNLAB_TOML11_SERIALIZE

#define DESIGNLAB_TOML11_SERIALIZE (   NAME,
  ... 
)

tomlファイルのシリアライズ/デシリアライズを行うためのマクロ.
TOML11_DEFINE_CONVERSION_NON_INTRUSIVEをラッパしたもの.
もともとのほうでは enum型を取り扱うことができなかったが, このマクロでは取り扱うことができる.
また,クラスの説明を追加することができる.
注意点として,このクラスを使用する場合は, 必ずDESIGNLAB_TOML11_DESCRIPTION_CLASSを用意する必要がある.

以下のように使用する.

enum class SampleEnum : int
{
A,
B,
C,
}
class Sample final
{
public:
int data{ 0 };
std::string str{ "This is String"};
SampleEnum enum_data{ SampleEnum::A };
};
{
"number", "This is Number Table."
"enum", "This is Enum Table.");
DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(data, "number", "This is data");
str, DESIGNLAB_TOML11_NO_TABLE, "This is str");
enum_data, "enum", "This is enum_data");
};
DESIGNLAB_TOML11_SERIALIZE(Sample, data, str, enum_data);
#define DESIGNLAB_TOML11_SERIALIZE(NAME,...)
tomlファイルのシリアライズ/デシリアライズを行うためのマクロ. TOML11_DEFINE_CONVERSION_NON_INTRUSIVEをラッパしたもの. もともとのほうでは enum型...
#define DESIGNLAB_TOML11_NO_TABLE
tomlファイルに追加する変数をテーブルに追加しないことを示すためのマクロ.
#define DESIGNLAB_TOML11_DESCRIPTION_CLASS(CLASS)
tomlファイルに説明を追加するためのクラスの宣言を行うためのマクロ.
#define DESIGNLAB_TOML11_FILE_NO_DESCRIPTION()
tomlファイルにファイルの説明を追加しないことを示す文字列. DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
#define DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(VARIABLE, TABLE, DESCRIPTION)
tomlファイルに変数とファイルの説明を追加するためのマクロ.
#define DESIGNLAB_TOML11_TABLE_ADD_DESCRIPTION(...)
tomlファイルにテーブルの説明を追加するためのマクロ. DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
引数
NAMEクラス名.クラスの型を指定する.
...クラスのメンバ変数.過不足なく,全て指定する必要がある. 可変長引数なので複数指定することができる.

toml_serialize_macro.h395 行目に定義があります。

◆ DESIGNLAB_TOML11_TABLE_ADD_DESCRIPTION

#define DESIGNLAB_TOML11_TABLE_ADD_DESCRIPTION (   ...)
値:
const std::vector<std::string> table_name_description_vec = \
::designlab::toml_func::sjis_to_utf8_vec({ __VA_ARGS__ });

tomlファイルにテーブルの説明を追加するためのマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.

引数
...テーブル名と説明.

toml_serialize_macro.h316 行目に定義があります。

◆ DESIGNLAB_TOML11_TABLE_NO_DESCRIPTION

#define DESIGNLAB_TOML11_TABLE_NO_DESCRIPTION ( )    const std::vector<std::string> table_name_description_vec = {};

tomlファイルに追加するテーブルにコメントを追加しないことを示すマクロ.
DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.

toml_serialize_macro.h323 行目に定義があります。

◆ DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION

#define DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION (   VARIABLE,
  TABLE,
  DESCRIPTION 
)
値:
const ::designlab::toml_func::Toml11Description VARIABLE{ \
TABLE, sjis_to_utf8(DESCRIPTION) \
}

tomlファイルに変数とファイルの説明を追加するためのマクロ.

引数
VARIABLE変数名.
TABLEテーブル名.
DESCRIPTION説明.

toml_serialize_macro.h332 行目に定義があります。

◆ DESIGNLAB_TOML11_VARIABLE_NO_DESCRIPTION

#define DESIGNLAB_TOML11_VARIABLE_NO_DESCRIPTION (   VARIABLE,
  TABLE 
)    const ::designlab::toml_func::Toml11Description VARIABLE{TABLE, ""}

ファイルの説明を追加したくない場合には,このマクロで変数を追加する.

引数
VARIABLE変数名.
TABLEテーブル名.

toml_serialize_macro.h341 行目に定義があります。