static int test_start(void) { testObj = NULL; testObj = oc_new(oc_lifo, 4, 1); ASSERT(testObj != NULL); ASSERT(testObj->super.buffer_size == 4); ASSERT(testObj->super.item_size == 1); ASSERT(testObj->super.count == 0); return 0; }
static int test_ctor(void) { int var = 1234; testObj=NULL; testObj=oc_new(oc_extended_test_object, var); ASSERT(testObj != NULL); ASSERT(malloc_usable_size(testObj) >= sizeof(struct oc_extended_test_object)); ASSERT(testObj->super.class == oc_extended_test_object); ASSERT(testObj->super.vtable == &_vtable); ASSERT(testObj->var == var); return 0; }
char *oc_register(SEXP what, char *dst, int len, const char *name) { SEXP x; if (len <= MAX_OC_TOKEN_LEN) return NULL; if (!oc_env) { SEXP env = eval(PROTECT(lang3(install("new.env"), ScalarLogical(TRUE), R_EmptyEnv)), R_GlobalEnv); UNPROTECT(1); if (TYPEOF(env) != ENVSXP) return NULL; oc_env = env; R_PreserveObject(oc_env); } x = PROTECT(CONS(what, R_NilValue)); if (name) SET_TAG(x, install(name)); oc_new(dst); Rf_defineVar(install(dst), x, oc_env); UNPROTECT(1); return dst; }