Skip to content

Modifica test e main node#15

Merged
Steva0 merged 3 commits intomainfrom
modifica-Test-e-mainNode
Dec 29, 2024
Merged

Modifica test e main node#15
Steva0 merged 3 commits intomainfrom
modifica-Test-e-mainNode

Conversation

@Steva0
Copy link
Owner

@Steva0 Steva0 commented Dec 29, 2024

Sommario di Sourcery

Refactoring dell'implementazione della lista concatenata per rimuovere la gestione personalizzata delle eccezioni e utilizzare invece eccezioni standard. Aggiornare la logica del nodo principale per gestire le eccezioni.

Correzioni di Bug:

  • Correzione: Gestire scenari di liste vuote nelle operazioni di lista concatenata.

Miglioramenti:

  • Miglioramento: Implementare metodi removeDispositivo utilizzando sia il nome del dispositivo che l'ID.
  • Miglioramento: Migliorare la gestione dei nodi della lista concatenata rimuovendo il costruttore di copia e l'operatore di assegnazione non necessari.

Test:

  • Test: Modificare i test per riflettere i cambiamenti nella gestione delle eccezioni e nella funzionalità della lista concatenata.
Original summary in English

Summary by Sourcery

Refactor the linked list implementation to remove custom exception handling and use standard exceptions instead. Update the main node logic to handle exceptions.

Bug Fixes:

  • Fix: Handle empty list scenarios in linked list operations.

Enhancements:

  • Enhancement: Implement removeDispositivo methods using both device name and ID.
  • Enhancement: Improve linked list node management by removing unnecessary copy constructor and assignment operator.

Tests:

  • Test: Modify tests to reflect changes in exception handling and linked list functionality.

@Steva0 Steva0 merged commit c5c5fd4 into main Dec 29, 2024
2 checks passed
@Steva0 Steva0 deleted the modifica-Test-e-mainNode branch December 29, 2024 13:08
@sourcery-ai
Copy link

sourcery-ai bot commented Dec 29, 2024

Guida per il Revisore di Sourcery

Questa pull request refactorizza la classe LinkedList e aggiorna il file mainNode.cpp per gestire le eccezioni. Le modifiche migliorano la funzionalità e la gestione degli errori dell'implementazione della lista concatenata.

Diagramma delle classi che mostra le modifiche alla classe LinkedList

classDiagram
    class LinkedList {
      -Node* head
      -Node* tail
      +LinkedList()
      +LinkedList(Dispositivo& dispositivo)
      +void insert(Dispositivo& dispositivo)
      +Dispositivo* removeDispositivoName(string nome)
      +Dispositivo* removeDispositivoId(int id)
      +vector~Dispositivo*~ removeAllDispositiviOff(int currentTime)
      +void removeTimer(string nome)
      +void removeAllTimers()
      +bool isEmpty() const
      -Node* searchDispositivoName(string nome) const
      -Node* searchDispositivoId(int id) const
      -void connectBefore(Node* p, Node* q)
    }

    class Node {
      +Dispositivo* disp
      +Node* prev
      +Node* next
      +Node(Dispositivo& data)
      +~Node()
    }

    note for Node "Rimosso costruttore di copia e operatore di assegnazione"
    note for LinkedList "Aggiunte operazioni basate su ID e migliorata la gestione degli errori"
Loading

Modifiche a Livello di File

Modifica Dettagli File
Aggiunta funzione removeDispositivoId per rimuovere un dispositivo per ID.
  • Implementata la funzione removeDispositivoId in LinkedList.cpp per rimuovere un dispositivo dalla lista in base al suo ID.
  • Aggiunta la firma della funzione removeDispositivoId in LinkedList.h.
src/LinkedList.cpp
include/LinkedList.h
Rinominato removeDispositivo in removeDispositivoName.
  • Rinominata la funzione removeDispositivo in removeDispositivoName in LinkedList.cpp e aggiornata di conseguenza.
  • Aggiornata la firma della funzione in LinkedList.h per riflettere il cambio di nome.
  • Aggiornate le chiamate a removeDispositivo in mainNode.cpp per utilizzare removeDispositivoName.
src/LinkedList.cpp
include/LinkedList.h
src/mainNode.cpp
Rimosso costruttore di copia e operatore di assegnazione dalla classe Node.
  • Rimosso il costruttore di copia e l'operatore di assegnazione dalla classe Node in LinkedList.cpp.
  • Rimosse le dichiarazioni per il costruttore di copia e l'operatore di assegnazione da LinkedList.h.
src/LinkedList.cpp
include/LinkedList.h
Aggiornato mainNode.cpp per gestire le eccezioni.
  • Aggiunto un blocco try-catch in mainNode.cpp per gestire le potenziali eccezioni generate dalla classe LinkedList.
  • Il blocco try-catch garantisce che il programma esca in modo elegante se si verifica un'eccezione.
src/mainNode.cpp
Rimosse classi di eccezioni non utilizzate.
  • Rimossi i file DispositivoNonTrovatoException.h e ListaVuotaException.h.
  • Aggiornato CMakeLists.txt per rimuovere i riferimenti ai file di eccezioni eliminati.
  • Sostituite eccezioni personalizzate con eccezioni standard in LinkedList.cpp e LinkedList.h
include/DispositivoNonTrovatoException.h
include/ListaVuotaException.h
CMakeLists.txt
Aggiornato searchDispositivo in searchDispositivoName e aggiunto searchDispositivoId.
  • Rinominata la funzione searchDispositivo in searchDispositivoName in LinkedList.cpp e aggiornata di conseguenza.
  • Aggiunta la funzione searchDispositivoId per cercare un dispositivo per ID.
  • Aggiornate le firme delle funzioni in LinkedList.h per riflettere il cambio di nome e l'aggiunta.
src/LinkedList.cpp
include/LinkedList.h
Aggiornati namespace e inclusioni.
  • Aggiunti prefissi std:: dove necessario per i componenti della libreria standard.
  • Incluso l'header <exception> in LinkedList.h.
  • Rimosso using namespace std; da LinkedList.cpp.
src/LinkedList.cpp
include/LinkedList.h
src/mainNode.cpp

Suggerimenti e comandi

Interazione con Sourcery

  • Avviare una nuova revisione: Commenta @sourcery-ai review sulla pull request.
  • Continuare le discussioni: Rispondi direttamente ai commenti di revisione di Sourcery.
  • Generare un issue GitHub da un commento di revisione: Chiedi a Sourcery di creare un issue da un commento di revisione rispondendo ad esso.
  • Generare un titolo per la pull request: Scrivi @sourcery-ai in qualsiasi punto del titolo della pull request per generare un titolo in qualsiasi momento.
  • Generare un riepilogo della pull request: Scrivi @sourcery-ai summary in qualsiasi punto del corpo della pull request per generare un riepilogo PR in qualsiasi momento. Puoi anche utilizzare questo comando per specificare dove inserire il riepilogo.

Personalizzazione della Tua Esperienza

Accedi alla tua dashboard per:

  • Abilitare o disabilitare funzionalità di revisione come il riepilogo della pull request generato da Sourcery, la guida per il revisore e altri.
  • Cambiare la lingua di revisione.
  • Aggiungere, rimuovere o modificare istruzioni di revisione personalizzate.
  • Regolare altre impostazioni di revisione.

Ottenere Aiuto

Original review guide in English

Reviewer's Guide by Sourcery

This pull request refactors the LinkedList class and updates the mainNode.cpp file to handle exceptions. The changes improve the functionality and error handling of the linked list implementation.

Class diagram showing LinkedList class changes

classDiagram
    class LinkedList {
      -Node* head
      -Node* tail
      +LinkedList()
      +LinkedList(Dispositivo& dispositivo)
      +void insert(Dispositivo& dispositivo)
      +Dispositivo* removeDispositivoName(string nome)
      +Dispositivo* removeDispositivoId(int id)
      +vector~Dispositivo*~ removeAllDispositiviOff(int currentTime)
      +void removeTimer(string nome)
      +void removeAllTimers()
      +bool isEmpty() const
      -Node* searchDispositivoName(string nome) const
      -Node* searchDispositivoId(int id) const
      -void connectBefore(Node* p, Node* q)
    }

    class Node {
      +Dispositivo* disp
      +Node* prev
      +Node* next
      +Node(Dispositivo& data)
      +~Node()
    }

    note for Node "Removed copy constructor and assignment operator"
    note for LinkedList "Added ID-based operations and improved error handling"
Loading

File-Level Changes

Change Details Files
Added removeDispositivoId function to remove a device by ID.
  • Implemented the removeDispositivoId function in LinkedList.cpp to remove a device from the list based on its ID.
  • Added the function signature for removeDispositivoId in LinkedList.h.
src/LinkedList.cpp
include/LinkedList.h
Renamed removeDispositivo to removeDispositivoName.
  • Renamed the removeDispositivo function to removeDispositivoName in LinkedList.cpp and updated its implementation accordingly.
  • Updated the function signature in LinkedList.h to reflect the name change.
  • Updated the calls to removeDispositivo in mainNode.cpp to use removeDispositivoName.
src/LinkedList.cpp
include/LinkedList.h
src/mainNode.cpp
Removed copy constructor and copy assignment operator from the Node class.
  • Removed the copy constructor and copy assignment operator from the Node class in LinkedList.cpp.
  • Removed the declarations for the copy constructor and copy assignment operator from LinkedList.h.
src/LinkedList.cpp
include/LinkedList.h
Updated mainNode.cpp to handle exceptions.
  • Added a try-catch block in mainNode.cpp to handle potential exceptions thrown by the LinkedList class.
  • The try-catch block ensures that the program exits gracefully if an exception occurs.
src/mainNode.cpp
Removed unused exception classes.
  • Removed the DispositivoNonTrovatoException.h and ListaVuotaException.h files.
  • Updated CMakeLists.txt to remove the references to the deleted exception files.
  • Replaced custom exceptions with standard exceptions in LinkedList.cpp and LinkedList.h
include/DispositivoNonTrovatoException.h
include/ListaVuotaException.h
CMakeLists.txt
Updated searchDispositivo to searchDispositivoName and added searchDispositivoId.
  • Renamed the searchDispositivo function to searchDispositivoName in LinkedList.cpp and updated its implementation accordingly.
  • Added the searchDispositivoId function to search for a device by ID.
  • Updated the function signatures in LinkedList.h to reflect the name change and addition.
src/LinkedList.cpp
include/LinkedList.h
Updated namespaces and includes.
  • Added std:: prefix where necessary for standard library components.
  • Included <exception> header in LinkedList.h.
  • Removed using namespace std; from LinkedList.cpp.
src/LinkedList.cpp
include/LinkedList.h
src/mainNode.cpp

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time. You can also use
    this command to specify where the summary should be inserted.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ciao @Steva0 - Ho esaminato le tue modifiche - ecco alcuni feedback:

Commenti generali:

  • Considera di dichiarare esplicitamente il costruttore di copia e l'operatore di assegnazione di Node come eliminati (=delete) se la copia non è prevista, oppure implementali correttamente se la copia dovrebbe essere supportata.
  • Esiste codice duplicato in removeDispositivoName e removeDispositivoId. Considera di estrarre la logica comune di rimozione del nodo in un metodo helper privato.
Ecco cosa ho esaminato durante la revisione
  • 🟡 Problemi generali: 5 problemi trovati
  • 🟢 Sicurezza: tutto a posto
  • 🟢 Test: tutto a posto
  • 🟢 Complessità: tutto a posto
  • 🟢 Documentazione: tutto a posto

Il tuo periodo di prova scade l'11 gennaio 2025. Per favore aggiorna per continuare a utilizzare Sourcery ✨

Aiutami a essere più utile! Per favore, fai clic su 👍 o 👎 su ogni commento e userò il feedback per migliorare le tue revisioni.
Original comment in English

Hey @Steva0 - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Consider explicitly declaring Node's copy constructor and assignment operator as deleted (=delete) if copying is not intended, or implement them properly if copying should be supported.
  • There's duplicate code in removeDispositivoName and removeDispositivoId. Consider extracting the common node removal logic into a private helper method.
Here's what I looked at during the review
  • 🟡 General issues: 5 issues found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Your trial expires on January 11, 2025. Please upgrade to continue using Sourcery ✨

Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

LinkedList::Node::~Node()
{
delete disp;
prev = nullptr;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Il distruttore di Node non elimina più il puntatore disp - per favore chiarisci la semantica di proprietà

Se LinkedList dovrebbe possedere gli oggetti Dispositivo, questo potrebbe causare memory leak. Se non è così, l'implementazione precedente era scorretta. Per favore documenta il modello di proprietà previsto.

Original comment in English

issue (bug_risk): The Node destructor no longer deletes the disp pointer - please clarify ownership semantics

If LinkedList is supposed to own the Dispositivo objects, this could cause memory leaks. If not, the previous implementation was incorrect. Please document the intended ownership model.

}

vector<Dispositivo*> LinkedList::removeAllDispositiviOff(const int currentTime)
std::vector<Dispositivo*> LinkedList::removeAllDispositiviOff(const int currentTime)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Modificare la lista durante l'iterazione può portare a un comportamento indefinito

L'implementazione corrente modifica la struttura della lista durante l'iterazione. Considera di raccogliere prima i nodi da rimuovere, quindi rimuoverli in un passaggio separato.

Original comment in English

issue (bug_risk): Modifying list while iterating can lead to undefined behavior

The current implementation modifies the list structure while iterating through it. Consider collecting nodes to remove first, then removing them in a separate pass.


Node* current = searchDispositivoName(nome);

if(current == head)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: Il caso di un singolo elemento non è gestito nelle funzioni di rimozione

Quando head == tail (la lista ha un solo elemento), il codice corrente causerà una dereferenziazione di puntatore nullo. Aggiungi un caso speciale per le liste con un singolo elemento.

Original comment in English

issue: Single element case not handled in remove functions

When head == tail (list has one element), the current code will cause null pointer dereference. Add a special case for single-element lists.

cout << list << endl;
cout << Asciugatrice.getOrarioSpegnimento() << endl;
}
catch (exception& e) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Il gestore delle eccezioni dovrebbe registrare i dettagli dell'errore

Considera di registrare i dettagli dell'eccezione utilizzando e.what() prima di restituire, per aiutare nel debug.

Implementazione suggerita:

    catch (exception& e) {
        cerr << "Errore: " << e.what() << endl;
        return 1;
    }

Se la base di codice utilizza un framework di registrazione specifico invece dell'output diretto su cerr, dovresti sostituire cerr con il meccanismo di registrazione appropriato per essere coerente con il resto della base di codice.

Original comment in English

suggestion (bug_risk): Exception handler should log error details

Consider logging the exception details using e.what() before returning, to help with debugging.

Suggested implementation:

    catch (exception& e) {
        cerr << "Error: " << e.what() << endl;
        return 1;
    }

If the codebase uses a specific logging framework instead of direct cerr output, you should replace cerr with the appropriate logging mechanism for consistency with the rest of the codebase.

Comment on lines 21 to +24
include/Dispositivo.h
include/ListaDispositivi.h
include/RicercaDispositivo.h
include/LinkedList.h
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: La documentazione per LinkedList sarebbe utile.

Sarebbe utile aggiungere documentazione che spieghi lo scopo e l'utilizzo della classe LinkedList. Questo aiuterà altri sviluppatori a capire come si inserisce nel progetto complessivo.

Implementazione suggerita:

/**
 * @file LinkedList.h
 * @brief Un'implementazione generica di lista concatenata per la gestione di raccolte di elementi
 *
 * Questa classe fornisce un'implementazione standard di una struttura dati di lista concatenata che può
 * essere utilizzata per memorizzare e gestire sequenze di elementi. Supporta operazioni di base
 * come inserimento, eliminazione e attraversamento degli elementi.
 *
 * Esempio di utilizzo:
 * @code
 * LinkedList<int> list;
 * list.add(1);
 * list.add(2);
 * list.remove(1);
 * @endcode
 */

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

La modifica precedente aggiunge la documentazione a livello di file. Dovresti inoltre aggiungere documentazione per:

  1. La classe LinkedList stessa utilizzando commenti in stile Doxygen simili prima della dichiarazione della classe
  2. Singoli metodi nella classe LinkedList
  3. Eventuali variabili membro importanti

La documentazione esatta dipenderà dai dettagli di implementazione effettivi della tua classe LinkedList, che non posso vedere nel frammento di codice fornito.

Esempio di documentazione a livello di classe da aggiungere:

/**
 * @class LinkedList
 * @brief Una classe contenitore di lista concatenata con template
 *
 * @tparam T Il tipo di elementi memorizzati nella lista concatenata
 *
 * Questa classe implementa una lista concatenata singola/doppia che fornisce
 * operazioni standard di lista. Mantiene puntatori interni alla testa e alla coda
 * della lista per operazioni efficienti.
 */
Original comment in English

suggestion: Documentation for LinkedList would be helpful.

It would be beneficial to add documentation explaining the purpose and usage of the LinkedList class. This will help other developers understand how it fits into the overall project.

Suggested implementation:

/**
 * @file LinkedList.h
 * @brief A generic linked list implementation for managing collections of elements
 *
 * This class provides a standard linked list data structure implementation that can
 * be used to store and manage sequences of elements. It supports basic operations
 * like insertion, deletion, and traversal of elements.
 *
 * Usage example:
 * @code
 * LinkedList<int> list;
 * list.add(1);
 * list.add(2);
 * list.remove(1);
 * @endcode
 */

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

The above change adds file-level documentation. You should also add documentation for:

  1. The LinkedList class itself using similar Doxygen-style comments before the class declaration
  2. Individual methods in the LinkedList class
  3. Any important member variables

The exact documentation will depend on the actual implementation details of your LinkedList class, which I cannot see in the provided code snippet.

Example of class-level documentation to add:

/**
 * @class LinkedList
 * @brief A templated linked list container class
 *
 * @tparam T The type of elements stored in the linked list
 *
 * This class implements a singly/doubly linked list that provides
 * standard list operations. It maintains internal pointers to the
 * head and tail of the list for efficient operations.
 */

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants