static SQInteger ppu_erase(HSQUIRRELVM v) { struct program_config *d; SQRESULT r = qr_userpointer_get(v, (SQUserPointer) &d); if(SQ_FAILED(r)){ return r; } return erase_set(v, d->handle, &d->ppu, &d->log); }
// move to deepest (or first) neighbour int move_set(encoded &enc, int &deepest, degen °) { // count how many times called cnt_move++; // count better neighbours int cnt = 0; // deepest descent deg.current = deepest; short *min_pt = allocopy(enc.pt); if (deg.opt->verbose_lvl>3) fprintf(stderr, "\n start of MS:\n %s %d\n\n", pt_to_str(enc.pt).c_str(), deepest); // if using first dont do all of them bool end = false; // insertions if (!end) cnt += insertions(enc, deepest, min_pt, deg, deg.opt->verbose_lvl>3); if (deg.opt->first && cnt>0) end = true; fprintf(stderr, "\n"); // deletions if (!end) cnt += deletions(enc, deepest, min_pt, deg, deg.opt->verbose_lvl>3); if (deg.opt->first && cnt>0) end = true; fprintf(stderr, "\n"); // shifts (only if enabled + noLP disabled) if (!end && deg.opt->shift && !deg.opt->noLP) { cnt += shifts(enc, deepest, min_pt, deg, deg.opt->verbose_lvl>3); if (deg.opt->first && cnt>0) end = true; } if (deg.opt->verbose_lvl>3) fprintf(stderr, "\n %s\n %s\n", enc.seq, pt_to_str(min_pt).c_str()); // if degeneracy occurs, solve it! if (!end && deg.unprocessed.size()>0) { deg.processed.insert(allocopy(enc.pt)); // take first if (enc.pt) free(enc.pt); enc.pt = (*deg.unprocessed.begin()); deg.unprocessed.erase(deg.unprocessed.begin()); if (deg.opt->minh>0.1001) { deepest = energy_of_structure_pt(enc.seq, enc.pt, enc.s0, enc.s1, 0); } cnt += move_set(enc, deepest, deg); } else { copy_arr(enc.pt, min_pt); } free(min_pt); // resolve degeneracy in local minima if (deg.processed.size()>0) { deg.processed.insert(enc.pt); enc.pt = *deg.processed.begin(); deg.processed.erase(deg.processed.begin()); erase_set(deg.processed); } return cnt; }