Don't dispatch virtual methods for builtin classes (reduces overhead).
src/libsmoke/smokebinding.h
Thu Feb 18 20:57:00 CET 2010 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Don't dispatch virtual methods for builtin classes (reduces overhead).
--- old-smoke/src/libsmoke/smokebinding.h 2014-10-30 08:06:55.000000000 +0100
+++ new-smoke/src/libsmoke/smokebinding.h 2014-10-30 08:06:55.000000000 +0100
@@ -6,15 +6,12 @@
namespace cl_smoke
{
-class Binding : public SmokeBinding
+class NoDispatchBinding : public SmokeBinding
{
public:
typedef void (*destructed)(void* object);
- typedef int (*dispatch_method)(Binding* binding, Smoke::Index method,
- void* object, Smoke::Stack args, int abstract);
-
- Binding(Smoke *smoke, destructed destruct, dispatch_method dispatch);
+ NoDispatchBinding(Smoke *smoke, destructed destruct);
virtual void
deleted(Smoke::Index classId, void *object);
@@ -27,10 +24,28 @@
className(Smoke::Index classId);
Smoke*
- get_smoke() const;
+ get_smoke() const
+ { return smoke; }
private:
const destructed destruct;
+};
+
+class Binding : public NoDispatchBinding
+{
+ public:
+ typedef int (*dispatch_method)(Binding* binding, Smoke::Index method,
+ void* object, Smoke::Stack args, int abstract);
+
+ Binding(Smoke *smoke, destructed destruct, dispatch_method dispatch);
+
+
+ virtual bool
+ callMethod(Smoke::Index method, void* object,
+ Smoke::Stack stack, bool abstract);
+
+
+ private:
const dispatch_method dispatch;
};