From 93b0449efa418c431fcd55d06241317195d2a9df Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 8 Aug 2023 14:04:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9D=D0=B5=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=D1=8B?= =?UTF-8?q?=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 73 +++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 40 deletions(-) diff --git a/table/table.gd b/table/table.gd index 20071aa2..dfe2a8cb 100644 --- a/table/table.gd +++ b/table/table.gd @@ -378,59 +378,52 @@ func remove_row(i_row: int): remove_child(node) nodes.erase(node_key) node.queue_free() - - var swaps: = [] - var c0 = nodes.size() - rehash(swaps) - var c1 = nodes.size() - assert(c0 == c1) + rehash() -func next_index(indexes: Vector2i): - indexes.x += 1 - if indexes.x == columns: - indexes.x = 0 - indexes.y += 1 +func next_index(indexes: Array) -> void: + indexes[0].x += 1 + if indexes[0].x == columns: + indexes[0].x = 0 + indexes[0].y += 1 -func swap_nodes(nodes_copy, swaps, node_key_format, i0, i1) -> bool: - var key0: = String(node_key_format % [i0.y, i0.x]) - if not nodes.has(key0): - return false - var key1: = String(node_key_format % [i1.y, i0.x]) +func swap_nodes(nodes_copy, node_key_format, i0, i1) -> void: + var key0 = node_key_format % [i0.y, i0.x] + var key1 = node_key_format % [i1.y, i1.x] nodes_copy[key1] = nodes[key0] nodes_copy[key1].name = key1 - swaps.append([key0, key1]) - return true -func rehash(swaps: Array): - # TODO: Не работает +func rehash(): """ Переназначает ключи в соответствии с размерами таблицы. После вызова swaps содержит массив пар [<прежний ключ>, <текущий ключ>] """ - assert(not swaps.size(), 'ошибка: swaps не пустой') - var i_node: = Vector2i() - var i_hdr: = Vector2i() - var i_slct: = Vector2i() - var i_conn: = Vector2i() - var i_data: = Vector2i() - var db = [] + var i_node: = [Vector2i()] + var i_hdr: = [Vector2i()] + var i_slct: = [Vector2i()] + var i_conn: = [Vector2i()] + var i_data: = [Vector2i()] var nodes_copy = {} - print_debug('до: %s' % str(nodes.keys())) - for node in nodes.values(): - var iv = get_key_indexes(node.name) - var i0 := Vector2i(iv[0], iv[1]) - db.append(iv) - if swap_nodes(nodes_copy, swaps, HEAD_KEY_FORMAT, i0, i_hdr): next_index(i_hdr) - if swap_nodes(nodes_copy, swaps, NODE_KEY_FORMAT, i0, i_node): next_index(i_node) - #if swap_nodes(nodes_copy, swaps, ROW_SELECTOR_KEY_FORMAT, i0, i_slct): next_index(i_slct) - #if swap_nodes(nodes_copy, swaps, CONNECTED_KEY_FORMAT, i0, i_conn): next_index(i_conn) - #if swap_nodes(nodes_copy, swaps, DATA_KEY_FORMAT, i0, i_data): next_index(i_data) - print_debug(db) - + for key in nodes: + var iv = get_key_indexes(key) + var i0 = Vector2(iv[0], iv[1]) + if HEAD_PREFIX in key: + swap_nodes(nodes_copy, HEAD_KEY_FORMAT, i0, i_hdr[0]) + next_index(i_hdr) + elif NODE_PREFIX in key: + swap_nodes(nodes_copy, NODE_KEY_FORMAT, i0, i_node[0]) + next_index(i_node) + elif SLCT_PREFIX in key: + swap_nodes(nodes_copy, ROW_SELECTOR_KEY_FORMAT, i0, i_slct[0]) + next_index(i_slct) + elif CONN_PREFIX in key: + swap_nodes(nodes_copy, CONNECTED_KEY_FORMAT, i0, i_conn[0]) + next_index(i_conn) + elif DATA_PREFIX in key: + swap_nodes(nodes_copy, DATA_KEY_FORMAT, i0, i_data[0]) + next_index(i_data) nodes.clear() nodes.merge(nodes_copy) - print_debug('после: %s' % str(nodes.keys())) func clear_rows() -> void: