Mercurial > MadButterfly
view nodejs/observer.cc @ 657:32d0eef1ee46
Force type-casting for member variables.
For some member that need a casting for the type is that what we want.
For example, casting a void * type to a struct pointer type. This
force will skip type checking, but it works for the variables with a
generic type and we want to specialize its type.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sat, 31 Jul 2010 14:37:19 +0800 |
parents | 38c720272dd5 |
children | 62c2de99b03a |
line wrap: on
line source
#include <v8.h> #include "mbfly_njs.h" extern "C" { #include <mb.h> #include <string.h> } #ifndef ASSERT #define ASSERT(x) #endif using namespace v8; struct xnjsmb_observer_data { Persistent<Function> func; }; static void event_handler(event_t *evt, void *arg); static observer_t * _subject_add_event_observer(subject_t *subject, int type, Handle<Function> func) { observer_t *observer; xnjsmb_observer_data *data; data = new xnjsmb_observer_data; if(data == NULL) return NULL; data->func = Persistent<Function>::New(func); observer = subject_add_event_observer(subject, type, event_handler, data); return observer; } static void _subject_remove_observer(subject_t *subject, observer_t *observer) { xnjsmb_observer_data *data; subject_remove_observer(subject, observer); data = (xnjsmb_observer_data *)observer->arg; delete data; } /* This is the part of the code generated by gen_v8_binding.m4 */ #include "observer-inc.h" static void event_handler(event_t *evt, void *arg) { xnjsmb_observer_data *data = (xnjsmb_observer_data *)arg; Handle<Value> evt_obj; Handle<Value> func_args[1]; evt_obj = xnjsmb_auto_event_new(evt); ASSERT(!evt_obj.IsEmpty()); func_args[0] = evt_obj; data->func->Call(Context::GetCurrent()->Global(), 1, func_args); }