From 504657f63dd7b5575ffc8a9649d2c2684b3c6d5a Mon Sep 17 00:00:00 2001
From: Eduardo Souza <eduardomsouza@ufpr.br>
Date: Mon, 28 Oct 2024 21:19:13 -0300
Subject: [PATCH] [FIX] Impressao

---
 a.out | Bin 20816 -> 20872 bytes
 t2.c  |  42 +++++++++++++++++++++++++++++++-----------
 2 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/a.out b/a.out
index 59a6a27fa0f9cc3a0ea4b862fa67d16f795b3823..d09150a276fe6fcef6dbd8fb6994b7e23abaf262 100644
GIT binary patch
delta 2597
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
O`D1`N<I2gJf$9K1RM2Sv

delta 2240
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
B#{2*P

diff --git a/t2.c b/t2.c
index 070387f..676612b 100644
--- a/t2.c
+++ b/t2.c
@@ -168,7 +168,6 @@ void calculate_finger_table(Node* head, int max_id) {
     Node* current = head;
     printf("Max_id:%d\n", max_id);
     int log2_max_id = ceil(log2(max_id));
-    current->tam_finger = log2_max_id;
     printf("Log2_max_id:%d\n", log2_max_id);
     do {
         for (int k = 1; k <= log2_max_id; k++) {
@@ -182,13 +181,26 @@ void calculate_finger_table(Node* head, int max_id) {
             }
             current->finger[k-1] = temp->id;
         }
+        current->tam_finger = log2_max_id;
         current = current->next;
     } while (current != head);
 }
 
 
 // Função para imprimir todas as tabelas finger
-void print_finger_table(Node* head, int timestamp) {
+void print_finger_table(Node** nodes_involved,int num_nodes, int timestamp) {
+    for(int i = 0; i <= num_nodes; i++) {
+        printf("%d T %d {", timestamp, nodes_involved[i]->id);
+        for (int j = 0; j < nodes_involved[i]->tam_finger; j++) {
+            printf("%d", nodes_involved[i]->finger[j]);
+            if (j < nodes_involved[i]->tam_finger - 1)
+                printf(",");
+        }
+        printf("}\n");
+    }
+}
+
+void print_finger_table_completa(Node* head, int timestamp) {
     Node* current = head;
     do {
         printf("%d F %d {", timestamp, current->id);
@@ -201,11 +213,12 @@ void print_finger_table(Node* head, int timestamp) {
 }
 
 
+
 // Função para realizar lookup de uma chave
-void lookup(Node* head, int timestamp, int node_id, int key){
+Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes) {
     Node* current = head;
-    Node* nodes_involved[TAM_MAX_FINGER];
-    int nodes_count = 0;
+    Node** nodes_involved = (Node**)malloc(TAM_MAX_FINGER * sizeof(Node*));
+    *num_nodes = 0;
 
     while (current->id != node_id) {
         current = current->next;
@@ -214,6 +227,7 @@ void lookup(Node* head, int timestamp, int node_id, int key){
     printf("%d L %d {", timestamp, key);
     Node* start = current; //Meu nó partida
     int id_aux = current->id;
+    nodes_involved[(*num_nodes)++] = current;
     printf("%d,", current->id);
 
     while(1){
@@ -222,7 +236,8 @@ void lookup(Node* head, int timestamp, int node_id, int key){
         for (int i = 0; i < current->key_count; i++) {
             if (current->keys[i] == key) {
                 printf("%d}\n", current->id);
-                return;
+                nodes_involved[(*num_nodes)++] = current;
+                return nodes_involved;
             }
         }
         //Procura o maior nó conhecido pela finger_table que está acima do valor da chave
@@ -249,13 +264,14 @@ void lookup(Node* head, int timestamp, int node_id, int key){
         while(current->id != id_aux){
             current = current->next;
         }
-        nodes_involved[nodes_count++] = current; //Adiciona o nó atual ao array de nós envolvidos
+        nodes_involved[*num_nodes++] = current; //Adiciona o nó atual ao array de nós envolvidos
 
         //Verificar se o nó atual já tem a chave
         for (int i = 0; i < current->key_count; i++) {
             if (current->keys[i] == key) {
+                nodes_involved[(*num_nodes)++] = current;
                 printf("}\n");
-                return;
+                return nodes_involved;
             }
         }
         //Se o nó atual não tiver a chave, continuar a busca
@@ -263,7 +279,8 @@ void lookup(Node* head, int timestamp, int node_id, int key){
         start = current;
     }
     printf("}\n");
-    nodes_involved[nodes_count++] = current;
+    nodes_involved[(*num_nodes)++] = current;
+    return nodes_involved;
 }
 
 // Função para adicionar uma chave a um nó respeitando o limite de um nó guarda as chaves maiores que seu antecessor e menores e iguais a ele.
@@ -299,6 +316,7 @@ void imprime_chaves(Node* head) {
 // Função principal para testar a inserção de nós
 int main() {
     Node* dht = NULL;
+    Node **nodes_involved = NULL;
     int timestamp, id, key;
     int max_id = 0;
     char op;
@@ -315,10 +333,12 @@ int main() {
         } else if (op == 'I') {
             insert_key(dht, id, key);
         } else if (op == 'L') {
-            lookup(dht, timestamp, id, key);
+            int num_nodes = 0;
+            nodes_involved= lookup(dht, timestamp, id, key, &num_nodes);
+            print_finger_table(nodes_involved, num_nodes, timestamp);
         } else if (op == 'P'){
             imprime_chaves(dht);
-            print_finger_table(dht, timestamp);
+            print_finger_table_completa(dht, timestamp);
         }
     }
 
-- 
GitLab