void CCombinedKernel::compute_batch( int32_t num_vec, int32_t* vec_idx, float64_t* result, int32_t num_suppvec, int32_t* IDX, float64_t* weights, float64_t factor) { ASSERT(num_vec<=get_num_vec_rhs()) ASSERT(num_vec>0); ASSERT(vec_idx); ASSERT(result); //we have to do the optimization business ourselves but lets //make sure we start cleanly delete_optimization(); CListElement* current = NULL ; CKernel * k = get_first_kernel(current) ; while(k) { if (k && k->has_property(KP_BATCHEVALUATION)) { if (k->get_combined_kernel_weight()!=0) k->compute_batch(num_vec, vec_idx, result, num_suppvec, IDX, weights, k->get_combined_kernel_weight()); } else emulate_compute_batch(k, num_vec, vec_idx, result, num_suppvec, IDX, weights); SG_UNREF(k); k = get_next_kernel(current); } //clean up delete_optimization(); }
bool CCombinedKernel::delete_optimization() { CListElement* current = NULL ; CKernel* k = get_first_kernel(current); while(k) { if (k->has_property(KP_LINADD)) k->delete_optimization(); SG_UNREF(k); k = get_next_kernel(current); } SG_FREE(sv_idx); sv_idx = NULL; SG_FREE(sv_weight); sv_weight = NULL; sv_count = 0; set_is_initialized(false); return true; }