55 lines
2.0 KiB
C++
55 lines
2.0 KiB
C++
|
/************************************************************************************//*!
|
||
|
\file ReflectionUtilities.h++
|
||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||
|
\par email: kahwei.tng\@digipen.edu
|
||
|
\date Sep 16, 2022
|
||
|
\brief Contains the definition of the template functions of the managed
|
||
|
ReflectionUtilities static class.
|
||
|
|
||
|
Note: This file is written in C++17/CLI.
|
||
|
|
||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||
|
of DigiPen Institute of Technology is prohibited.
|
||
|
*//*************************************************************************************/
|
||
|
#pragma once
|
||
|
|
||
|
// Primary Header
|
||
|
#include "ReflectionUtilities.hxx"
|
||
|
|
||
|
namespace SHADE
|
||
|
{
|
||
|
/*---------------------------------------------------------------------------------*/
|
||
|
/* Serialization Helper Functions */
|
||
|
/*---------------------------------------------------------------------------------*/
|
||
|
template<typename FieldType>
|
||
|
bool ReflectionUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Emitter& emitter)
|
||
|
{
|
||
|
if (fieldInfo->FieldType == FieldType::typeid)
|
||
|
{
|
||
|
emitter << safe_cast<FieldType>(fieldInfo->GetValue(object));
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
template<typename FieldType>
|
||
|
bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node)
|
||
|
{
|
||
|
return fieldAssignYaml<FieldType, FieldType>(fieldInfo, object, node);
|
||
|
}
|
||
|
|
||
|
template<typename FieldType, typename CastType>
|
||
|
bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node)
|
||
|
{
|
||
|
if (fieldInfo->FieldType == FieldType::typeid)
|
||
|
{
|
||
|
fieldInfo->SetValue(object, node.as<CastType>());
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|