summaryrefslogtreecommitdiffstats
path: root/PerlTQt/perlqt.h
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-01 18:29:30 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-01 18:29:30 -0600
commitb2af005db21bd8fd068cb79b2ae700953128af2c (patch)
treeabd0ed633726bf0bbecb57d30e92836c31e02695 /PerlTQt/perlqt.h
parentc1b9383f2032d82db5eb8918dca885e37a901dde (diff)
downloadlibtqt-perl-b2af005db21bd8fd068cb79b2ae700953128af2c.tar.gz
libtqt-perl-b2af005db21bd8fd068cb79b2ae700953128af2c.zip
Move PerlQt
Diffstat (limited to 'PerlTQt/perlqt.h')
-rw-r--r--PerlTQt/perlqt.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/PerlTQt/perlqt.h b/PerlTQt/perlqt.h
new file mode 100644
index 0000000..7eb240a
--- /dev/null
+++ b/PerlTQt/perlqt.h
@@ -0,0 +1,54 @@
+#ifndef PERLTQT_H
+#define PERLTQT_H
+
+#include "marshall.h"
+
+struct smokeperl_object {
+ bool allocated;
+ Smoke *smoke;
+ int classId;
+ void *ptr;
+};
+
+struct TypeHandler {
+ const char *name;
+ Marshall::HandlerFn fn;
+};
+
+extern int do_debug; // evil
+extern SV *sv_qapp;
+extern int object_count;
+
+// keep this enum in sync with lib/TQt/debug.pm
+
+enum TQtDebugChannel {
+ qtdb_none = 0x00,
+ qtdb_ambiguous = 0x01,
+ qtdb_autoload = 0x02,
+ qtdb_calls = 0x04,
+ qtdb_gc = 0x08,
+ qtdb_virtual = 0x10,
+ qtdb_verbose = 0x20
+};
+
+void unmapPointer(smokeperl_object *, Smoke::Index, void*);
+SV *getPointerObject(void *ptr);
+void mapPointer(SV *, smokeperl_object *, HV *, Smoke::Index, void *);
+
+
+extern struct mgvtbl vtbl_smoke;
+
+inline smokeperl_object *sv_obj_info(SV *sv) { // ptr on success, null on fail
+ if(!sv || !SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV)
+ return 0;
+ SV *obj = SvRV(sv);
+ MAGIC *mg = mg_find(obj, '~');
+ if(!mg || mg->mg_virtual != &vtbl_smoke) {
+ // FIXME: die or something?
+ return 0;
+ }
+ smokeperl_object *o = (smokeperl_object*)mg->mg_ptr;
+ return o;
+}
+
+#endif // PERLTQT_H