xo-umbrella2/xo-reflect/src/reflect/struct/StructTdx.cpp
Roland Conybeare 820f431d66 Add 'xo-reflect/' from commit '5dce303fe1'
git-subtree-dir: xo-reflect
git-subtree-mainline: 8111f3846c
git-subtree-split: 5dce303fe1
2025-05-10 20:21:40 -05:00

67 lines
1.9 KiB
C++

/* @file StructTdx.cpp */
#include "struct/StructTdx.hpp"
#include "TypeDescr.hpp"
namespace xo {
using std::uint32_t;
namespace reflect {
std::unique_ptr<StructTdx>
StructTdx::make(std::vector<StructMember> member_v,
bool have_to_self_tp,
std::function<TaggedPtr (void*)> to_self_tp)
{
return std::unique_ptr<StructTdx>(new StructTdx(std::move(member_v),
have_to_self_tp,
std::move(to_self_tp)));
} /*make*/
TaggedPtr
StructTdx::child_tp(uint32_t i, void * object) const
{
if (i >= this->member_v_.size()) {
/* TODO: raise exception here? */
return TaggedPtr::universal_null();
}
const StructMember & member_info = this->member_v_[i];
return member_info.get_member_tp(object);
} /*get_child*/
TypeDescr
StructTdx::fixed_child_td(uint32_t i ) const
{
if (i >= this->member_v_.size())
return nullptr;
const StructMember & member_info = this->member_v_[i];
return member_info.get_member_td();
} /*fixed_child_td*/
std::string const &
StructTdx::struct_member_name(uint32_t i) const
{
StructMember const * sm = this->struct_member(i);
return sm->member_name();
} /*struct_member_name*/
StructMember const *
StructTdx::struct_member(uint32_t i) const
{
if (i >= this->member_v_.size()) {
/* TODO: raise exception here */
assert(false);
return nullptr;
}
return &(this->member_v_[i]);
} /*struct_member*/
} /*namespace reflect*/
} /*namespace xo*/
/* end StructTdx.cpp */