aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Austin <chad@imvu.com>2013-03-11 13:02:30 -0700
committerJukka Jylänki <jujjyl@gmail.com>2013-04-12 14:25:43 +0300
commit808e914ce1a0a0388d0bb6f6c4dadf935ad35f4e (patch)
tree20132e4a75c1ebd46111dc9f47894c43bcffc730
parent40976b0286d7b647777adc037976925c4c1505fd (diff)
Just toodling around with smart pointer binding syntax
-rwxr-xr-xsystem/include/emscripten/bind.h40
1 files changed, 30 insertions, 10 deletions
diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h
index bdcde625..fd2e928a 100755
--- a/system/include/emscripten/bind.h
+++ b/system/include/emscripten/bind.h
@@ -660,6 +660,23 @@ namespace emscripten {
}
};
+ template<typename PointerType>
+ struct ptr {
+ typedef PointerType pointer_type;
+ };
+
+ namespace internal {
+ template<typename T>
+ struct is_ptr {
+ enum { value = false };
+ };
+
+ template<typename T>
+ struct is_ptr<ptr<T>> {
+ enum { value = true };
+ };
+ };
+
template<typename ClassType, typename BaseSpecifier = internal::NoBaseClass>
class class_ {
public:
@@ -670,16 +687,19 @@ namespace emscripten {
BaseSpecifier::template verify<ClassType>();
- _embind_register_class(
- TypeID<ClassType>::get(),
- TypeID<AllowedRawPointer<ClassType>>::get(),
- TypeID<AllowedRawPointer<const ClassType>>::get(),
- BaseSpecifier::get(),
- BaseSpecifier::template getUpcaster<ClassType>(),
- BaseSpecifier::template getDowncaster<ClassType>(),
- std::is_polymorphic<ClassType>::value,
- name,
- reinterpret_cast<GenericFunction>(&raw_destructor<ClassType>));
+ if (is_ptr<ClassType>::value) {
+ } else {
+ _embind_register_class(
+ TypeID<ClassType>::get(),
+ TypeID<AllowedRawPointer<ClassType>>::get(),
+ TypeID<AllowedRawPointer<const ClassType>>::get(),
+ BaseSpecifier::get(),
+ BaseSpecifier::template getUpcaster<ClassType>(),
+ BaseSpecifier::template getDowncaster<ClassType>(),
+ std::is_polymorphic<ClassType>::value,
+ name,
+ reinterpret_cast<GenericFunction>(&raw_destructor<ClassType>));
+ }
}
template<typename... ConstructorArgs, typename... Policies>