| 878 | |
| 879 | template<typename ClassType> |
| 880 | class value_object : public internal::noncopyable { |
| 881 | public: |
| 882 | typedef ClassType class_type; |
| 883 | |
| 884 | value_object(const char* name) { |
| 885 | using namespace internal; |
| 886 | |
| 887 | auto ctor = &raw_constructor<ClassType>; |
| 888 | auto dtor = &raw_destructor<ClassType>; |
| 889 | |
| 890 | _embind_register_value_object( |
| 891 | TypeID<ClassType>::get(), |
| 892 | name, |
| 893 | getSignature(ctor), |
| 894 | reinterpret_cast<GenericFunction>(ctor), |
| 895 | getSignature(dtor), |
| 896 | reinterpret_cast<GenericFunction>(dtor)); |
| 897 | } |
| 898 | |
| 899 | ~value_object() { |
| 900 | using namespace internal; |
| 901 | _embind_finalize_value_object(internal::TypeID<ClassType>::get()); |
| 902 | } |
| 903 | |
| 904 | template<typename InstanceType, typename FieldType> |
| 905 | value_object& field(const char* fieldName, FieldType InstanceType::*field) { |
| 906 | using namespace internal; |
| 907 | |
| 908 | auto getter = &MemberAccess<InstanceType, FieldType> |
| 909 | ::template getWire<ClassType>; |
| 910 | auto setter = &MemberAccess<InstanceType, FieldType> |
| 911 | ::template setWire<ClassType>; |
| 912 | |
| 913 | _embind_register_value_object_field( |
| 914 | TypeID<ClassType>::get(), |
| 915 | fieldName, |
| 916 | TypeID<FieldType>::get(), |
| 917 | getSignature(getter), |
| 918 | reinterpret_cast<GenericFunction>(getter), |
| 919 | getContext(field), |
| 920 | TypeID<FieldType>::get(), |
| 921 | getSignature(setter), |
| 922 | reinterpret_cast<GenericFunction>(setter), |
| 923 | getContext(field)); |
| 924 | return *this; |
| 925 | } |
| 926 | |
| 927 | template<typename InstanceType, typename ElementType, int N> |
| 928 | value_object& field(const char* fieldName, ElementType (InstanceType::*field)[N]) { |
| 929 | using namespace internal; |
| 930 | |
| 931 | typedef std::array<ElementType, N> FieldType; |
| 932 | static_assert(sizeof(FieldType) == sizeof(ElementType[N])); |
| 933 | |
| 934 | auto getter = &MemberAccess<InstanceType, FieldType> |
| 935 | ::template getWire<ClassType>; |
| 936 | auto setter = &MemberAccess<InstanceType, FieldType> |
| 937 | ::template setWire<ClassType>; |
nothing calls this directly
no test coverage detected