implicit get info from registry classes

This commit is contained in:
BlackMATov
2021-07-01 05:47:53 +07:00
parent 0e65288a9c
commit 8d5d57992b
16 changed files with 103 additions and 146 deletions

View File

@@ -28,63 +28,38 @@ namespace meta_hpp
return info_;
}
operator const class_info&() const noexcept {
return info_;
}
template < typename... Internals >
class_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
template < typename InternalClass >
void add_(const class_<InternalClass>& internal) {
detail::merge_with(
info_.classes_,
internal.info().id(),
internal.info(),
&class_info::merge_with_);
void add_(const class_info& info) {
detail::merge_with(info_.classes_, info.id(), info, &class_info::merge_with_);
}
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
template < auto InternalField >
void add_(const field_<InternalField>& internal) {
detail::merge_with(
info_.fields_,
internal.info().id(),
internal.info(),
&field_info::merge_with_);
void add_(const field_info& info) {
detail::merge_with(info_.fields_, info.id(), info, &field_info::merge_with_);
}
template < auto InternalFunction >
void add_(const function_<InternalFunction>& internal) {
detail::merge_with(
info_.functions_,
internal.info().id(),
internal.info(),
&function_info::merge_with_);
void add_(const function_info& info) {
detail::merge_with(info_.functions_, info.id(), info, &function_info::merge_with_);
}
template < auto InternalMethod >
void add_(const method_<InternalMethod>& internal) {
detail::merge_with(
info_.methods_,
internal.info().id(),
internal.info(),
&method_info::merge_with_);
void add_(const method_info& info) {
detail::merge_with(info_.methods_, info.id(), info, &method_info::merge_with_);
}
template < auto InternalVariable >
void add_(const variable_<InternalVariable>& internal) {
detail::merge_with(
info_.variables_,
internal.info().id(),
internal.info(),
&variable_info::merge_with_);
void add_(const variable_info& info) {
detail::merge_with(info_.variables_, info.id(), info, &variable_info::merge_with_);
}
private:
class_info info_;

View File

@@ -21,18 +21,18 @@ namespace meta_hpp
return info_;
}
operator const data_info&() const noexcept {
return info_;
}
template < typename... Internals >
data_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
private:
data_info info_;

View File

@@ -29,18 +29,18 @@ namespace meta_hpp
return info_;
}
operator const field_info&() const noexcept {
return info_;
}
template < typename... Internals >
field_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
private:
field_info info_;

View File

@@ -28,18 +28,18 @@ namespace meta_hpp
return info_;
}
operator const function_info&() const noexcept {
return info_;
}
template < typename... Internals >
function_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
private:
function_info info_;

View File

@@ -29,18 +29,18 @@ namespace meta_hpp
return info_;
}
operator const method_info&() const {
return info_;
}
template < typename... Internals >
method_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
private:
method_info info_;

View File

@@ -26,53 +26,34 @@ namespace meta_hpp
return info_;
}
operator const namespace_info&() const noexcept {
return info_;
}
template < typename... Internals >
namespace_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
template < typename InternalClass >
void add_(const class_<InternalClass>& internal) {
detail::merge_with(
info_.classes_,
internal.info().id(),
internal.info(),
&class_info::merge_with_);
void add_(const class_info& info) {
detail::merge_with(info_.classes_, info.id(), info, &class_info::merge_with_);
}
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
template < auto InternalFunction >
void add_(const function_<InternalFunction>& internal) {
detail::merge_with(
info_.functions_,
internal.info().id(),
internal.info(),
&function_info::merge_with_);
void add_(const function_info& info) {
detail::merge_with(info_.functions_, info.id(), info, &function_info::merge_with_);
}
void add_(const namespace_& internal) {
detail::merge_with(
info_.namespaces_,
internal.info().id(),
internal.info(),
&namespace_info::merge_with_);
void add_(const namespace_info& info) {
detail::merge_with(info_.namespaces_, info.id(), info, &namespace_info::merge_with_);
}
template < auto InternalVariable >
void add_(const variable_<InternalVariable>& internal) {
detail::merge_with(
info_.variables_,
internal.info().id(),
internal.info(),
&variable_info::merge_with_);
void add_(const variable_info& info) {
detail::merge_with(info_.variables_, info.id(), info, &variable_info::merge_with_);
}
private:
namespace_info info_;

View File

@@ -27,18 +27,18 @@ namespace meta_hpp
return info_;
}
operator const variable_info&() const noexcept {
return info_;
}
template < typename... Internals >
variable_& operator()(Internals&&...internals) {
(add_(std::forward<Internals>(internals)), ...);
return *this;
}
private:
void add_(const data_& internal) {
detail::merge_with(
info_.datas_,
internal.info().id(),
internal.info(),
&data_info::merge_with_);
void add_(const data_info& info) {
detail::merge_with(info_.datas_, info.id(), info, &data_info::merge_with_);
}
private:
variable_info info_;