aboutsummaryrefslogtreecommitdiff
path: root/system
diff options
context:
space:
mode:
Diffstat (limited to 'system')
-rwxr-xr-xsystem/include/emscripten/bind.h26
1 files changed, 24 insertions, 2 deletions
diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h
index e767afaa..bd170dea 100755
--- a/system/include/emscripten/bind.h
+++ b/system/include/emscripten/bind.h
@@ -77,6 +77,8 @@ namespace emscripten {
GenericFunction setter,
void* setterContext);
+ void _embind_finalize_tuple(TYPEID tupleType);
+
void _embind_register_struct(
TYPEID structType,
const char* fieldName,
@@ -93,6 +95,8 @@ namespace emscripten {
GenericFunction setter,
void* setterContext);
+ void _embind_finalize_struct(TYPEID structType);
+
void _embind_register_smart_ptr(
TYPEID pointerType,
TYPEID pointeeType,
@@ -458,6 +462,15 @@ namespace emscripten {
return internal::getContext(context);
}
};
+
+ class noncopyable {
+ protected:
+ noncopyable() {}
+ ~noncopyable() {}
+ private:
+ noncopyable(const noncopyable&) = delete;
+ const noncopyable& operator=(const noncopyable&) = delete;
+ };
}
////////////////////////////////////////////////////////////////////////////////
@@ -465,7 +478,7 @@ namespace emscripten {
////////////////////////////////////////////////////////////////////////////////
template<typename ClassType>
- class value_tuple {
+ class value_tuple : public internal::noncopyable {
public:
value_tuple(const char* name) {
using namespace internal;
@@ -476,6 +489,11 @@ namespace emscripten {
reinterpret_cast<GenericFunction>(&raw_destructor<ClassType>));
}
+ ~value_tuple() {
+ using namespace internal;
+ _embind_finalize_tuple(TypeID<ClassType>::get());
+ }
+
template<typename InstanceType, typename ElementType>
value_tuple& element(ElementType InstanceType::*field) {
using namespace internal;
@@ -516,7 +534,7 @@ namespace emscripten {
////////////////////////////////////////////////////////////////////////////////
template<typename ClassType>
- class value_struct {
+ class value_struct : public internal::noncopyable {
public:
value_struct(const char* name) {
using namespace internal;
@@ -527,6 +545,10 @@ namespace emscripten {
reinterpret_cast<GenericFunction>(&raw_destructor<ClassType>));
}
+ ~value_struct() {
+ _embind_finalize_struct(internal::TypeID<ClassType>::get());
+ }
+
template<typename InstanceType, typename FieldType>
value_struct& field(const char* fieldName, FieldType InstanceType::*field) {
using namespace internal;