/* Sets up a very simple attribute meta-object. Just supports having a * name, and even uses the P6str representation to store it, so that's * really all that it supports. */ PMC * SixModelObject_setup_knowhow_attribute(PARROT_INTERP, PMC *sc, PMC *knowhow) { PMC *old_ctx, *cappy, *meth, *knowhow_attr, *how; /* Create a new KnowHOWAttribute type using P6str repr.. */ meth = STABLE(knowhow)->find_method(interp, knowhow, Parrot_str_new_constant(interp, "new_type"), NO_HINT); old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, knowhow); VTABLE_set_string_keyed_str(interp, cappy, name_str, Parrot_str_new_constant(interp, "KnowHOWAttribute")); VTABLE_set_string_keyed_str(interp, cappy, repr_str, Parrot_str_new_constant(interp, "P6str")); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); knowhow_attr = VTABLE_get_pmc_keyed_int(interp, cappy, 0); how = STABLE(knowhow_attr)->HOW; /* Add new method. */ meth = STABLE(how)->find_method(interp, how, Parrot_str_new_constant(interp, "add_method"), NO_HINT); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, how); VTABLE_push_pmc(interp, cappy, knowhow_attr); VTABLE_push_string(interp, cappy, Parrot_str_new_constant(interp, "new")); VTABLE_push_pmc(interp, cappy, wrap_c(interp, F2DPTR(attr_new))); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); /* Add name method. */ cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, how); VTABLE_push_pmc(interp, cappy, knowhow_attr); VTABLE_push_string(interp, cappy, name_str); VTABLE_push_pmc(interp, cappy, wrap_c(interp, F2DPTR(attr_name))); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); /* Compose. */ meth = STABLE(knowhow)->find_method(interp, how, Parrot_str_new_constant(interp, "compose"), NO_HINT); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, how); VTABLE_push_pmc(interp, cappy, knowhow_attr); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); /* Associate the created object with the intial core serialization * context. */ VTABLE_set_pmc_keyed_int(interp, sc, 2, knowhow_attr); SC_PMC(knowhow_attr) = sc; STABLE(knowhow_attr)->sc = sc; return knowhow_attr; }
void ArmadilloSolver::get_coefficients(float *p_coefficients) { if (this->debug) { std::cout << "[DEBUG] Computing result: Coefficients" << std::endl; } fvec wrap_c(p_coefficients, this->nc, false, true); wrap_c = this->x; }
/* Bootstraps the KnowHOW. This is were things "bottom out" in the meta-model * so it's a tad loopy. Basically, we create a KnowHOW type object. We then * create an instance from that and add a bunch of methods to it. Returns the * bootstrapped object. */ PMC * SixModelObject_bootstrap_knowhow(PARROT_INTERP, PMC *sc) { /* Create our KnowHOW type object. Note we don't have a HOW just yet, so * pass in null. */ REPROps *REPR = REPR_get_by_name(interp, Parrot_str_new_constant(interp, "KnowHOWREPR")); PMC *knowhow_pmc = REPR->type_object_for(interp, PMCNULL); /* We create a KnowHOW instance that can describe itself. This means * .HOW.HOW.HOW.HOW etc will always return that, which closes the model * up. Also pull out its underlying struct. */ PMC *knowhow_how_pmc = REPR->allocate(interp, NULL); KnowHOWREPRInstance *knowhow_how = (KnowHOWREPRInstance *)PMC_data(knowhow_how_pmc); /* Need to give the knowhow_how a twiddled STable with a different * dispatcher, so things bottom out. */ PMC *st_copy = create_stable(interp, REPR, knowhow_how_pmc); STABLE_STRUCT(st_copy)->WHAT = knowhow_pmc; STABLE_STRUCT(st_copy)->find_method = bottom_find_method; knowhow_how->common.stable = st_copy; /* Add various methods to the KnowHOW's HOW. */ knowhow_how->body.methods = Parrot_pmc_new(interp, enum_class_Hash); knowhow_how->body.attributes = Parrot_pmc_new(interp, enum_class_ResizablePMCArray); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "new_type"), wrap_c(interp, F2DPTR(new_type))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "find_method"), wrap_c(interp, F2DPTR(find_method))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "add_method"), wrap_c(interp, F2DPTR(add_method))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "add_attribute"), wrap_c(interp, F2DPTR(add_attribute))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "compose"), wrap_c(interp, F2DPTR(compose))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "parents"), wrap_c(interp, F2DPTR(parents))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "attributes"), wrap_c(interp, F2DPTR(attributes))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "methods"), wrap_c(interp, F2DPTR(methods))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "mro"), wrap_c(interp, F2DPTR(mro))); VTABLE_set_pmc_keyed_str(interp, knowhow_how->body.methods, Parrot_str_new_constant(interp, "name"), wrap_c(interp, F2DPTR(name))); /* Set name KnowHOW for the KnowHOW's HOW. */ knowhow_how->body.name = Parrot_str_new_constant(interp, "KnowHOW"); /* Set this built up HOW as the KnowHOW's HOW. */ STABLE(knowhow_pmc)->HOW = knowhow_how_pmc; /* Give it an authoritative method cache. */ STABLE(knowhow_pmc)->method_cache = knowhow_how->body.methods; STABLE(knowhow_pmc)->mode_flags = METHOD_CACHE_AUTHORITATIVE; /* Set up some string constants that the methods here use. */ repr_str = Parrot_str_new_constant(interp, "repr"); name_str = Parrot_str_new_constant(interp, "name"); empty_str = Parrot_str_new_constant(interp, ""); p6opaque_str = Parrot_str_new_constant(interp, "P6opaque"); /* Associate the created objects with the intial core serialization * context. */ VTABLE_set_pmc_keyed_int(interp, sc, 0, knowhow_pmc); SC_PMC(knowhow_pmc) = sc; VTABLE_set_pmc_keyed_int(interp, sc, 1, knowhow_how_pmc); SC_PMC(knowhow_how_pmc) = sc; STABLE(knowhow_pmc)->sc = sc; STABLE(knowhow_how_pmc)->sc = sc; return knowhow_pmc; }