/* * Watch for changes to object variables. Usage: * * # Watch for changes to all variables on all objects. * * world.watch_class { |obj,var| ... } * * # Watch for all changes to objects in a particular class. * * world.watch_class('classname') { |obj,var| ... } * * # Watch for changes to a particular variable in a particular class. * * world.watch_class('classname', 'varname') { |obj,var| ... } * * Returns a Callback object representing the callback. */ static VALUE world_watch_class(int argc, VALUE *argv, VALUE self) { IrmoWorld *world = unwrap_world(self); IrmoCallback *callback; char *classname, *varname; VALUE proc = BLOCK_PROC(); classname = varname = NULL; if (argc >= 1) classname = STR2CSTR(argv[0]); if (argc >= 2) varname = STR2CSTR(argv[1]); if (argc >= 3) rb_raise(rb_eNameError, "too many arguments to method"); callback = irmo_world_watch_class(world, classname, varname, (IrmoVarCallback) rb_irmo_var_callback, (void *) proc); return wrap_callback(callback, proc); }