diff options
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r-- | src/glibext/gcodebuffer.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index 6a21222..0ac3bb3 100644 --- a/src/glibext/gcodebuffer.c +++ b/src/glibext/gcodebuffer.c @@ -416,6 +416,11 @@ static size_t _g_code_buffer_get_index_from_address(const GCodeBuffer *buffer, v /* TODO : coder un parcours plus optimal ! */ + return (first ? 0 : buffer->used - 1); + + +#if 0 + for (result = 0; result < buffer->used; result++) if (g_buffer_line_get_address(buffer->lines[result]) == addr) break; @@ -425,6 +430,8 @@ static size_t _g_code_buffer_get_index_from_address(const GCodeBuffer *buffer, v if (g_buffer_line_get_address(buffer->lines[result + 1]) != addr) break; +#endif + return result; } @@ -466,7 +473,7 @@ static size_t g_code_buffer_get_index_from_address(GCodeBuffer *buffer, vmpa_t a /****************************************************************************** * * * Paramètres : buffer = composant GTK à mettre à jour. * -* addr = emplacement où va se situer la ligne. * +* range = emplacement où va se situer la ligne. * * * * Description : Ajoute une nouvelle ligne à un tampon pour code désassemblé. * * * @@ -476,7 +483,7 @@ static size_t g_code_buffer_get_index_from_address(GCodeBuffer *buffer, vmpa_t a * * ******************************************************************************/ -GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, const vmpa2t *addr) +GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, const mrange_t *range) { GBufferLine *result; /* Instance à retourner */ size_t i; /* Boucle de parcours */ @@ -488,7 +495,7 @@ GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, const vmpa2t *ad buffer->count * sizeof(GBufferLine *)); } - result = g_buffer_line_new(addr, buffer->main_column); + result = g_buffer_line_new(range, buffer->main_column); buffer->lines[buffer->used++] = result; for (i = 0; i < buffer->indent; i++) @@ -1111,7 +1118,7 @@ const vmpa2t *g_buffer_view_compute_caret(GBufferView *view, GBufferLine *line, caret->width = 2; caret->height = view->line_height; - return g_buffer_line_get_address(line); + return NULL;///g_buffer_line_get_address(line); } @@ -1303,17 +1310,6 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y) line = g_buffer_view_find_line_at(view, y, NULL); if (line == NULL) return; - - do - { - vmpa_t addr; - addr = g_buffer_line_get_address(line); - - printf(" ... x2 clic at 0x%08lx\n", addr); - - } - while (0); - x -= view->left_text; if (x < 0) return; @@ -1463,8 +1459,7 @@ bool g_buffer_view_get_address_coordinates(GBufferView *view, const vmpa2t *addr size_t first; /* Première ligne intégrée */ size_t last; /* Dernière ligne intégrée */ size_t i; /* Boucle de parcours */ - const vmpa2t *current; /* Adresse parcourue */ - int ret; /* Bilan d'une comparaison */ + const mrange_t *range; /* Emplacement parcouru */ result = false; @@ -1479,11 +1474,21 @@ bool g_buffer_view_get_address_coordinates(GBufferView *view, const vmpa2t *addr if (view->buffer->used > 0) for (i = first; i <= last; i++) { - current = g_buffer_line_get_address(view->buffer->lines[i]); - ret = cmp_vmpa(current, addr); - - result = (ret == 0); - if (ret >= 0) break; + /** + * Si l'adresse recherchée est plus petite que l'adresse de départ, + * on va effectuer un parcours complet pour rien. + * + * On considère cependant que le seul cas où celà peut arriver + * est lorsque que des découpages en blocs sont impliqués. + * + * Les découpages conduisent alors à la formation de petites zones, + * rapides à parcourir. + */ + + range = g_buffer_line_get_range(view->buffer->lines[i]); + + result = mrange_contains_addr(range, addr); + if (result) break; *y += lheight; |