#include <irrlicht/irrlicht.h>
#include <libguile.h>
-
-#include "device.h"
#include "gsubr.h"
#include "reference-counted.h"
-#include "scene-node-animator.h"
+
+
+using namespace irr;
+
+
+template <typename T>
+SCM
+IReferenceCounted_drop (SCM obj)
+{
+ return scm_from_bool (((T) scm_to_pointer (obj))->drop ());
+}
+
extern "C" {
void
init_reference_counted (void)
{
- DEFINE_GSUBR ("drop!", 1, 0, 0, irr_drop);
- }
-
- SCM
- irr_drop (SCM wrapped_obj)
- {
- bool result = 0;
- if (device_p (wrapped_obj))
- {
- result = unwrap_device (wrapped_obj)->drop ();
- }
- else if (scene_node_animator_p (wrapped_obj))
- {
- result = unwrap_scene_node_animator (wrapped_obj)->drop ();
- }
- else
- {
- scm_error (scm_arg_type_key, NULL, "Object cannot be dropped: ~S",
- scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj));
- }
- return scm_from_bool (result);
+ DEFINE_GSUBR ("IReferenceCounted_drop_IrrlichtDevice", 1, 0, 0,
+ IReferenceCounted_drop<IrrlichtDevice*>);
}
}