]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - src/reference-counted.cpp
clean code
[guile-irrlicht.git] / src / reference-counted.cpp
index 85634d4560dce04011010fd2f103655a859f2201..1bdc8daf8737de65dc5791d363a18a6f68d29262 100644 (file)
 
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
-
-#include "device.h"
+#include "gsubr.h"
 #include "reference-counted.h"
 
-extern "C" {
-
-  void
-  init_reference_counted (void)
-  {
-    scm_c_define_gsubr ("drop!", 1, 0, 0, (scm_t_subr)irr_drop);
-  }
-
-  SCM
-  irr_drop (SCM wrapped_obj)
-  {
-    bool result = 0;
-    if (device_p (wrapped_obj))
-      {
-        result = unwrap_device (wrapped_obj)->drop ();
-      }
-    return scm_from_bool (result);
-  }
+using namespace irr;
+
+template <typename T>
+SCM
+IReferenceCounted_drop (SCM obj)
+{
+  return scm_from_bool (((T) scm_to_pointer (obj))->drop ());
+}
 
+void
+init_reference_counted (void)
+{
+  DEFINE_GSUBR ("IrrlichtDevice_drop", 1, 0, 0, IReferenceCounted_drop<IrrlichtDevice*>);
 }