bool marky::Backend_SQLite::get_nexts(const words_t& words, snippet_ptr_set_t& out) { if (!bind_words(stmt_get_nexts, 1, words)) { sqlite3_clear_bindings(stmt_get_nexts); sqlite3_reset(stmt_get_nexts); return false; } bool ok = true; out.clear(); for (;;) { int step = sqlite3_step(stmt_get_nexts); bool done = false; switch (step) { case SQLITE_DONE: done = true; break; case SQLITE_ROW: { words_t words; unpack((const char*)sqlite3_column_text(stmt_get_nexts, 0), words); snippet_t snippet(new Snippet(words, sqlite3_column_int64(stmt_get_nexts, 1), sqlite3_column_int64(stmt_get_nexts, 2), sqlite3_column_int64(stmt_get_nexts, 3))); out.insert(snippet); break; } default: ok = false; ERROR("Error when parsing response to '%s': %d/%s", QUERY_GET_NEXTS, step, sqlite3_errmsg(db)); break; } if (!ok || done) { break; } } sqlite3_clear_bindings(stmt_get_nexts); sqlite3_reset(stmt_get_nexts); return ok; }
bool SnippetsTableModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role) { if (modelIndex.isValid() && role == Qt::EditRole) { Snippet snippet(m_collection->snippet(modelIndex.row(), m_activeGroupId)); if (modelIndex.column() == 0) { const QString &s = value.toString(); if (!isValidTrigger(s)) { QMessageBox::critical(0, tr("Error"), tr("Not a valid trigger.")); if (snippet.trigger().isEmpty()) removeSnippet(modelIndex); return false; } snippet.setTrigger(s); } else { snippet.setComplement(value.toString()); } replaceSnippet(snippet, modelIndex); return true; } return false; }
bool marky::Backend_SQLite::prune(const State& state, scorer_t scorer) { bool ok = true; snippet_ptr_set_t delme; for (;;) { int step = sqlite3_step(stmt_get_all); bool done = false; switch (step) { case SQLITE_DONE: done = true; break; case SQLITE_ROW: { words_t words; unpack((const char*)sqlite3_column_text(stmt_get_all, 0), words); snippet_t snippet(new Snippet(words, sqlite3_column_int64(stmt_get_all, 1), sqlite3_column_int64(stmt_get_all, 2), sqlite3_column_int64(stmt_get_all, 3))); if (snippet->score(scorer, state) == 0) { /* zero score; prune */ delme.insert(snippet); } break; } default: ok = false; ERROR("Error when parsing response to '%s': %d/%s", QUERY_GET_ALL, step, sqlite3_errmsg(db)); break; } if (!ok || done) { break; } } sqlite3_clear_bindings(stmt_get_all); sqlite3_reset(stmt_get_all); if (!ok) { return false; } DEBUG("%lu to prune", delme.size()); if (delme.empty()) { return true;/* nothing to prune! */ } if (!exec(db, QUERY_BEGIN_TRANSACTION)) { ok = false; } /* don't return false if !ok; really want to close the transaction */ /* delete snippets in delme */ for (snippet_ptr_set_t::const_iterator iter = delme.begin(); iter != delme.end(); ++iter) { if (!bind_words(stmt_delete_snippet, 1, (*iter)->words)) { ok = false; } int step = sqlite3_step(stmt_delete_snippet); if (step != SQLITE_DONE) { ERROR("Error when parsing response to '%s': %d\%s", QUERY_DELETE_SNIPPET, step, sqlite3_errmsg(db)); ok = false; } if (!ok) { break; } } sqlite3_clear_bindings(stmt_delete_snippet); sqlite3_reset(stmt_delete_snippet); if (!exec(db, QUERY_END_TRANSACTION)) { ok = false; } return ok; }
bool marky::Backend_SQLite::get_next(const State& state, selector_t selector, scorer_t scorer, const words_t& search_words, word_t& next) { #ifdef READ_DEBUG_ENABLED DEBUG("get_next(%s)", str(search_words).c_str()); #endif if (!bind_words(stmt_get_nexts, 1, search_words)) { sqlite3_clear_bindings(stmt_get_nexts); sqlite3_reset(stmt_get_nexts); return false; } bool ok = true; snippets_ptr_t snippets(new snippet_ptr_set_t); for (;;) { int step = sqlite3_step(stmt_get_nexts); bool done = false; switch (step) { case SQLITE_DONE: done = true; break; case SQLITE_ROW: { words_t words; unpack((const char*)sqlite3_column_text(stmt_get_nexts, 0), words); snippet_t snippet(new Snippet(words, sqlite3_column_int64(stmt_get_nexts, 1), sqlite3_column_int64(stmt_get_nexts, 2), sqlite3_column_int64(stmt_get_nexts, 3))); snippets->insert(snippet); break; } default: ok = false; ERROR("Error when parsing response to '%s': %d/%s", QUERY_GET_NEXTS, step, sqlite3_errmsg(db)); break; } if (!ok || done) { break; } } sqlite3_clear_bindings(stmt_get_nexts); sqlite3_reset(stmt_get_nexts); if (snippets->empty()) { if (search_words.size() >= 2) { words_t search_words_shortened(++search_words.begin(), search_words.end()); #ifdef READ_DEBUG_ENABLED DEBUG(" get_next -> %s", str(search_words_shortened).c_str()); #endif /* recurse with shorter search */ return get_next(state, selector, scorer, search_words_shortened, next); } else { #ifdef READ_DEBUG_ENABLED DEBUG(" next_snippet -> NOTFOUND"); #endif next = IBackend::LINE_END; } } else { const words_t& next_snippet = selector(*snippets, scorer, state)->words; #ifdef READ_DEBUG_ENABLED for (snippet_ptr_set_t::const_iterator siter = snippets->begin(); siter != snippets->end(); ++siter) { DEBUG(" nexts%s = snippet(%s, %lu)", str(search_words).c_str(), str((*siter)->words).c_str(), (*siter)->score(scorer, state)); } DEBUG(" next_snippet -> %s", str(next_snippet).c_str()); #endif next = next_snippet.back(); } return ok; }
QModelIndex SnippetsTableModel::createSnippet() { Snippet snippet(m_activeGroupId); return insertSnippet(snippet); }
static void demo2 (BroadwayOutput *output) { cairo_t *cr; cairo_surface_t *surface, *old_surface; BroadwayRect rects[2]; double da = 0; int i; broadway_output_new_surface(output, 0, 100, 100, 800, 600); surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 800, 600); old_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 800, 600); cr = cairo_create (old_surface); cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); cairo_rectangle (cr, 0, 0, 800, 600); cairo_fill (cr); cairo_destroy (cr); for (i = 0; i < 100; i++) { cr = cairo_create (surface); cairo_set_source_rgb (cr, 0.8, 0.8, 0.8); cairo_rectangle (cr, 0, 0, 800, 600); cairo_fill (cr); snippet(cr, i); cairo_destroy (cr); if (i == 0) { broadway_output_put_rgb (output, 0, 0, 0, 800, 600, 800*4, cairo_image_surface_get_data(surface) ); broadway_output_show_surface (output, 0); } else { diff_surfaces (surface, old_surface); broadway_output_put_rgba (output, 0, 0, 0, 800, 600, 800*4, cairo_image_surface_get_data(old_surface)); } broadway_output_move_surface (output, 0, 100 + i, 100 + i); rects[0].x = 500; rects[0].y = 0; rects[0].width = 100; rects[0].height = 100; rects[1].x = 600; rects[1].y = 100; rects[1].width = 100; rects[1].height = 100; broadway_output_copy_rectangles (output, 0, rects, 2, 400, 0); broadway_output_flush (output); cr = cairo_create (old_surface); cairo_set_source_surface (cr, surface, 0, 0); cairo_paint (cr); cairo_destroy (cr); da += 10; usleep (50 * 1000); } cairo_surface_destroy (surface); broadway_output_destroy_surface(output, 0); broadway_output_flush (output); }