static void xcreate (mxArray *mnode, int i, VlHIKMNode *node) { int node_K = vl_ikm_get_K (node->filter) ; int M = vl_ikm_get_ndims (node->filter) ; vl_ikm_acc const *centers = vl_ikm_get_centers (node->filter) ; mxArray *mcenters ; mcenters = mxCreateNumericMatrix (M, node_K, mxINT32_CLASS, mxREAL); memcpy (mxGetPr(mcenters), centers, sizeof(vl_ikm_acc) * M * node_K) ; mxSetField (mnode, i, "centers", mcenters) ; if (node->children) { mxArray * msub ; const char * field_names[] = {"centers", "sub" } ; mwSize dims [2] ; int k ; dims[0] = 1 ; dims[1] = node_K ; msub = mxCreateStructArray (2, dims, 2, field_names) ; for (k = 0 ; k < node_K ; ++k) { xcreate (msub, k, node -> children [k]) ; } mxSetField (mnode, i, "sub", msub) ; } }
static void xdelete (VlHIKMNode *node) { if(node) { int k ; if (node->children) { for(k = 0 ; k < vl_ikm_get_K (node->filter) ; ++k) xdelete (node->children[k]) ; vl_free (node->children) ; } if (node->filter) vl_ikm_delete (node->filter) ; vl_free(node); } }