void findMoves(std::vector<diff_edit>& diff, const unsigned int *hash1, const unsigned int *hash2) { const std::size_t diffSize = diff.size(); // initialize moves arrays for (unsigned int i = 0; i < diffSize; ++i) { diff_edit& e = diff[i]; if (e.op != DIFF_MATCH) e.moves.resize(e.len, -1); } for (unsigned int i = 0; i < diffSize; ++i) { diff_edit& e = diff[i]; if (e.op != DIFF_DELETE) continue; for (unsigned int j = 0; j < e.len; ++j) { if (e.moves[j] != -1) continue; int line2; diff_edit* match = find_anchor(e.off + j, diff, hash1, hash2, &line2); if (!match) continue; e.moves[j] = match->off + line2; match->moves[line2] = e.off + j; int d1 = j - 1; int d2 = line2 - 1; while (d1 >= 0 && d2 >= 0 && e.moves[d1] == -1 && match->moves[d2] == -1 && hash1[e.off + d1] == hash2[match->off + d2]) { e.moves[d1] = match->off + d2; match->moves[d2] = e.off + d1; --d1; --d2; } d1 = j + 1; d2 = line2 + 1; while (d1 < (int)e.len && d2 < (int)match->len && e.moves[d1] == -1 && match->moves[d2] == -1 && hash1[e.off + d1] == hash2[match->off + d2]) { e.moves[d1] = match->off + d2; match->moves[d2] = e.off + d1; ++d1; ++d2; } } } }
static int anchor_store (int argc, char *argv[], bool *changed) { CK_ATTRIBUTE *attrs; CK_FUNCTION_LIST *module = NULL; CK_SESSION_HANDLE session; CK_OBJECT_HANDLE object; p11_array *anchors; int ret; int i; anchors = files_to_attrs (argc, argv); if (anchors == NULL) return 1; if (anchors->num == 0) { p11_message ("specify at least one anchor input file"); p11_array_free (anchors); return 2; } session = session_for_store (&module); if (session == 0UL) { p11_array_free (anchors); return 1; } for (i = 0, ret = 0; i < anchors->num; i++) { attrs = anchors->elem[i]; anchors->elem[i] = NULL; object = find_anchor (module, session, attrs); if (object == 0) { p11_debug ("don't yet have this anchor"); if (create_anchor (module, session, attrs)) { *changed = true; } else { ret = 1; break; } } else { p11_debug ("already have this anchor"); if (modify_anchor (module, session, object, attrs)) { *changed = true; } else { ret = 1; break; } } } p11_array_free (anchors); p11_kit_module_finalize (module); p11_kit_module_release (module); return ret; }
static void attach_widgets (GtkTextView *text_view) { GtkTextIter iter; GtkTextBuffer *buffer; int i; buffer = gtk_text_view_get_buffer (text_view); gtk_text_buffer_get_start_iter (buffer, &iter); i = 0; while (find_anchor (&iter)) { GtkTextChildAnchor *anchor; GtkWidget *widget; anchor = gtk_text_iter_get_child_anchor (&iter); if (i == 0) { widget = gtk_button_new_with_label ("Click Me"); g_signal_connect (widget, "clicked", G_CALLBACK (easter_egg_callback), NULL); } else if (i == 1) { widget = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "Option 1"); gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "Option 2"); gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "Option 3"); } else if (i == 2) { widget = gtk_hscale_new (NULL); gtk_range_set_range (GTK_RANGE (widget), 0, 100); gtk_widget_set_size_request (widget, 70, -1); } else if (i == 3) { gchar *filename = demo_find_file ("floppybuddy.gif", NULL); widget = gtk_image_new_from_file (filename); g_free (filename); } else if (i == 4) { widget = gtk_entry_new (); } else { widget = NULL; /* avoids a compiler warning */ g_assert_not_reached (); } gtk_text_view_add_child_at_anchor (text_view, widget, anchor); gtk_widget_show_all (widget); ++i; } }