From 44ea0a50a39d58cb9e1f167c2973e396b4d853aa Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 28 Feb 2022 20:16:57 +0100 Subject: [PATCH] Migrate to std::shared_ptr --- src/MainWindow.cpp | 9 ++++---- src/MainWindow.hpp | 2 +- src/base_tab/AppendGameDialog.cpp | 4 ++-- src/base_tab/BaseTab.cpp | 6 +++--- src/base_tab/BaseTab.hpp | 4 ++-- src/base_tab/gamebase/GameBase.hpp | 6 +++--- src/base_tab/gamebase/PGNGameBase.cpp | 21 ++++++++----------- src/base_tab/gamebase/PGNGameBase.hpp | 6 +++--- src/engine_tab/EngineTab.hpp | 2 +- src/game_tab/GameTab.cpp | 6 +----- src/game_tab/GameTab.hpp | 7 +++---- src/game_tab/left_panel/GameTabLeftPanel.cpp | 2 +- src/game_tab/left_panel/GameTabLeftPanel.hpp | 4 ++-- .../right_panel/GameTabRightPanel.cpp | 2 +- .../right_panel/GameTabRightPanel.hpp | 4 ++-- src/ochess.hpp | 8 ++++--- 16 files changed, 44 insertions(+), 49 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7078076..a9e720d 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -52,7 +52,7 @@ MainWindow::MainWindow() Bind(REFRESH_ENGINE_LIST, &MainWindow::OnRefreshEngineList, this, wxID_ANY); // Add new game tab by default - NewGame(new Game()); + NewGame(std::shared_ptr(new Game())); } void MainWindow::OnCloseTabEvent(wxCommandEvent &event) { @@ -191,8 +191,9 @@ void MainWindow::NewGame(bool useFen) { } void MainWindow::OnNewGame(wxCommandEvent &event) { - Game *g = (Game *)event.GetClientData(); - NewGame(g); + std::shared_ptr *g = (std::shared_ptr*)event.GetClientData(); + NewGame(*g); + delete g; } void MainWindow::OnPageChange(wxAuiNotebookEvent &event) { @@ -214,7 +215,7 @@ void MainWindow::OnRefreshTabTitle(wxCommandEvent &event) { } } -void MainWindow::NewGame(Game *game) { +void MainWindow::NewGame(std::shared_ptr game) { GameTab *gt = new GameTab((wxFrame *)notebook, game); notebook->AddPage(gt, gt->GetLabel()); notebook->SetSelection(notebook->GetPageIndex(gt)); diff --git a/src/MainWindow.hpp b/src/MainWindow.hpp index c223701..bd33ad7 100644 --- a/src/MainWindow.hpp +++ b/src/MainWindow.hpp @@ -23,7 +23,7 @@ class MainWindow : public MainFrame { void OpenFile(); void OnPageChange(wxAuiNotebookEvent &event); void OnRefreshTabTitle(wxCommandEvent &event); - void NewGame(Game *game); + void NewGame(std::shared_ptr game); void OpenSettings(); void NewEngine(); void OnCloseTabEvent(wxCommandEvent &event); diff --git a/src/base_tab/AppendGameDialog.cpp b/src/base_tab/AppendGameDialog.cpp index a4ac126..258b965 100644 --- a/src/base_tab/AppendGameDialog.cpp +++ b/src/base_tab/AppendGameDialog.cpp @@ -27,7 +27,7 @@ void AppendGameDialog::OnCancel(wxCommandEvent &event) { this->Close(); } void AppendGameDialog::OnImport(wxCommandEvent &event) { std::vector to_ignore; std::vector new_games_bases; - std::vector new_games; + std::vector> new_games; wxArrayInt selections; game_list->GetSelections(selections); @@ -37,7 +37,7 @@ void AppendGameDialog::OnImport(wxCommandEvent &event) { if (tinfo->type == TabInfos::BASE) { new_games_bases.push_back(static_cast(tinfo->GetBase())); } else if (tinfo->type == TabInfos::GAME) { - new_games.push_back(static_cast(tinfo->GetGame())); + new_games.push_back(tinfo->GetGame()); } } diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp index 410cc92..fd94ef8 100644 --- a/src/base_tab/BaseTab.cpp +++ b/src/base_tab/BaseTab.cpp @@ -54,7 +54,7 @@ void BaseTab::OnDelete(wxCommandEvent &event) { void BaseTab::OnSave(wxCommandEvent &event) { std::vector new_games_bases; - std::vector new_games; + std::vector> new_games; new_games.insert( new_games.end(), edited.begin(), edited.end()); // Add edited game (since they are also deleted) @@ -67,9 +67,9 @@ void BaseTab::OnSave(wxCommandEvent &event) { void BaseTab::OnOpenGame(wxListEvent &event) { wxLogDebug("Open!"); long id = std::stoi(event.GetItem().GetText().ToStdString()); - Game *g = base->GetGame(id); + std::shared_ptr *g =new std::shared_ptr(base->GetGame(id)); if (g != NULL) { - edited.push_back(g); + edited.push_back(*g); deleted.push_back(id); game_list->SetItemBackgroundColour(event.GetIndex(), *wxGREEN); wxCommandEvent newGameEvent(NEW_GAME_EVENT, GetId()); diff --git a/src/base_tab/BaseTab.hpp b/src/base_tab/BaseTab.hpp index 2f05c67..f195d0e 100644 --- a/src/base_tab/BaseTab.hpp +++ b/src/base_tab/BaseTab.hpp @@ -10,7 +10,7 @@ wxDECLARE_EVENT(REFRESH_TAB_TITLE, wxCommandEvent); class BaseTab : public TabBase, public TabInfos { GameBase *base; std::vector deleted; - std::vector edited; + std::vector> edited; std::string base_file; public: @@ -23,6 +23,6 @@ public: void OnExport(wxCommandEvent &event); void OnOpenGame(wxListEvent &event); void OnImport(wxCommandEvent &event); - void *GetGame() { return (NULL); } + std::shared_ptr GetGame() { return (std::shared_ptr(NULL)); } void *GetBase() { return (base); }; }; \ No newline at end of file diff --git a/src/base_tab/gamebase/GameBase.hpp b/src/base_tab/gamebase/GameBase.hpp index d13c01d..a913484 100644 --- a/src/base_tab/gamebase/GameBase.hpp +++ b/src/base_tab/gamebase/GameBase.hpp @@ -6,11 +6,11 @@ class GameBase { public: - virtual Game *GetGame(std::uint32_t id) = 0; + virtual std::shared_ptr GetGame(std::uint32_t id) = 0; virtual void Save(std::vector to_ignore, std::vector new_games_bases, - std::vector new_games) = 0; - virtual Game *GetCurrentGame() = 0; + std::vector> new_games) = 0; + virtual std::shared_ptr GetCurrentGame() = 0; virtual bool NextGame() = 0; virtual std::string GetTag(std::string tag) = 0; virtual void Reset() = 0; diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp index edcd98f..331d760 100644 --- a/src/base_tab/gamebase/PGNGameBase.cpp +++ b/src/base_tab/gamebase/PGNGameBase.cpp @@ -28,7 +28,7 @@ std::string PGNGameBase::GetTag(std::string tag) { return (""); } -Game *PGNGameBase::GetCurrentGame() { +std::shared_ptr PGNGameBase::GetCurrentGame() { pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove(); pgn->GetMoves(pgnp_moves); std::string fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; @@ -42,7 +42,7 @@ Game *PGNGameBase::GetCurrentGame() { g->SetTag(s, pgn->GetTagValue(s)); } g->SetResult(pgn->GetResult()); - return (g); + return (std::shared_ptr(g)); } void PGNGameBase::Reset() { @@ -51,7 +51,7 @@ void PGNGameBase::Reset() { pgn->FromFile(file); } -Game *PGNGameBase::GetGame(std::uint32_t id) { +std::shared_ptr PGNGameBase::GetGame(std::uint32_t id) { Reset(); std::uint32_t curid = 0; while (NextGame()) { @@ -60,12 +60,12 @@ Game *PGNGameBase::GetGame(std::uint32_t id) { } curid++; } - return (NULL); + return (std::shared_ptr(NULL)); } void PGNGameBase::Save(std::vector to_ignore, std::vector new_games_bases, - std::vector new_games) { + std::vector> new_games) { wxStandardPaths stdPaths = wxStandardPaths::Get(); wxString tmp = stdPaths.GetTempDir() + "/save_pgn_tmp.pgn"; wxFile new_pgn(tmp, wxFile::write); @@ -80,9 +80,8 @@ void PGNGameBase::Save(std::vector to_ignore, } else { several = true; } - Game *g = GetCurrentGame(); + std::shared_ptr g = GetCurrentGame(); new_pgn.Write(g->GetPGN()); - delete g; } id++; } @@ -96,13 +95,12 @@ void PGNGameBase::Save(std::vector to_ignore, } else { several = true; } - Game *g = current->GetCurrentGame(); + std::shared_ptr g = current->GetCurrentGame(); new_pgn.Write(g->GetPGN()); - delete g; } } - for (Game *g : new_games) { + for (std::shared_ptr g : new_games) { if (several) { new_pgn.Write("\n\n"); } else { @@ -127,9 +125,8 @@ void PGNGameBase::Export(GameBase *base) { } else { several = true; } - Game *g = base->GetCurrentGame(); + std::shared_ptr g = base->GetCurrentGame(); new_pgn.Write(g->GetPGN()); - delete g; } new_pgn.Close(); diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp index 4f39e1a..53b75ba 100644 --- a/src/base_tab/gamebase/PGNGameBase.hpp +++ b/src/base_tab/gamebase/PGNGameBase.hpp @@ -9,13 +9,13 @@ class PGNGameBase : public GameBase { public: PGNGameBase(std::string pgn_file); ~PGNGameBase(); - Game *GetGame(std::uint32_t id); + std::shared_ptr GetGame(std::uint32_t id); bool NextGame(); - Game *GetCurrentGame(); + std::shared_ptr GetCurrentGame(); std::string GetTag(std::string tag); void Save(std::vector to_ignore, std::vector new_games_bases, - std::vector new_games); + std::vector> new_games); void Reset(); void Export(GameBase *base); }; \ No newline at end of file diff --git a/src/engine_tab/EngineTab.hpp b/src/engine_tab/EngineTab.hpp index aa5eb70..aa09e37 100644 --- a/src/engine_tab/EngineTab.hpp +++ b/src/engine_tab/EngineTab.hpp @@ -18,7 +18,7 @@ public: EngineTab(wxWindow *parent, std::string name); ~EngineTab(); void ApplyPreferences() {} - void *GetGame() { return (NULL); } + std::shared_ptr GetGame() { return (std::shared_ptr(NULL)); } void *GetBase() { return (NULL); } void OnSave(wxCommandEvent &event); void OnDelete(wxCommandEvent &event); diff --git a/src/game_tab/GameTab.cpp b/src/game_tab/GameTab.cpp index 769681c..55d7848 100644 --- a/src/game_tab/GameTab.cpp +++ b/src/game_tab/GameTab.cpp @@ -3,7 +3,7 @@ wxDEFINE_EVENT(GAME_CHANGE, wxCommandEvent); -GameTab::GameTab(wxFrame *parent, Game *game) +GameTab::GameTab(wxFrame *parent, std::shared_ptr game) : wxPanel(parent), game(game), TabInfos(TabInfos::GAME) { // Splitter wxSplitterWindow *splitter = new wxSplitterWindow(this, wxID_ANY); @@ -30,10 +30,6 @@ GameTab::GameTab(wxFrame *parent, Game *game) Bind(GAME_CHANGE, &GameTab::OnGameChange, this, wxID_ANY); } -GameTab::~GameTab() { - delete game; -} - void GameTab::OnGameChange(wxCommandEvent &event) { board_panel->Notify(); editor_panel->Notify(); diff --git a/src/game_tab/GameTab.hpp b/src/game_tab/GameTab.hpp index 15f0514..6b24473 100644 --- a/src/game_tab/GameTab.hpp +++ b/src/game_tab/GameTab.hpp @@ -16,16 +16,15 @@ wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent); class GameTab : public wxPanel, public TabInfos { GameTabRightPanel *editor_panel; GameTabLeftPanel *board_panel; - Game *game; + std::shared_ptr game; void RefreshLabel(); void OnRefreshTabTitle(wxCommandEvent &event); void OnGameChange(wxCommandEvent &event); public: - GameTab(wxFrame *parent, Game *game); - ~GameTab(); + GameTab(wxFrame *parent, std::shared_ptr game); void ApplyPreferences(); - void *GetGame() { return (game); } + std::shared_ptr GetGame() { return (std::shared_ptr(game)); } void *GetBase() { return (NULL); }; }; diff --git a/src/game_tab/left_panel/GameTabLeftPanel.cpp b/src/game_tab/left_panel/GameTabLeftPanel.cpp index d4c415d..a32ab23 100644 --- a/src/game_tab/left_panel/GameTabLeftPanel.cpp +++ b/src/game_tab/left_panel/GameTabLeftPanel.cpp @@ -1,7 +1,7 @@ #include "GameTabLeftPanel.hpp" #include -GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, Game *game) +GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr game) : TabGameLeftPanel(parent), game(game) { // Add board diff --git a/src/game_tab/left_panel/GameTabLeftPanel.hpp b/src/game_tab/left_panel/GameTabLeftPanel.hpp index c4b58b9..7aeb725 100644 --- a/src/game_tab/left_panel/GameTabLeftPanel.hpp +++ b/src/game_tab/left_panel/GameTabLeftPanel.hpp @@ -9,12 +9,12 @@ wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent); class GameTabLeftPanel : public TabGameLeftPanel { - Game *game; + std::shared_ptr game; BoardCanvas *board_canvas; void NotifyEditor(); public: - GameTabLeftPanel(wxFrame *parent, Game *game); + GameTabLeftPanel(wxFrame *parent, std::shared_ptr game); void Notify(); void OnPlay(wxCommandEvent &event); void OnGotoMove(wxCommandEvent &event); diff --git a/src/game_tab/right_panel/GameTabRightPanel.cpp b/src/game_tab/right_panel/GameTabRightPanel.cpp index f34dd59..569f2c3 100644 --- a/src/game_tab/right_panel/GameTabRightPanel.cpp +++ b/src/game_tab/right_panel/GameTabRightPanel.cpp @@ -7,7 +7,7 @@ wxDEFINE_EVENT(SET_AS_MAINLINE_EVENT, wxCommandEvent); wxDEFINE_EVENT(PREVIOUS_MOVE_EVENT, wxCommandEvent); wxDEFINE_EVENT(NEXT_MOVE_EVENT, wxCommandEvent); -GameTabRightPanel::GameTabRightPanel(wxFrame *parent, Game *game) +GameTabRightPanel::GameTabRightPanel(wxFrame *parent, std::shared_ptr game) : TabGameRightPanel(parent), game(game), selected_item(-1), live_engine(NULL) { editor_canvas = new EditorCanvas((wxFrame *)editor_page); diff --git a/src/game_tab/right_panel/GameTabRightPanel.hpp b/src/game_tab/right_panel/GameTabRightPanel.hpp index 021f755..20593ed 100644 --- a/src/game_tab/right_panel/GameTabRightPanel.hpp +++ b/src/game_tab/right_panel/GameTabRightPanel.hpp @@ -16,13 +16,13 @@ wxDECLARE_EVENT(REFRESH_TAB_TITLE, wxCommandEvent); wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent); class GameTabRightPanel : public TabGameRightPanel { - Game *game; + std::shared_ptr game; EditorCanvas *editor_canvas; long selected_item; LiveEngineDialog *live_engine; public: - GameTabRightPanel(wxFrame *parent, Game *game); + GameTabRightPanel(wxFrame *parent, std::shared_ptr game); void NotifyBoard(); void Notify(); void OnCommentChange(wxCommandEvent &event); diff --git a/src/ochess.hpp b/src/ochess.hpp index 6303e31..3b2769e 100644 --- a/src/ochess.hpp +++ b/src/ochess.hpp @@ -6,12 +6,12 @@ #endif #include "binres/binres.hpp" +#include "gui.h" +#include #include #include #include // Check file exists etc #include -#include "gui.h" -#include #define MAINWIN ((MainWindow *)wxGetApp().GetTopWindow()) @@ -46,6 +46,8 @@ wxDECLARE_APP(MyApp); ///@brief Abort ochess with a message void Abort(std::string msg); +class Game; + /** * @brief Attach informations to the application tabs * @@ -56,6 +58,6 @@ public: Type type; TabInfos(Type type_) : type(type_) {} virtual void ApplyPreferences() = 0; - virtual void *GetGame() = 0; + virtual std::shared_ptr GetGame() = 0; virtual void *GetBase() = 0; };